Python行列式计算(不使用外部库)

Python行列式计算(不使用外部库),python,matrix,linear-algebra,Python,Matrix,Linear Algebra,我正在制作一个小的矩阵运算库,这是对我自己的编程挑战(也是为了学习用Python编写代码),我的任务是计算2x2、3x3和4x4矩阵的行列式 就我对线性代数的理解而言,我需要实现Sarrus规则来完成前2个步骤,但我不知道如何以pythonical或更大的矩阵来解决这个问题。任何提示、提示或指导都将不胜感激。萨鲁斯法则只是解决3x3行列式的一种记忆法,如果超出这个范围,将不会有太大帮助 你应该研究计算任意大方阵行列式的莱布尼兹公式。这个公式的好处在于,一个n*n矩阵的行列式是,它可以根据它的一些

我正在制作一个小的矩阵运算库,这是对我自己的编程挑战(也是为了学习用Python编写代码),我的任务是计算2x2、3x3和4x4矩阵的行列式


就我对线性代数的理解而言,我需要实现Sarrus规则来完成前2个步骤,但我不知道如何以pythonical或更大的矩阵来解决这个问题。任何提示、提示或指导都将不胜感激。

萨鲁斯法则只是解决3x3行列式的一种记忆法,如果超出这个范围,将不会有太大帮助

你应该研究计算任意大方阵行列式的莱布尼兹公式。这个公式的好处在于,一个
n*n
矩阵的行列式是,它可以根据它的一些
(n-1)*(n-1)
子矩阵的行列式的组合来确定,这很适合于递归函数解

如果您能够理解莱布尼兹公式背后的算法,并且之前使用过递归函数,那么将其转换为代码(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)

阅读LU分解。一旦矩阵被LU分解,就可以使用U矩阵的对角线来计算行列式。