其他分享
首页 > 其他分享> > 【暖*墟】#逆矩阵# 矩阵求逆的思路与方法

【暖*墟】#逆矩阵# 矩阵求逆的思路与方法

作者:互联网

矩阵求逆的思路与方法

 

逆矩阵的定义

若一个n*n的方阵A可逆,则存在一个n*n的方阵B, 使得。则称B是A的一个逆矩阵。A的逆矩阵记作A-1。     (1)验证两个矩阵互为逆矩阵   矩阵         按照矩阵的乘法满足: 。 故A,B互为逆矩阵。     (2)逆矩阵的唯一性

若矩阵A是可逆的,则A的逆矩阵是唯一的。

          

  (3)判定简单的矩阵不可逆   如 。假设有 是A的逆矩阵,   则有:        

逆矩阵的性质定理

  1. 如果矩阵A是可逆的,其逆矩阵是唯一的。
  2. A的逆矩阵的逆矩阵还是A。记作(A-1-1=A。
  3. 可逆矩阵A的转置矩阵AT也可逆,并且(AT-1=(A-1T
  4. 若矩阵A可逆,则矩阵A满足消去律。即:若AB=AC,则B=C。
  5. 两个可逆矩阵的乘积依然可逆。

 

可逆等价条件

若|A|≠0,则矩阵A可逆,且   。 其中,A*为矩阵A的伴随矩阵。    

求逆矩阵的初等变换法

将一n阶可逆矩阵A和n阶单位矩阵I写成一个nX2n的矩阵 。 对B施行初等行变换,即对A与I进行完全相同的若干初等行变换,目标是把A化为单位矩阵。 当A化为单位矩阵I的同时,B的右一半矩阵同时化为了A的逆矩阵。   如求  的逆矩阵A-1。    ,         故A可逆并且,由右一半可得逆矩阵A-1 =   。        

初等变换法计算原理

若n阶方阵A可逆,即A行等价I,即存在初等矩阵P1,P2,...,Pk; 使得 ,在此式子两端同时右乘A-1得: 。 比较两式可知:对A和I施行完全相同的若干初等行变换, 在这些初等行变化把A变成单位矩阵的同时,这些初等行变换也将单位矩阵化为A-1。 如果矩阵AB互逆,则AB=BA=I。这两个矩阵的秩等于它们的级数(或称为阶)。 换句话说,这两个矩阵可以只经由初等行变换,或者只经由初等列变换,变为单位矩阵

 

实例分析说明

假设孩子和家长出去旅游,去程坐的是bus,小孩票价为3元,家长票价为3.2元;

回程坐的是Train,小孩票价为3.5元,家长票价为3.6元。问题是分别求小孩和家长的人数。

我们亦可以用下列矩阵求之(纵向)。

 

洛谷P4783 【模板】矩阵求逆

#include <cstdio>
#include <algorithm>
#include <cctype>
using namespace std;

const int mod=1e9+7,N=888;

int n,a[N][N];

inline int add(int a,int b){return a+b>=mod?a+b-mod:a+b;}

#define mul(a,b) (1ll*(a)*(b)%mod)

int ksm(int d,int k){int f=1;while(k){if(k&1)f=mul(f,d);
   d=mul(d,d),k>>=1;}return f;} //ksm用于求逆元

int read(){ int x=0;char c=getchar(); while(!isdigit(c)) c=getchar();
   while(isdigit(c)) x=x*10+c-'0',c=getchar(); return x; }

int main(){ n=read();
    for(int i=1;i<=n;i++) //在原矩阵右边接一个单位矩阵↓↓
     { for(int j=1;j<=n;j++) a[i][j]=read(); a[i][i+n]=1; }
    for(int i=1;i<=n;i++){ //矩阵初等变换,即高斯消元
        int id=-1; for(int j=i;j<=n;j++) if(a[j][i]){id=j;break;}
        if(id==-1) return puts("No Solution"),0;
        std::swap(a[i],a[id]); int inv=ksm(a[i][i],mod-2);
        for(int j=i;j<=n<<1;j++) a[i][j]=mul(a[i][j],inv);
        for(int j=i+1;j<=n;j++) for(int k=n<<1;k>=i;k--)
            a[j][k]=add(a[j][k],mod-mul(a[i][k],a[j][i]));
    } /* 【原理】把原矩阵通过初等变换消成单位矩阵,
              右边的单位矩阵做同样的变换,就成了逆矩阵。 */
    for(int i=n;i;i--) for(int j=i-1;j;j--)
        for(int k=n<<1;k>=i;k--)
            a[j][k]=add(a[j][k],mod-mul(a[i][k],a[j][i]));
    for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++)
        printf("%d ",a[i][j+n]); puts(""); }
}

 

 

 

                             ——时间划过风的轨迹,那个少年,还在等你。

标签:求逆,int,可逆,矩阵,单位矩阵,思路,初等,mod
来源: https://www.cnblogs.com/FloraLOVERyuuji/p/10397751.html