Joh*_*ohn 8 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]
Run Code Online (Sandbox Code Playgroud)
它以递归方式工作,它适用于2*2矩阵(我已使用Det []进行检查),但它不适用于任何高于2的矩阵!
我想自己解决这个问题 - 我想自己实现这个,而不是简单地使用Det- 但如果有人能解释这里的递归有什么问题我会很感激吗?
小智 2
您不应该以递归方式计算行列式,这会花费很多时间。最简单的方法是取第一列,看看是否有不同于 0 的元素。如果不存在,则行列式等于 0。否则,取该元素,并且对于矩阵中与所选元素不同的每一行元素减去所选元素的行乘以当前行的第一个元素的对称性。该减法应该会留下一行,其第一个元素为 0。然后,您可以消除所选元素的第一列和行,并将 n-1 阶行列式乘以 (-1)^(line_index+column_index)*chosen_element。