#include <stdio.h>
	#include <math.h>
 #define N 4 /* N为方程组系数矩阵的阶数*/
	#define MAX_N 1000 /* 最大迭代次数*/
 #define eps 1e-6 /* 给定精度要求*/
	float a[N][N]={{1.5,0.5,2.5,-3},{6,0.6,0,-5},{1,1.2,14,1},{-3,-5,1,11.1}};/*输入被求解线性方程组*/
 float b[N]={14.4095,16.166,24.628,-5.8256};
	float x[N]={0,0,0,0}; /*定义初始值*/
 int gauss_seidel(float a[N][N],float b[N],float x[N])/*高斯-赛德尔计算核心*/
	{
          float d,s,max,temp;
	         int i,j,k,flag;
          k=0;
	         while(1)
          {
	                  max=0.0;
                   k++;
	                  for(i=0;i<N;i++)
                   {
	                          s=0.0;
                           temp=x[i]; /* temp临时存放x[i]的旧值*/
	                          for(j=0;j<N;j++)
                           {
	                                   if(j==i)
                                             s=s+a[i][j]*x[j];
	                          }
                           x[i]=(b[i]-s)/a[i][i]; /* 计算x[i]的新值*/
	                          d=fabs(x[i]-temp);
                           if(max<d)
	                                   max=d;
                   }
	                  if(max<eps) /* 满足精度时,结束迭代*/
                   {
	                          flag=1;
                           break;
	                  }
          }
	         return(flag);
 }
	void augm_matrix(float a[N][N],float b[N]) /*输出增广矩阵*/
 {
	         int i,j;
          for(i=0;i<N;i++)
	         {
                   for(j=0;j<N;j++)
	                          printf("%10f",a[i][j]);
                   printf("%12f",b[i]);
	                  printf("\n");
          }
	         printf("\n");
 }
	main()
 {
	         int i,k;
          printf("Linear equations:\n");
	         augm_matrix(a,b);
          k=gauss_seidel(a,b,x);
	         if(k==1) /* 输出方程组的解*/
          {
	                  printf("Results:\n");
                   for(i=0;i<N;i++)
	                          printf(" x%d=%f\n",i+1,x[i]);
          }
	         else
                   printf("No result could be obtained.\n"); /*输出失败信息*/
	         system("pause");
 }
 参考资料:
	[1] 王汉青. 暖通空调流体流动数值计算方法与应用[M]. 北京: 科学出版社, 2013.10.
搜索
