想不到大名鼎鼎的高斯消元就只是個o(
n3) 的玩意兒……
演算法流程還是先走一下:
1、先將每一條方程的各個係數都統計進矩形,並且將方程等式右邊的常數放進矩形的最後一列,以便之後進行統一的計算。
2、我們要做的就是對於每乙個未知數(x、y……),只留下一條式子中含有它的係數,並且這個係數為「1」。
3、對於每乙個未知數x,我們每次尋找x中係數k最大的,只留下它,然後將這條方程整體除掉k,那麼未知數x的係數就變成了1。接下來像我們在紙上解方程一樣消掉其他式子中的x的係數,(至於為什麼每次都要找乙個係數最大的,並不是什麼玄學,只是因為這樣可以防止爆精度,自己可以推一下)
4、至於那些乘乘除除的還是需要自己在紙上推一下,這種東西真的不太好記。
void work(int n)
if(p!=i)for(int j=0;j<=n;j++)swap(a[i][j],a[p][j]);
for(int j=i+1;j<=n;j++)a[i][j]/=a[i][i];
// a[i][i]=1;
for(int j=0;jif(j==i)continue;
for(int k=i+1;k<=n;k++)a[j][k]-=a[j][i]*a[i][k];
// a[j][i]=0;}}
for(int i=0;i在**中我標記掉了兩句話,因為不管有沒有這兩句話,程式都是對的,但是加了這兩句話,你就能明白流程2中到底這樣用這段**來實現。
高斯消元總結
乙個無向連通圖,頂點從1 編號到n,邊從1 編號到m。小z 在該圖上進行隨機遊走,初始時小z 在1 號頂點,每一步小z 以相等的概率隨機選 擇當前頂點的某條邊,沿著這條邊走到下乙個頂點,獲得等於這條邊的編號的分數。當小z 到達n 號頂點時遊走結束,總分為所有獲得的分數之和。現在,請你對這m 條邊進行...
高斯消元總結
這裡介紹的是高斯 約旦消元法。相對於傳統的高斯消元,約旦消元法的精度更好 更簡單,沒有回帶的過程。約旦消元法大致思路如下 1.選擇乙個尚未被選過的未知數作為主元,選擇乙個包含這個主元的方程。2.將這個方程主元的係數化為1。3.通過加減消元,消掉其它方程中的這個未知數。4.重複以上步驟,直到把所有式子...
高斯消元 浮點高斯消元
浮點數高斯消元 問題描述 給出乙個線性方程組,有n個方程組,m個未知數。解這個線性方程組。輸入格式 第1行 2個整數n和m,n,m 400,且n不一定等於m 接下來n行,每行m 1個整數,表示乙個方程的m個未知數的係數和常數 輸出格式 如果無解,輸出 no solution 如果有唯一解,輸出m行,...