博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
矩阵求逆
阅读量:5026 次
发布时间:2019-06-12

本文共 1634 字,大约阅读时间需要 5 分钟。

下面来讨论如何对矩阵求逆

先看实数中的如何求两个数的积为1

如:

对233求逆时,我们令a=233,b=1要把a变化为1,即a/=233这时对b进行同样的操作,b/=233现在a=1,b=1/233,b,ab=1

同理,矩阵也可以用相同的方法来求逆,不过上面的初等变换是除法

所以我们要重新定义初等变换:

  1. 将某两行进行交换
  2. 将某一行的所有元素乘以k
  3. 将某一行的所有元素乘以k加到另一行

这不是就是高斯消元吗?

用高斯消元把给出的矩阵消成上三角矩阵,再消成单位矩阵,同时在右边另一个初值为单位矩阵的矩阵上做同样的操作,得到的矩阵即为该矩阵的逆矩阵。

#include
#include
#include
#include
using namespace std;const int N=405,md=1000000007;int n,i,j,k,x,a[N][N*2];int pw(int a,int b){ int rtn=1; while(b) { if(b&1) rtn=1ll*rtn*a%md; a=1ll*a*a%md; b>>=1; } return rtn;}int main(){ scanf("%d",&n); for(i=1;i<=n;++i) { for(j=1;j<=n;++j) scanf("%d",a[i]+j); a[i][n+i]=1; } for(i=1;i<=n;++i) { for(j=i;j<=n;++j) if(a[j][i]) break; if(j>n) { printf("No Solution"); return 0; } if(i!=j) for(k=i;k<=2*n;++k) swap(a[i][k],a[j][k]); x=pw(a[i][i],md-2); for(k=i;k<=2*n;++k) a[i][k]=1ll*a[i][k]*x%md; for(j=i+1;j<=n;++j) { x=a[j][i]; for(k=i;k<=2*n;++k) a[j][k]=(a[j][k]-1ll*a[i][k]*x%md+md)%md; } } for(i=n;i>1;--i) { for(j=i-1;j>=1;--j) { x=a[j][i]; for(k=i;k<=2*n;++k) a[j][k]=(a[j][k]-1ll*x*a[i][k]%md+md)%md; } } for(i=1;i<=n;++i) { for(j=n+1;j<=2*n;++j) printf("%d ",a[i][j]); puts(""); } return 0;}

 

转载于:https://www.cnblogs.com/pthws/p/11204380.html

你可能感兴趣的文章
基础 - client可视区域
查看>>
JavaScript中正则表达式判断匹配规则以及常用的方法
查看>>
201571030334/201571030323实验三 软件工程结对项目
查看>>
BZOJ 1452: [JSOI2009]Count [二维树状数组]
查看>>
BZOJ 4276: [ONTAK2015]Bajtman i Okrągły Robin [线段树优化建边]
查看>>
BZOJ 3530: [Sdoi2014]数数 [AC自动机 数位DP]
查看>>
IDEA使用笔记(四)——工具栏的显示隐藏切换
查看>>
python中强大的list
查看>>
LeetCode Remove Invalid Parentheses
查看>>
thinkphp常用标签总结
查看>>
.net Core
查看>>
Mac 下安装wxpython踩过的坑
查看>>
05004_Linux的其他命令和权限命令
查看>>
00083_判断集合元素唯一的原理
查看>>
卷挂载/卸载工作流程
查看>>
.NET 配置项扩展
查看>>
Mac网络抓包 - Wireshark
查看>>
iOS开发拓展篇—CoreLocation简单介绍
查看>>
配置maven-ssm
查看>>
【codecombat】 试玩全攻略 第二章 边远地区的森林
查看>>