找到矩阵行列式的算法

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)

Sza*_*lcs 9

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

  1. MatrixForm用于格式化(显示),但MatrixForm包装的矩阵不能用于计算.你只需要删除它.

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

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

  4. 最后,这不会破坏功能,但是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)

  • 我的意思是你发布的公式:http://en.wikipedia.org/wiki/Laplace_expansion (3认同)