c.txt 4 -2 -4 10 -2 17 10 3 -4 10 9 -7
#include<stdio.h> #include<math.h> #define M 3 main() { FILE *f; double a[M][M],b[M]; double x[M]={0,0,0}; double y[M]; int i,j,k,n=100; f=fopen("c.txt","r"); for(i=0;i<M;i++) { for(j=0;j<M;j++) fscanf(f,"%lf",&a[i][j]); fscanf(f,"%lf",&b[i]); } fclose(f); double s,max,eps=0.0001,w=1.46; k=1; while(k<n) { max=0; for(i=0;i<M;i++) { s=0; for(j=0;j<M;j++) if(j!=i) s+=a[i][j]*x[j]; /// 下面的部分高斯迭代法的做法。 ///用一个数组就行了,没必要加个y[M]数组。 y[i]=(b[i]-s)/a[i][i]; y[i]=(1-w)*x[i]+w*y[i]; if(max<fabs(x[i]-y[i])) max=fabs(x[i]-y[i]); x[i]=y[i]; } if(max<eps) break; printf("k=%d \n",k); for(i=0;i<M;i++) printf("x[%d]=%lf \n",i,x[i]); k++; } if(k==n) { printf("ERROR!\n"); return 0; } printf("k=%d \n",k); for(i=0;i<M;i++) printf("x[%d]=%lf \n",i,x[i]); }