找到矩阵行列式的最佳算法是什么?

时间:2010-03-12 19:11:36

标签: algorithm language-agnostic determinants

有谁能告诉我哪个是找到大小为N x N的矩阵的行列式值的最佳算法?

4 个答案:

答案 0 :(得分:27)

Here是一个广泛的讨论。

有很多算法。

一个简单的方法是采用LU decomposition。然后,因为

 det M = det LU = det L * det U

LU都是三角形,行列式是LU的对角元素的乘积。那是O(n^3)。存在更有效的算法。

答案 1 :(得分:9)

行减少

找到nxn矩阵的行列式的最简单方法(并且不是坏方法)是通过行减少。通过记住关于决定因素的一些简单规则,我们可以用以下形式解决:

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

以行梯形形式查找矩阵的行列式非常简单;你只需找到对角线的产物。解决原始矩阵 A 的行列式然后归结为计算α,因为您发现行梯形 R

您需要知道的事情

什么是行梯队形式?

有关简单定义,请参阅此link 注意:并非所有定义都需要1个前导条目,并且此算法不需要。

您可以使用基本行操作找到R

交换行,添加另一行的倍数等

您从决定因素的行操作属性

中导出α
  1. 如果 B 是通过将一行 A 乘以某个非零常数ß获得的矩阵,那么

    det( B )=ß* det( A

    • 换句话说,你可以通过将它拉出行列式前面来从行中“排除”一个常量。
  2. 如果 B 是通过交换两行 A 获得的矩阵,那么

    det( B )= -det( A

    • 如果您换行,请翻转标志。
  3. 如果 B 是通过将一行的倍数添加到 A 中的另一行而获得的矩阵,则

    det( B )= det( A

    • 决定因素不会改变。
  4. 请注意,在大多数情况下,你可以找到决定因素,只有规则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 |

答案 2 :(得分:7)

如果您进行了初步研究,您可能会发现,当N> = 4时,矩阵行列式的计算变得非常复杂。关于算法,我会指向Wikipedia article on Matrix determinants,特别是“算法实现”部分。

根据我自己的经验,您可以在现有的矩阵库中轻松找到LU或QR分解算法,例如Alglib。算法本身并不是很简单。

答案 3 :(得分:0)

我对LU分解并不太熟悉,但我知道为了获得L或U,你需要使初始矩阵为三角形(U为上三角形或L为下三角形)。然而,一旦你得到一些nxn矩阵A的三角形矩阵并假设你的代码使用的唯一操作是Rb - k * Ra,你可以从i = 0求解det(A)=ΠT(i,i)到n(即det(A)= T(0,0)x T(1,1)x ... x T(n,n))对于三角矩阵T.检查此链接以查看我在说什么关于。 http://matrix.reshish.com/determinant.php

相关问题