我正在研究一种计算任何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-但如果有人可以解释此处递归出了什么问题,我将不胜感激。

最佳答案

您不应该以递归的方式计算行列式,这会花费很多时间。最简单的方法是取第一列,看是否有一个元素不同于0。如果不存在,则行列式等于0。否则,取该元素并且对于矩阵中的每一行都与所选元素不同元素减去所选元素的线乘以当前行第一个元素的对称性。该减法将使您留下以0作为其第一个元素的线。然后,您可以消除所选元素的第一列和行,并将n-1阶行列式乘以(-1)^(line_index + column_index)* chosen_element。

关于algorithm - 关于Mathematica的计算n * n矩阵行列式的算法:,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9044834/

10-10 16:23