Wolfram mathematica 求矩阵行列式的算法
我必须写一个算法来找到矩阵的行列式,这是用递归函数完成的: 其中Wolfram mathematica 求矩阵行列式的算法,wolfram-mathematica,determinants,Wolfram Mathematica,Determinants,我必须写一个算法来找到矩阵的行列式,这是用递归函数完成的: 其中A_ij是矩阵,当您删除A的i第行和j第列时,会显示该矩阵。当A具有维度nxn时,A_ij的维度为(n-1)x(n-1)。我不允许使用Minor[]或Det[] 如何编写这个算法 这是我目前掌握的代码: det1[Mi_ /; Dimensions[Mi][[1]] == Dimensions[Mi][[2]]] := Module[{det1}, det1 = Sum[ If[det1 == 1,
A_ij
是矩阵,当您删除A
的i
第行和j
第列时,会显示该矩阵。当A
具有维度nxn
时,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]
]
为什么你的代码不起作用
MatrixForm
用于格式化(显示),但不能在计算中使用MatrixForm包装的矩阵。您只需删除它If
。如果矩阵的大小为1,则返回其元素(不可能从递归中中断[]
)总之,
det[m]:=If[Length[m]==1,m[[1,1]],(此处拉普拉斯展开)]
。另一种方法是使用模式匹配来识别大小为1的矩阵:
Clear[det]
det[{{x_}}] := x
det[m_] := (Laplace expansion)
这能解决你的问题吗
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
这作业有可能吗?到目前为止你有什么作业?你被卡在哪里了?对不起,我忘了。。这是我的代码,到目前为止,但不起作用: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,1,Length[Mi]}];Return det1//MatrixForm Module user1098185请将代码添加到主要问题中。您可以使用link.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 Laplace的公式如何涉及到这一点?我很困惑,对不起,我的意思和你发布的公式一样: