use*_*185 0 wolfram-mathematica determinants
我必须编写一个算法来找到矩阵的行列式,这是通过递归函数完成的:

A_ij矩阵在哪里,当你删除第ith行和第jth列时出现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)
| 归档时间: |
|
| 查看次数: |
2580 次 |
| 最近记录: |