論高斯消元實現

來源:互聯網
上載者:User

標籤:blog   io   os   for   2014   sp   代碼   log   c   

高斯消元的實現是用到了增廣矩陣變成上三角矩陣,然後從下往上迭代求值。


具體是這樣的,


比如說有一個二元一次方程組


那麼,把未知數的係數提出來弄成一個2*2的矩陣,然後再把方程組中等號右邊的常數項加進來,成為一個2*3的矩陣


這就是一個增廣矩陣了,


接下來變成一個上三角矩陣,


從矩陣的第一行開始,一直到最後一行,

比方說現在面臨的是第i行,

那麼在i到最後一行,找到第i列數的絕對值最大的那行跟第i行換一個位置,這樣交換是有好處的,就是當面對0的情況,哈哈,想一想

然後就用第i行開始把從i+1到最後一行的所有行進行消元操作,消元的目的是把i行之後的所有行的第i列變成0

最後,變成的就是一個上三角矩陣了


從下往上迭代求值即可


如果不懂如何迭代求值,打個草稿看看就好了


My Code:

#include<iostream>#include<map>#include<string>#include<cstring>#include<cstdio>#include<cstdlib>#include<cmath>#include<queue>#include<vector>#include<algorithm>using namespace std;double gauss(double a[10][10],int n){int i,j,k,t;for(i=0;i<n;i++){t=i;for(j=i+1;j<n;j++)if(fabs(a[j][i])>fabs(a[t][i]))t=j;if(t!=i)for(j=0;j<=n;j++)swap(a[i][j],a[t][j]);if(a[i][i]!=0)for(j=i+1;j<n;j++)for(k=n;k>=i;k--)a[j][k]-=a[j][i]/a[i][i]*a[i][k];}for(i=n-1;i>-1;i--){for(j=i+1;j<n;j++)a[i][n]-=a[j][n]*a[i][j];a[i][n]/=a[i][i];}}int main(){double a[10][10];int i,j,n;while(cin>>n){for(i=0;i<n;i++)for(j=0;j<=n;j++)cin>>a[i][j];gauss(a,n);for(i=0;i<n;i++)cout<<a[i][n]<<" ";cout<<endl;}}


論高斯消元實現

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.