Given a square matrix, compute its determinant and trace. Implement both operations from scratch without using built-in linear algebra functions.
def matrix_trace(matrix: list[list[float]]) -> float:
n = len(matrix)
return sum(matrix[i][i] for i in range(n))
def matrix_determinant(matrix: list[list[float]]) -> float:
n = len(matrix)
if n == 1:
return matrix[0][0]
if n == 2:
return matrix[0][0] * matrix[1][1] - matrix[0][1] * matrix[1][0]
det = 0.0
for col in range(n):
# Build minor matrix
minor = []
for i in range(1, n):
row = []
for j in range(n):
if j != col:
row.append(matrix[i][j])
minor.append(row)
cofactor = ((-1) ** col) * matrix[0][col] * matrix_determinant(minor)
det += cofactor
return det
def det_and_trace(matrix: list[list[float]]) -> tuple:
return matrix_determinant(matrix), matrix_trace(matrix)matrix[i][i] for i = 0..n-1.ad - bc.(-1)^col * element * det(minor).