我正在研究一种计算任何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 :(得分: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]
祝你好运