如何使用 python 查找矩阵的行列式
How to find determinant of matrix using python
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 = []
sum
是内置函数,不能用作变量名。代码未正确缩进。这应该有效:
def determinant(matrix, mul):
width = len(matrix)
if width == 1:
return mul * matrix[0][0]
else:
sign = -1
answer = 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
answer = answer + mul * determinant(m, sign * matrix[0][i])
return answer
test_matrix = [[3,2,-3],[7,-1,0],[2,-4,5]]
print(determinant(test_matrix, 1))
这样就可以得到非方阵的行列式。也许这是没有意义的,但我发现它在 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
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 = []
sum
是内置函数,不能用作变量名。代码未正确缩进。这应该有效:
def determinant(matrix, mul):
width = len(matrix)
if width == 1:
return mul * matrix[0][0]
else:
sign = -1
answer = 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
answer = answer + mul * determinant(m, sign * matrix[0][i])
return answer
test_matrix = [[3,2,-3],[7,-1,0],[2,-4,5]]
print(determinant(test_matrix, 1))
这样就可以得到非方阵的行列式。也许这是没有意义的,但我发现它在 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