前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >逆矩阵的伴随阵的求法_伴随矩阵与原矩阵的特征值

逆矩阵的伴随阵的求法_伴随矩阵与原矩阵的特征值

作者头像
全栈程序员站长
发布2022-09-25 10:04:17
8190
发布2022-09-25 10:04:17
举报
文章被收录于专栏:全栈程序员必看

大家好,又见面了,我是你们的朋友全栈君。

一、计算思路

一个方阵 A 如果满足

逆矩阵的伴随阵的求法_伴随矩阵与原矩阵的特征值
逆矩阵的伴随阵的求法_伴随矩阵与原矩阵的特征值

,则A可逆, 且

逆矩阵的伴随阵的求法_伴随矩阵与原矩阵的特征值
逆矩阵的伴随阵的求法_伴随矩阵与原矩阵的特征值

由上面公式可以知道,我们只需求出 A 的伴随阵及A对应的行列式的值即可求出方阵A的

逆矩阵。下面将分别实现这两个部分。

二、具体实现

1、计算矩阵A对应的行列式的值

引入一个定理: 行列式的值等于它的任一行(列)的各元素与其对应的代数余子式

乘积之和

上面定理中提到了代数余子式,其实这个概念很简单。在n阶行列式中位于 (i, j) 的元素

逆矩阵的伴随阵的求法_伴随矩阵与原矩阵的特征值
逆矩阵的伴随阵的求法_伴随矩阵与原矩阵的特征值

代数余子式就是将该元素所在的第i行和第j列划掉后,留下来的n-1阶行列式叫做

逆矩阵的伴随阵的求法_伴随矩阵与原矩阵的特征值
逆矩阵的伴随阵的求法_伴随矩阵与原矩阵的特征值

的余子式,

记作

逆矩阵的伴随阵的求法_伴随矩阵与原矩阵的特征值
逆矩阵的伴随阵的求法_伴随矩阵与原矩阵的特征值

。记

逆矩阵的伴随阵的求法_伴随矩阵与原矩阵的特征值
逆矩阵的伴随阵的求法_伴随矩阵与原矩阵的特征值

逆矩阵的伴随阵的求法_伴随矩阵与原矩阵的特征值
逆矩阵的伴随阵的求法_伴随矩阵与原矩阵的特征值

叫做元

逆矩阵的伴随阵的求法_伴随矩阵与原矩阵的特征值
逆矩阵的伴随阵的求法_伴随矩阵与原矩阵的特征值

的代数余子式。

根据上面这些我们就可以写出 计算矩阵对应的行列式的值的算法了。

代码语言:javascript
复制
private static double getValueOfDeterminant(double[][] data) { if(data.length == 1) { return data[0][0]; } if(data.length == 2) { return data[0][0] * data[1][1] - data[0][1] * data[1][0]; } double valueOfDeterminant = 0; double[] elementsMultiplyItsCofactor = new double[data[0].length]; for(int j=0; j<data[0].length; j++) { double cofactorValue = getValueOfDeterminant(getCofactor(data, 0, j)); if(j % 2 == 0) { elementsMultiplyItsCofactor[j] = data[0][j] * cofactorValue; } else { elementsMultiplyItsCofactor[j] = -1 * data[0][j] * cofactorValue; } valueOfDeterminant += elementsMultiplyItsCofactor[j]; } return valueOfDeterminant; }

函数 getValueOfDeterminant 中用到了一个函数 getCofactor , 这个函数很简单,就是

用来获取矩阵中矩阵A中(i, j)元

逆矩阵的伴随阵的求法_伴随矩阵与原矩阵的特征值
逆矩阵的伴随阵的求法_伴随矩阵与原矩阵的特征值

的余子式的。

2、计算获取矩阵A的伴随阵并求逆矩阵

伴随阵的定义: 行列式|A|的各个元素的代数余子式

逆矩阵的伴随阵的求法_伴随矩阵与原矩阵的特征值
逆矩阵的伴随阵的求法_伴随矩阵与原矩阵的特征值

所构成的如下矩阵

逆矩阵的伴随阵的求法_伴随矩阵与原矩阵的特征值
逆矩阵的伴随阵的求法_伴随矩阵与原矩阵的特征值

分别计算矩阵A中每个元素的代数余子式,并除以|A|,即可获得矩阵A的逆矩阵.

主要代码如下:

代码语言:javascript
复制
public static double[][] getMatrixInversion(double[][] data) { //the matrix has no inverse matrix if(data.length != data[0].length) { return new double[][]{}; } //Get value of determinant for the matrix double valueOfDeterminant = getValueOfDeterminant(data);   if(valueOfDeterminant == 0) { //The matrix doesn't have inversion matrix return new double[][]{}; } //Get inversion of the matrix inputed double[][] inversion = new double[data.length][data[0].length]; for(int i=0; i<inversion.length; i++) { for(int j=0; j<inversion[0].length; j++) { double num = getValueOfDeterminant(getCofactor(data, i, j)); if( (i + j) % 2 == 0 ) { inversion[j][i] = num / valueOfDeterminant; } else { inversion[j][i] = -1 * num / valueOfDeterminant; } } } return inversion; }                               

通过伴随阵来求逆矩阵效率不太高,接下来将会尝试用LU分解法来求解逆矩阵。

3. 后记

后面的文章里讲到了 LU分解求线性方程组 Ax=b。很明显,只要将这里的 矩阵 b 替换成

与A同型的单位矩阵E,则该线性方程组的解x就是 矩阵A的逆矩阵了。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/171659.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、计算思路
  • 二、具体实现
    • 1、计算矩阵A对应的行列式的值
      • 2、计算获取矩阵A的伴随阵并求逆矩阵
        • 3. 后记
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档