首页 > 编程知识 正文

怎么求逆矩阵例题,逆矩阵公式总结

时间:2023-05-04 07:11:41 阅读:60286 作者:1382

P4783【模板】矩阵求逆题意:给出n*n矩阵,求其逆矩阵,对1e9 7取模。

数据范围: n=400,a(I,j )=1e9

解法:在线性代数中学到的。 流程基本上使用初等变换将给定的矩阵a变换为单位矩阵,在变化过程中对另一个单位矩阵b进行相同的操作,当矩阵a成为单位矩阵时,b成为a的逆矩阵。 当矩阵a不能变换为单位矩阵时,逆矩阵当然不存在。 代码: # include bits/stdc.husingnanage const int n=505; const int mod=1e9 7; int a[N][N1]; int n; intppow(inta、int b、int mod ) { int ans=1%mod; a%=mod; while(b ) ) if ) B1 ) ans=1ll*ans*a%mod; a=1ll*a*a%mod; b=1; }返回Ans; }intgauss_rev(intn ) ) for ) intI=1; i=n; I ) for(intj=I; j=n; j ) (/查找第I列中的非零行并将其交换为if(a[j][I] ) swap (a[j],a [ j ] ); 布雷克; }if (! a [ I ] [ I ] (返回0; //无解intkk=ppow(a[I][I],mod-2,mod ); //逆元for(intj=I; j=n*2; j ) ) /当前行中的每一列由a [ I ] [ I ] a [ I ] [ j ]=1ll * a [ I ] [ j ] * kk % mod; }for(intj=1; j=n; j ) (/其他行if(j!=i ) ) { kk=a[j][i]; for(intk=I; k=n*2; k ) (a ) j ) k )=(a ) j ) ) k )-1ll*kk*a ) I ) k ) %modmod ) %mod; } } }返回1; }signed main () scanf ) ' %d ',n ); for(intI=1; i=n; I ) for(intj=1; j=n; j () Scanf('%d ',a[i][j]; } a[i][i n]=1; (if (! guss_rev(n ) ) puts ) ) nosolution ); (else ) for ) intI=1; i=n; I ) for(intj=1; j=n; j () printf('%d ',a[i][j n]; } puts (' ); } }返回0; (01矩阵求逆)直接对bitset高兴的虎消元即可(# include bits/stdc.husingnamespacestd; 常数int n=505; bitsetN1a[N]; int n; intgauss_rev(intn ) {for ) intI=1; i=n; I ) for(intj=I; j=n; j ) (/查找第I列中的非零行并将其交换为if(a[j][I] ) swap (a[j],a [ j ] ); 布雷克; }if (! a [ I ] [ I ] (返回0; //无解for (intj=1; j=n; j ) (/其他行if(a[j][I]j!=i () { a[j]^=a[i]; } }返回1; }signed main () scanf ) ' %d ',n ); for(intI=1; i=n; I ) for(intj=1; j=n; j () Scanf('%d ',a[i][j]; } a[i][i n]=1; (if (! guss_rev(n ) ) puts ) ) nosolution ); (else ) for ) intI=1; i=n; I ) for(intj=1; j=n; j () printf('%d ',a[i][j n]; } puts (' ); } }返回0; }

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。