/** ***高斯消元法解线性方程组*** 《数值分析简明教程》-2 Editon -高等教育出版社- page 177 消元回代算法流程图 - page 180 选主元素算法流程图 描述:(1)选择主元 (2)消元过程 (3)回代过程 代码维护:2005.6.14 DragonLord **/ #include<iostream.h> #include<math.h> int main() { float a[10][10],b[10],d=0,t=0,sum=0; int k=1,l=0,i=0,j=0,m,n; cout<<"输入方程组组数:"<<endl; cin>>n; cout<<"输入方程组未知数:"<<endl; cin>>m; cout<<"输入方程组各项系数:"<<endl; for(int ii=1;ii<=n;ii++) { cout<<"第 "<<ii<<" 组数据"<<endl; for(int jj=1;jj<=m;jj++)cin>>a[ii][jj]; cin>>b[ii]; } while(k<=n) { //*****选主元素***** d=a[k][k]; l=k; for(i=k+1;i<=n;i++) { if(fabs(a[i][k])>fabs(d)) { d=a[i][k]; l=i; } } if(l!=k) { for(j=k;j<=n;j++) { t=a[l][j];a[l][j]=a[k][j];a[k][j]=t; } t=b[k];b[k]=b[l];b[l]=t; } //************** //*****消元***** for(j=k+1;j<=n;j++) { a[k][j]=a[k][j]/a[k][k]; } b[k]=b[k]/a[k][k]; for(i=k+1;i<=n;i++) { for(j=k+1;j<=n;j++) { a[i][j]=a[i][j]-a[i][k]*a[k][j]; } j=1; b[i]=b[i]-a[i][k]*b[k]; } k++; //************** } //*****回代***** for(i=n-1;i>=1;i--) { sum=0; for(j=i+1;j<=n;j++) { sum=sum+a[i][j]*b[j]; } b[i]=b[i]-sum; } //************** cout<<endl <<endl <<"最后结果:"<<endl; for(int loop=1;loop<=n;loop++) { cout<<"x"<<loop<<"="<<b[loop]<<endl; } return 0; }
|