用于计算n * n矩阵行列式的mathematica算法:

时间:2012-01-28 11:15:46

标签: algorithm wolfram-mathematica

我正在研究一种计算任何n * n矩阵的行列式的算法,这是我的代码:

 Laplace[matrix_List] := Module[{a = matrix, newmatrix, result = 0},
     If [Length[a] == 1, result = Total[Total[a]],
         For [i = 1, i <= Length[a], i++,
              newmatrix = Drop[a, {i}, {1}];
              result = result + (-1)^(i + 1) *
                       Total[Total[Take[a, {i}, {1}]]]*
                       Laplace[newmatrix]; 
         ]
     ]; result]

它以递归方式工作,它适用于2 * 2矩阵(我已使用Det []进行检查), 但它不适用于任何高于2的矩阵!

我想自己解决这个问题 - 我想自己实现这个,而不是简单地使用Det - 但如果有人能解释这里递归的错误,我会很感激吗?

2 个答案:

答案 0 :(得分:1)

您不应该以递归方式计算行列式,这需要花费很多时间。最简单的方法是取第一列并查看是否存在与0不同的元素。如果不存在,则行列式等于0.否则采用该元素并且矩阵中的每一行与所选的不同element substract所选元素的行乘以当前行的第一个元素的symetric。那个减法应该给你留下一条以0为第一个元素的线。然后,您可以消除第一列和所选元素的行,并将n-1阶行列式与(-1)^(line_index + column_index)* chosen_element相乘。

答案 1 :(得分:0)

    mat = {{a11,a12,a13,a14]}, {a21,a22,a23,a24}, {a31,a32,a33,a34}, {a41,a42,a43,a44}};
det = Sum[Signature[p[[j]]]*
    Product[mat[[i, p[[j, i]]]], {i, 1, Length[mat]}], {j, 1, 4!}]

这将产生正确的结果! det===Det[mat]

祝你好运

相关问题