约旦(Jordan)消去法

#include<stdio.h>
#include<math.h>
#define N 4 /* N为方程组的系数矩阵的阶数*/
float a[N][N+1]={{1.5,0.5,2.5,-3,14.4095},{6,0.6,0,-5,16.166},{1,1.2,14,1,24.628},{-3,-5,1,11.1,-5.8256}};/*输入被求解线性方程组*/
int jordan(float a[N][N+1])/*约旦消去法计算核心*/
{
         float r;
         int i,j,k,flag=1;
         for(k=0;k<N;k++)
         {
                  if(a[k][k]==0) /* 当a[k][k]为0时,约当消去法不能进行*/
                  {
                          flag=0;
                          break;
                  }
                  else
                  {
                          for(i=0;i<N;i++)
                          {
                                   r=a[i][k]/a[k][k];
                                   if(i!=k)
                                   {
                                            if(a[i][k]!=0)
                                            {
                                                     for(j=0;j<=N;j++)
                                                             a[i][j]=a[i][j]-r*a[k][j];
                                            }
                                   }
                          }
                  }
         }
         return(flag);
}
void augm_matrix(float a[N][N+1]) /*输出增广矩阵*/

         int i,j;
         for(i=0;i<N;i++)
         {
                  for(j=0;j<=N;j++)
                          printf("%10f",a[i][j]);
                  printf("\n");
         }
         printf("\n");
}
main()
{
         float x[N];
         int i,k;
         printf("Linear equations:\n");
         augm_matrix(a); /* 输出增广矩阵的初始数据*/
         k=jordan(a);
         if(k==1) /* 当k=1时约当消去法正常进行*/
         {
                  augm_matrix(a); /* 输出初等变换后的增广矩阵*/
                  printf("Results:\n");
                  for(i=0;i<N;i++)
                  {
                          x[i]=a[i][N]/a[i][i];
                          printf(" x%d=%f\n",i+1,x[i]); /*输出方程组的解*/
                  }
         }
         else /* 当k=0时输出约当消去法不能失败*/
                  printf("No result could be obtained.");
         system("pause");
}

参考资料:
[1] 王汉青. 暖通空调流体流动数值计算方法与应用[M]. 北京: 科学出版社, 2013.10.