Algorithm 求矩阵行列式的最佳算法是什么?

Algorithm 求矩阵行列式的最佳算法是什么?,algorithm,language-agnostic,determinants,Algorithm,Language Agnostic,Determinants,谁能告诉我哪一种算法是求一个大小为nxn的矩阵的行列式值的最佳算法?是一个广泛的讨论 有很多算法 一个简单的方法是采取行动。那么从 det M = det LU = det L * det U 而L和U都是三角形,行列式是L和U的对角线元素的乘积。这就是O(n^3)。还有更有效的算法。如果你做了初步研究,你可能会发现,当N>=4时,矩阵行列式的计算变得相当复杂。关于算法,我想向您指出,特别是“算法实现”部分 根据我自己的经验,您可以很容易地在现有的矩阵库(如)中找到LU或QR分解算法。不过,

谁能告诉我哪一种算法是求一个大小为
nxn
的矩阵的行列式值的最佳算法?

是一个广泛的讨论

有很多算法

一个简单的方法是采取行动。那么从

 det M = det LU = det L * det U

L
U
都是三角形,行列式是
L
U
的对角线元素的乘积。这就是O(n^3)。还有更有效的算法。

如果你做了初步研究,你可能会发现,当N>=4时,矩阵行列式的计算变得相当复杂。关于算法,我想向您指出,特别是“算法实现”部分


根据我自己的经验,您可以很容易地在现有的矩阵库(如)中找到LU或QR分解算法。不过,算法本身并不十分简单。

我对LU分解不太熟悉,但我知道为了得到L或U,需要使初始矩阵为三角形(U为上三角形,L为下三角形)。然而,一旦你得到某个nxn矩阵A的三角形形式的矩阵,并且假设你的代码使用的唯一操作是Rb-k*Ra,你就可以把det(A)=∏T(i,i)从i=0解到n(即,det(A)=T(0,0)x T(1,1)x…x T(n,n))来解三角矩阵T。检查这个链接,看看我在说什么

行缩减 求nxn矩阵行列式的最简单方法(实际上也是一种不错的方法)是行归约。记住一些关于行列式的简单规则,我们可以用以下形式求解:

det(A)=α*det(R),其中R是原始矩阵A的行梯队形式,α是一些系数

以行列形式求矩阵的行列式真的很容易;你只需要找到对角线的乘积。求解原始矩阵的行列式A,然后当您找到行梯队形式R时,就可以归结为计算α

你需要知道什么 排梯队形式是什么? 有关简单的定义,请参见此
注意:并非所有定义的前导项都需要1s,此算法不需要1s

可以使用基本行操作查找R 交换行、添加另一行的倍数等

从行列式行操作的属性中导出α
  • 如果B是一行a乘以某个非零常数ß得到的矩阵,则

    det(B)=ß*det(A

    • 换句话说,你可以从行列式前面拉出一个常数,从一行中“算出”一个常数
  • 如果B是通过交换两行a获得的矩阵,则

    det(B)=-det(A

    • 如果交换行,请翻转标志
  • 如果B是通过将a中的一行乘以另一行得到的矩阵,则

    det(B)=det(A

    • 决定因素不变
  • 注意,在大多数情况下,行列式只有规则3(我相信A的对角线没有零),在所有情况下,行列式只有规则2和3。规则1有助于人们在纸上做数学,尽量避免分数

    例子 (我会采取不必要的步骤来更清楚地展示每一条规则)
    
    | 2  3  3  1 |
    A=| 0 4 3-3|
    | 2 -1 -1 -3 |
    | 0 -4 -3  2 |
    R2 R3,-α->α(规则2)
    | 2  3  3  1 |
    -| 2 -1 -1 -3 |
    | 0  4  3 -3 |
    | 0 -4 -3  2 |
    R2-R1->R2(规则3)
    | 2  3  3  1 |
    -| 0 -4 -4 -4 |
    | 0  4  3 -3 |
    | 0 -4 -3  2 |
    R2/(-4)->R2,-4α->α(规则1)
    | 2  3  3  1 |
    4| 0  1  1  1 |
    | 0  4  3 -3 |
    | 0 -4 -3  2 |
    R3-4R2->R3,R4+4R2->R4(规则3,应用两次)
    | 2  3  3  1 |
    4| 0  1  1  1 |
    | 0  0 -1 -7 |
    | 0  0  1  6 |
    R4+R3->R3
    | 2  3  3  1 |
    4| 0  1  1  1 | = 4 ( 2 * 1 * -1 * -1 ) = 8
    | 0  0 -1 -7 |
    | 0  0  0 -1 |
    

    除了尺寸之外,我们对矩阵了解更多吗。它是稀疏的吗?尽管这些答案与语言无关,所以我认为这是一个重复。矩阵算法非常复杂,所以你不应该自己实现它们;使用一个完善的库,如LAPACK。编写该库的人已经选择了行列式的最佳实现(可能是稠密矩阵的LU分解)。numpy使用什么算法?