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 交换行、添加另一行的倍数等 从行列式行操作的属性中导出α
- 换句话说,你可以从行列式前面拉出一个常数,从一行中“算出”一个常数
- 如果交换行,请翻转标志
- 决定因素不变
| 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使用什么算法?