找到矩阵行列式的算法

时间:2011-12-14 16:06:23

标签: wolfram-mathematica determinants

我必须编写一个算法来查找矩阵的行列式,这是通过递归函数完成的:

enter image description here

其中A_ij是矩阵,当您删除i的{​​{1}}行和j列时,会显示该矩阵。当A具有维度A时,n x n的维度为A_ij。我不允许使用(n-1) x (n-1)Minor[]

如何编写此算法?


这是我到目前为止的代码:

Det[]

2 个答案:

答案 0 :(得分:9)

为什么你的代码不起作用?

  1. MatrixForm用于格式化(显示),但MatrixForm包装的矩阵不能用于计算。您只需将其删除即可。

  2. 考虑一下递归的停止条件:1 * 1矩阵的行列式只是矩阵的单个元素。根据此值重写总和If。如果矩阵的大小为1,则返回其元素(递归时不可能Break[])。

  3. 不要使用与您的函数同名的局部变量:这会掩盖全局函数,并且无法以递归方式调用。

  4. 最后,这不会中断该函数,但不需要显式的Return。只返回CompoundExpression的最后一个值。


  5. 总结一下,det[m_] := If[Length[m] == 1, m[[1,1]], (Laplace expansion here)]。另一种方法是使用模式匹配来识别size-1矩阵:

    Clear[det]
    det[{{x_}}] := x
    det[m_] := (Laplace expansion)
    

答案 1 :(得分:1)

这会解决您的问题吗?

Clear[det];
det[{{x_}}] := x;
det[a_ /; MatrixQ[a] && SameQ @@ Dimensions[a]] := 
 Sum[(-1)^(1 + i) a[[1, i]] det[Drop[a, {1}, {i}]], {i, 1, Length[a]}];
det::gofish = "Unable to handle this type of input: ``";
det[a___] := (Message[det::gofish, HoldForm[det][a]]; $Failed)

,例如:

In[]:=

m = {{a, b, c}, {c, d, e}, {f, g, h}};
Det[m] === Expand[det[m]]

给出:

Out[]= 

True