use*_*185 0 wolfram-mathematica determinants
我必须编写一个算法来找到矩阵的行列式,这是通过递归函数完成的:
A_ij
矩阵在哪里,当你删除第i
th行和第j
th列时出现A
.当A
有维n x n
,那么对于尺寸A_ij
为(n-1) x (n-1)
.我不允许使用Minor[]
或Det[]
.
我该如何编写这个算法?
这是我到目前为止的代码:
det1[Mi_ /; Dimensions[Mi][[1]] == Dimensions[Mi][[2]]] :=
Module[{det1},
det1 = Sum[
If[det1 == 1, Break[], (-1)^(1 + j) *Mi[[1, j]]*det1[Drop[Mi, {1}, {j}]]],
{j, 1, Length[Mi]}];
Return[det1 // MatrixForm, Module]
]
Run Code Online (Sandbox Code Playgroud)
为什么你的代码不起作用?
MatrixForm
用于格式化(显示),但MatrixForm包装的矩阵不能用于计算.你只需要删除它.
考虑一下递归的停止条件:1*1矩阵的行列式只是矩阵的单个元素.重写总和并If
基于此.如果矩阵的大小为1,则返回其元素(不可能Break[]
退出递归).
不要使用与函数同名的局部变量:这会掩盖全局函数,并且无法以递归方式调用.
最后,这不会破坏功能,但是Return
没有必要明确.CompoundExpression
简单地返回a的最后一个值.
总结一下,det[m_] := If[Length[m] == 1, m[[1,1]], (Laplace expansion here)]
.另一种方法是使用模式匹配来识别size-1矩阵:
Clear[det]
det[{{x_}}] := x
det[m_] := (Laplace expansion)
Run Code Online (Sandbox Code Playgroud)