我正在制作一个小型矩阵运算库,作为对自己的编程挑战(以及为了学习使用 Python 编写代码),并且我遇到了计算 2x2、3x3 和 4x4 矩阵的行列式的任务。
就我对线性代数的理解而言,我需要实现 Sarrus 规则才能完成前 2 个,但我不知道如何以 Python 方式或更大尺寸的矩阵来解决这个问题。任何提示、提示或指南将不胜感激。
我正在制作一个小型矩阵运算库,作为对自己的编程挑战(以及为了学习使用 Python 编写代码),并且我遇到了计算 2x2、3x3 和 4x4 矩阵的行列式的任务。
就我对线性代数的理解而言,我需要实现 Sarrus 规则才能完成前 2 个,但我不知道如何以 Python 方式或更大尺寸的矩阵来解决这个问题。任何提示、提示或指南将不胜感激。
Sarrus 规则只是解决 3x3 行列式的助记符,超出该大小不会有帮助。
您应该研究用于计算任意大方阵行列式的莱布尼茨公式。这个公式的好处是n*n
矩阵的行列式是它可以根据它的一些(n-1)*(n-1)
子矩阵的行列式的组合来确定,这很好地适用于递归函数解决方案。
如果您能理解 Leibniz 公式背后的算法,并且您之前使用过递归函数,那么将其转换为代码(Python 或其他)将很简单,然后您就可以找到 4x4 矩阵及其他矩阵的行列式!
如果 M 是浮点矩阵,这是一个丑陋的缩合方法(chio?),我认为它有效......
我使用的是 python 2.7.2
from itertools import product, islice
def det(M,prod=1):
dim = len(M)
if dim == 1:
return prod * M.pop().pop()
it = product(xrange(1,dim),repeat=2)
prod *= M[0][0]
return det([[M[x][y]-M[x][0]*(M[0][y]/M[0][0]) for x,y in islice(it,dim-1)] for i in xrange(dim-1)],prod)