注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

信息 灵感 创新

I? =Information,Inspiration,Innovation

 
 
 

日志

 
 
关于我

we are 5. Mathematics, Computation, Programming, Engineering, and Making fun of life.

网易考拉推荐

Mathematica求伴随矩阵  

2012-09-02 19:06:10|  分类: M&M |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

Mathematica中并不直接提供计算伴随矩阵的函数,虽然根据一般的有

Mathematica求伴随矩阵 - Castor - 趁年轻,多折腾
 但是这样做有点舍近求远的感觉,而且还有个问题就是,当A奇异的时候,计算出来的伴随矩阵是0矩阵,这显然不对。那是不是就真的毫无办法了呢?不是的。

根据官方文档中的帮助(tutorial/BasicMatrixOperations),函数Minors稍作改装,即能胜任此项工作。

官方说明:Minors[m] is the matrix whose (i,j)^th element gives the determinant of the submatrix obtained by deleting the (n-i+1)^th  row and the (n-j+1)^th column of m. The (i,j)^th cofactor of m is (-1)^i+j times the (n-i+1,n-j+1)^th element of the matrix of minors.

该函数确实提供了计算子矩阵的方法,不过有个问题就是,位置并不是一一对应的,所以需要做两个方面的调整,一是符号问题,计算的时候并没有加入符号,即 (-1)^i+j 是没有相乘的。二是位置的对应问题,伴随矩阵要求行对应列,而不是行对应行,列对应列。

所以,可以编写一个模块函数:

AdjointMatrix[M_] := Module[{Ma, B, n, i, j},

   Ma = Minors[M];

   B = Ma;

   n = Dimensions[M][[1]];

   For[i = 1, i <= n, i++,

    For[j = 1, j <= n, j++,

      B[[i, j]] = Ma[[n + 1 - i, n + 1 - j]]*(-1)^(i + j);];(*inner for*)

    ];(*outer for*)

   Transpose[B]];(*module*)

下面是测试例子,一个奇异矩阵A,一个非奇异矩阵B:

A = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};

MatrixForm[A]

AA = AdjointMatrix[A];

MatrixForm[AA]

MatrixForm[A.AA]

B = {{1, 2, 3, 0, 1}, {2, 1, -2, 3, 1}, {5, 4, 3, 1, 3}, {0, 0, 1, 0,

    2}, {1, 5, -1, 2, 1}};

MatrixForm[B]

BB = AdjointMatrix[B];

MatrixForm[BB]

MatrixForm[B.BB]

MatrixForm[Inverse[B]*Det[B]]

输出结果为:

Mathematica求伴随矩阵 - Castor - 趁年轻,多折腾
 最后一个的结果检验了一下这个等式:

Mathematica求伴随矩阵 - Castor - 趁年轻,多折腾
 所以我有十足的把握说,矩阵B的行列式值为-225,嗯,这回说的很清楚了。
  评论这张
 
阅读(1729)| 评论(2)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016