高斯消去法C语言程序
XYYZ 2006年4月9日
#include <stdio.h>
#include <math.h>
#define N 4
void main()
{
int k,i,j,ii=0,jj=0,z[N],tt;
double a[N][N],b[N],sum,x[N],y[N],sp,t;
printf("请输入原始增广矩阵(按行输入):/n");
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
scanf("%lf",&a[i][j]);
scanf("%lf",&b[i]);
}
printf("你输入的原始增广矩阵为:/n");
for(i=0;i<N;i++)z[i]=i;
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
printf("%f ",a[i][j]);
printf("%f/n",b[i]);
}
printf("/n");
for(k=0;k<N-1;k++)
{
ii=k;jj=k;
for(i=k;i<N;i++)
for(j=k;j<N;j++)
if(fabs(a[ii][jj])<fabs(a[i][j])){ii=i;jj=j;}
if(a[ii][jj]==0)break;
if(ii!=k)
for(j=k;j<N;j++)
{t=0;t=a[ii][j];a[ii][j]=a[k][j];a[k][j]=t;}
{t=0;t=b[ii];b[ii]=b[k];b[k]=t;}
if(jj!=k)
for(i=0;i<N;i++)
{t=0;t=a[i][jj];a[i][jj]=a[i][k];a[i][k]=t;}
{tt=0;tt=z[jj];z[jj]=z[k];z[k]=tt;}
for(i=k+1;i<N;i++) /*消元过程*/
{
sp=a[i][k]/a[k][k];
for(j=k;j<N;j++)
a[i][j]=a[i][j]-a[k][j]*sp;
b[i]=b[i]-b[k]*sp;
}
printf("第%d次消元后的结果/n",k+1);
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)printf("%f ",a[i][j]);
printf("%f/n",b[i]);
}
printf("/n");
}
y[N-1]=b[N-1]/a[N-1][N-1]; /*回代过程*/
for(k=N-2;k>=0;k--)
{
sum=0;
for(j=k+1;j<N;j++)sum=sum+a[k][j]*y[j];
y[k]=(b[k]-sum)/a[k][k];
}
for(i=0;i<N;i++)printf("z[%d]=%d ",i,z[i]);
printf("/n");
for(i=0;i<N;i++)x[z[i]]=y[i];
for(i=0;i<N;i++)printf("y[%d]=%f ",i,y[i]); printf("/n");
for(i=0;i<N;i++)printf("x[%d]=%f ",i,x[i]); printf("/n");
}
又要补充改进的请多指教。
高斯消元法
最新推荐文章于 2022-02-25 19:38:17 发布