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包装的矩阵。您只需删除它

  • 考虑递归的停止条件:1*1矩阵的行列式只是矩阵的单个元素。在此基础上重写总和和
    If
    。如果矩阵的大小为1,则返回其元素(不可能从递归中
    中断[]

  • 不要使用与函数同名的局部变量:这会屏蔽全局函数,并使递归调用变得不可能

  • 最后,这不会中断函数,但不需要显式返回。只返回a的最后一个值


  • 总之,
    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的公式如何涉及到这一点?我很困惑,对不起,我的意思和你发布的公式一样: