/**
***高斯消元法解线性方程组***
《数值分析简明教程》-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;
}