學習筆記 矩陣求逆

2022-02-05 02:46:36 字數 1695 閱讀 1691

以前只會高斯消元

高斯消元可以o(n^4)解決

但是可以做到o(n^3)

考慮要求

p*a=e

有e*a=a

發現,高斯消元就是不斷進行「交換兩行,某一行乘上k,某一行乘上k加到另一行上去」

這三種變換,都可以通過左乘乙個唯一的矩陣等價得到!(而且手玩發現,如果開始另乙個矩陣是單位矩陣,就是單位矩陣做同樣的變化乘過去就是了)

所以,開始讓p=e

然後a不斷高斯消元向e靠攏,p同時做完全相同的操作

最後a變成e,

那麼p乘a,就是e了。

如果中途存在乙個a[i][i]等於0,那麼意味著無論如何不能削成單位矩陣。一定無解。(因為變換是可逆的,不可能乙個a既能削成單位矩陣又不能)

否則由於可以構造出p,一定有解。

一種映象對映的感覺

#include#define reg register int

#define il inline

#define fi first

#define se second

#define mk(a,b) make_pair(a,b)

#define numb (ch^'0')

using

namespace

std;

typedef

long

long

ll;template

il void rd(t &x)

template

il void output(t x)

template

il void ot(t x)

template

il void prt(t a,int st,int nd)

namespace

miracle

struct

tr

void swap(int x,int

y)

void mul(int x,int

k)

void mov(int x,int y,int k)

}a,b;

int qm(int x,int

y)

return

ret;

}int

main()

}for(reg i=1;i<=n;++i) b[i][i]=1

;

bool fl=true

;

for(reg i=1;i<=n;++i)}}

if(!a[i][i])

b.mul(i,qm(a[i][i],mod-2));a.mul(i,qm(a[i][i],mod-2

));

for(reg j=i+1;j<=n;++j)

} }

//for(reg i=1;i<=n;++i)cout/

}cout

no solution");

else

}//for(reg k=1;k<=n;++k)cout/

}cout

for(reg i=1;i<=n;++i)

}return0;

}}signed main()

/*author: *miracle*

date: 2019/3/31 10:25:05

*/

view code

伴隨矩陣求逆矩陣

在之前的文章 線性代數之矩陣 中已經介紹了一些關於矩陣的基本概念,本篇文章主要就求解逆矩陣進行進一步總結。我們先看例子來直觀的理解什麼是余子式 minor,後邊將都用英文minor,中文的翻譯較亂 這個例子 我們假設矩陣為a 中我們看到a 1,1 的minor就是將a 1,1 所在的行和列刪除後剩下...

矩陣的求逆

最近做乙個加密演算法遇到需要計算矩陣的逆,閒著無聊,記錄一下,以後免得再麻煩。include include include define max 20 define e 0.000000001 計算矩陣src的模 double calculate a double src max int n fo...

模板 矩陣求逆

求乙個 n times n 的矩陣的逆矩陣。答案對 10 9 7 取模。在原矩陣右邊接乙個單位矩陣,然後把原矩陣通過初等變換消成單位矩陣,右邊的單位矩陣做同樣的變換,就成了逆矩陣。什麼,為什麼?難得你不覺得這個想起來非常的正確麼 code luogu judger enable o2 include...