Check whether a given symmetric matrix is positive definite. A symmetric matrix is positive definite if all its eigenvalues are positive, or equivalently, if Cholesky decomposition succeeds.
from typing import List
def is_positive_definite(matrix: List[List[float]], tol: float = 1e-9) -> bool:
n = len(matrix)
if n == 0:
return True
# Check symmetry
for i in range(n):
for j in range(i + 1, n):
if abs(matrix[i][j] - matrix[j][i]) > tol:
return False
# Attempt Cholesky decomposition
L = [[0.0] * n for _ in range(n)]
for i in range(n):
for j in range(i + 1):
s = sum(L[i][k] * L[j][k] for k in range(j))
if i == j:
val = matrix[i][i] - s
if val <= tol:
return False
L[i][j] = val ** 0.5
else:
if abs(L[j][j]) < tol:
return False
L[i][j] = (matrix[i][j] - s) / L[j][j]
return True