高斯-約旦消元法 理解


高斯消元是一種解方程的很巧妙的方法,核心是把方程轉換成矩陣形式,然后再通過加減消元,求出值后再回帶,就解出了這個方程,這里我就不贅述了。

 

我一般用高斯-約旦消元法,這種方法是直接轉換成單位矩陣求解,減少回帶次數,提高精確度,實現方式如下:

下方是一個方程

把它轉換成矩陣形式就是:

我們可以這樣對其進行變換:

在第一行找到第一個元素,向下尋找有沒有絕對值更大的,如果有就交換。

對於之后的如法炮制即可。

最后,我們就可以得到這樣一個矩陣:很顯然,在左邊是單位矩陣的情況下,右邊即為原方程的解。

需要注意的是,如果在轉換的時候主元系數為0,這種就是無解(右邊為非零數)或無窮多解(右邊為零),如下為無窮多解:

可以發現,消元已經已經無法進行了。

 

所以,算法的思路已經出來了,接下來根據思路模擬就行了。

核心代碼如下:

const double eps=1e-6;
void
Guass-Jordan(){ int r;double tmp; for(int i=1;i<=n;++i){ r=i; for(int j=i+1;j<=n;++j) if(fabs(a[r][i])<fabs(a[j][i])) r=j; if(r!=i) swap(a[r],a[i]); if(fabs(a[i][i])<eps){ p=0; return; } for(int j=1;j<=n;++j) if(j!=i){ tmp=a[j][i]/a[i][i]; a[j][i]=0; for(int k=j+1;k<=n+1;++k) a[j][k]-=a[i][k]*tmp; } } for(int i=1;i<=n;++i)a[i][n+1]/=a[i][i]; return; }

 

恩,這就是我學了幾天沒學懂的東西

轉載請注明地址,謝謝。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM