per*_*ain 25 language-agnostic algorithm determinants
谁能告诉我哪个是找到大小矩阵的行列式值的最佳算法N x N?
dfr*_*kow 29
这是一个广泛的讨论.
有很多算法.
一个简单的方法是进行LU分解.然后,因为
det M = det LU = det L * det U
Run Code Online (Sandbox Code Playgroud)
和两个L和U是三角形,行列式的对角线元素的乘积L和U.那是O(n^3).存在更有效的算法.
找到nxn矩阵的行列式的最简单方法(实际上并不是坏方法)是通过行减少.通过记住关于决定因素的一些简单规则,我们可以在以下形式中解决:
det(A)=α*det(R),其中R是原始矩阵A的行梯形形式,α是一些系数.
以行梯形形式找到矩阵的行列式非常简单; 你只需找到对角线的产物.解决原矩阵的行列式一个然后就归结为您找到列梯形形式计算α [R .
请参阅此链接以获取简单的定义
注意:并非所有定义都要求前导条目使用1,并且此算法不需要.
交换行,添加另一行的倍数等.
如果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, -? -> ? (Rule 2)
| 2 3 3 1 |
-| 2 -1 -1 -3 |
| 0 4 3 -3 |
| 0 -4 -3 2 |
R2 - R1 -> R2 (Rule 3)
| 2 3 3 1 |
-| 0 -4 -4 -4 |
| 0 4 3 -3 |
| 0 -4 -3 2 |
R2/(-4) -> R2, -4? -> ? (Rule 1)
| 2 3 3 1 |
4| 0 1 1 1 |
| 0 4 3 -3 |
| 0 -4 -3 2 |
R3 - 4R2 -> R3, R4 + 4R2 -> R4 (Rule 3, applied twice)
| 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 |
如果您进行了初步研究,您可能已经发现,当N> = 4时,矩阵行列式的计算变得非常复杂.关于算法,我想指出维基百科关于矩阵行列式的文章,特别是"算法实现"部分.
根据我自己的经验,您可以在现有的矩阵库(如Alglib)中轻松找到LU或QR分解算法.算法本身并不是很简单.
| 归档时间: |
|
| 查看次数: |
39036 次 |
| 最近记录: |