列主元消去法求解方程组(C语言)

  • Post author:
  • Post category:其他


用列主元消去法解下列方程组:

这里写图片描述

#include<stdio.h>
#include<math.h>
void main()
{
void zhu(float *,int,float[]);   //声明函数zhu

int i;  
float x[4];                      //x为解
float c[4][5]={1,1,0,3,4,        //矩阵
               2,1,-1,1,1,
               3,-1,-1,3,-3,
               -1,2,3,-1,4};
float y[4];
float d[4][5]={1,-1,2,-1,-8,
               2,-2,3,-3,-20,
               1,1,1,0,-2,
               1,-1,4,3,4};

zhu(c[0],4,x);
zhu(d[0],4,y);
for(i=0;i<=3;i++)
printf("x[%d]=%f\n",i+1,x[i]);  //输出结果

printf("\n");
for(i=0;i<=3;i++)
printf("y[%d]=%f\n",i+1,y[i]);
}

//列主元消去法
void zhu(float *c,int n,float x[])
{
    int i,j,t,k;
    float p;
    for(i=0;i<=n-2;i++)
    {
        k=i;
        for(j=i+1;j<=n-1;j++)
            if(fabs(*(c+j*(n+1)+i))>(fabs(*(c+k*(n+1)+i))))
                k=j;

        if(k!=i)
            for(j=i;j<=n;j++)
            {
                p=*(c+i*(n+1)+j);
            *(c+i*(n+1)+j)=*(c+k*(n+1)+j);
                *(c+k*(n+1)+j)=p;
            }                                            //找最大的调换位置
        for(j=i+1;j<=n-1;j++)
        {
            p=(*(c+j*(n+1)+i))/(*(c+i*(n+1)+i));         //求系数
            for(t=i;t<=n;t++)
                *(c+j*(n+1)+t)-=p*(*(c+i*(n+1)+t));
        }
    }

    for(i=n-1;i>=0;i--)
    {
            for(j=n-1;j>=i+1;j--)
                (*(c+i*(n+1)+n))-=x[j]*(*(c+i*(n+1)+j));  //求解
                x[i]=(*(c+i*(n+1)+n))/(*(c+i*(n+1)+i));
    }   
}



版权声明:本文为landcruiser007原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。