高斯消元法

高斯消去法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");
}
又要补充改进的请多指教。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值