矩阵行列式计算的哪种方法是这样的?

时间:2009-08-14 08:06:31

标签: math matrix

这是John Carmack用于计算4x4矩阵的行列式的方法。根据我的调查,我已经确定它开始像拉普拉斯扩展定理,然后继续计算3x3决定因素,这似乎与我读过的任何论文都不一致。

    // 2x2 sub-determinants
    float det2_01_01 = mat[0][0] * mat[1][1] - mat[0][1] * mat[1][0];
    float det2_01_02 = mat[0][0] * mat[1][2] - mat[0][2] * mat[1][0];
    float det2_01_03 = mat[0][0] * mat[1][3] - mat[0][3] * mat[1][0];
    float det2_01_12 = mat[0][1] * mat[1][2] - mat[0][2] * mat[1][1];
    float det2_01_13 = mat[0][1] * mat[1][3] - mat[0][3] * mat[1][1];
    float det2_01_23 = mat[0][2] * mat[1][3] - mat[0][3] * mat[1][2];

    // 3x3 sub-determinants
    float det3_201_012 = mat[2][0] * det2_01_12 - mat[2][1] * det2_01_02 + mat[2][2] * det2_01_01;
    float det3_201_013 = mat[2][0] * det2_01_13 - mat[2][1] * det2_01_03 + mat[2][3] * det2_01_01;
    float det3_201_023 = mat[2][0] * det2_01_23 - mat[2][2] * det2_01_03 + mat[2][3] * det2_01_02;
    float det3_201_123 = mat[2][1] * det2_01_23 - mat[2][2] * det2_01_13 + mat[2][3] * det2_01_12;

    return ( - det3_201_123 * mat[3][0] + det3_201_023 * mat[3][1] - det3_201_013 * mat[3][2] + det3_201_012 * mat[3][3] );

有人可以向我解释这种方法是如何运作的,还是指向一个使用相同方法的好写作?

注意
如果重要的是这个矩阵是行主要的。

2 个答案:

答案 0 :(得分:5)

这似乎是涉及使用未成年人的方法。数学方面可以在维基百科上找到

http://en.wikipedia.org/wiki/Determinant#Properties_characterizing_the_determinant

基本上你将矩阵缩小到更小,更容易计算,并将这些结果加起来(它涉及一些(-1)因子,应该在我链接到的页面上描述)。

答案 1 :(得分:2)

他使用标准公式,您可以在伪代码中计算

det(M) = sum(M[0, i] * det(M.minor[0, i]) * (-1)^i)

此处minor[0, i]是您通过从原始矩阵中划出0 - 第n行和i列获得的矩阵,(-1)*i代表i } -1的力量。

如果您使用不同的行或者对列进行循环,则相同(直到整体符号)公式将起作用。如果你考虑如何定义det,它就是不言自明的。注意2矩阵如何​​变为:

det(M) = M[0, 0] * M[1, 1] * (+1) + M[0, 1] * M[1, 0] * (-1)

或者,按行1而不是0,

-det(M) = M[1, 0] * M[0, 1] * (+1) + M[1, 1] * M[0, 0] * (-1)

- 您应该认识到2x2矩阵的决定因素的标准公式。

类似地,对于由N = [[a, b, c], [d, e, f], [g, h, i]]组成的3矩阵,这导致公式

det(N) = a * det([[e, f], [h, i]]) - b * det([[d, f], [g, i]]) + c * det([[d, e], [g, h]])

当然成为教科书公式

a*e*i + b*f*g +  c*d*h - c*e*g - a*f*h - b*d*i

扩展每个2x2个决定因素后。

现在,如果您采用4矩阵X,您将看到要计算det(X),您需要计算4个未成年人的决定因素,每个未成年人都是3x3矩阵;但你也可以进一步扩展它们,这样你就可以得到6个2x2矩阵的决定因子和一些系数。您应该自己尝试与3x3矩阵的上述内容类似。