【矩阵乘法】逆矩阵
来源:互联网 发布:怎么应聘淘宝模特 编辑:程序博客网 时间:2024/06/06 00:40
这东西很吼啊,
简介
有时遇到一些题目,要用到矩阵的前缀积+前缀逆矩阵,来计算区间的矩阵积,
逆矩阵和逆元差不多,两两相乘即可达到除效果,
待定系数法
直接设逆矩阵为a,b,c,d….,它与原矩阵相乘以后得出的矩阵是 除了对角线为1外,其余为0 的矩阵E,所以直接代入高斯消元解即可,
复杂度:
初等变换法
看一下高斯消元的所有操作:
1. 整一行乘上一个数
2. 整一行减去另一行
我们发现,这些操作都可以用矩阵相乘的形式表示出来,
所有,最标准的高斯消元,其实是可以表示为两矩阵相乘的样子的;
而求逆矩阵正好是要求,这两个矩阵相乘以后,出来的矩阵只有对角线为1(E矩阵),
那么我们可以大胆的猜想,直接用高斯消元的思想,通过把每一行,乘上或除上某个数(逆元),把当前位变成1或0,这样就相当于求逆矩阵,
那我们怎么记录呢?
先开一个E矩阵,我们在对原来的矩阵操作时,也对这个矩阵做相同的操作,
比如:
1. 原矩阵整一行乘上一个数,这个矩阵也把这一行乘上这个数,
2. 原矩阵整一行减去另一行,比如行i-行j,这个矩阵也把行i-行j,
这样既可求出逆矩阵,简单明了,
Code
原矩阵a,求出的逆矩阵为b,
void GNI(int I){ fo(i,0,M) { if(!a[i][i])continue; LL t=ksm(a[i][i],mo-2); fo(j,0,M)a[i][j]=a[i][j]*t%mo,b[i][j]=b[i][j]*t%mo; fo(j,0,M)if(i!=j&&a[j][i]) { t=a[j][i]; fo(k,0,M) { b[j][k]=(b[j][k]-b[i][k]*t)%mo; a[j][k]=(a[j][k]-a[i][k]*t)%mo; if(a[j][k]<0)a[j][k]+=mo; } } }}
阅读全文
0 0
- 【矩阵乘法】逆矩阵
- 乘法和逆矩阵
- 矩阵 模板(矩阵加减,矩阵乘法,矩阵求逆)
- 矩阵乘法
- 矩阵乘法
- 矩阵乘法
- 矩阵乘法
- 矩阵乘法
- 矩阵乘法
- 矩阵乘法
- 矩阵乘法
- 矩阵乘法
- 矩阵乘法
- 矩阵乘法
- 矩阵乘法
- 矩阵乘法
- 矩阵乘法
- 矩阵乘法
- Apache Kafka -8 与Spark集成
- 找新朋友
- java-day04-反射的运用
- IT牛人博客
- 第一章 设计模式入门之策略模式【C++11版】
- 【矩阵乘法】逆矩阵
- Apache Kafka
- 胜利大逃亡(续)
- DAY2T1
- 一张图理解prototype、proto和constructor的三角关系
- Android6.0新特性
- Windows服务
- XMAN2017选拔赛Web-variacover
- 适配器模式