新的python和生锈的线性代数。但是,我正在寻找关于在不使用Numpy的情况下从python中的矩阵创建行列式的正确方法的指导。请参阅下面的代码片段。非常感谢任何帮助。
import math
from math import sqrt
import numbers
import operators
def determinant(self)
if not self.is_square():
raise(ValueError, "Cannot calculate determinant of non-square matrix.")
if self.h > 2:
raise(NotImplementedError, "Calculating determinant not implemented for matrices larger than 2x2.")
|x| = A
det(A) = [[A, B][C, D]]
assert self.rows == A.cols
assert self.row > 1
term_list = []
答案 0 :(得分:1)
def determinant(matrix, mul):
width = len(matrix)
if width == 1:
return mul * matrix[0][0]
else:
sign = -1
sum = 0
for i in range(width):
m = []
for j in range(1, width):
buff = []
for k in range(width):
if k != i:
buff.append(matrix[j][k])
m.append(buff)
sign *= -1
sum += mul * determinant(m, sign * matrix[0][i])
return sum
test_matrix = [[1,-2,3],[0,-3,-4],[0,0,-3]]
print(determinant(test_matrix, 1))
答案 1 :(得分:0)
这样你就可以得到非方阵的行列式。也许这是无稽之谈,但我发现 jupyter notebook
中的这个实现很有用,因为避免了对异常使用 try
的需要,有时获得零输出很有趣对于非方阵。
import sympy as sp
import numpy as np
A=np.array([[1,1],[1,2],[-2,-4]])
sp.Matrix(A)
B = np.hstack((A,np.array([[0],[0],[0]])))
sp.Matrix(B)
def determinant(A):
if len(sp.Matrix(A).rref()[1]) < max(np.shape(A)):
return 0
else:
return np.linalg.det(A)
determinant(A)
0
determinant(B)
0
np.linalg.det(A) -----> ERROR