
要求:编写Gauss-Seidel迭代法的通用程序,并用以求以下矩阵方程的解,打印迭代过程:
编译环境:visual c++6.0c语言
实验程序:
#includestdio.h
#includemath.h
#define eps 设定误差限
#系数矩阵的最大维数
double limitless_dimension(double X1[MAX_N+1],double X2[MAX_N+1],int dimension)
{
int i,n=dimension;
i=1;i=n;i++)
fabs(X1[i]-X2[i]);
ls)ls;
}比较X1[]和X2[]之差的转置矩阵的无穷范数s
void main()
{
printf(input N value(dimension of Ax=b)); 输入Ax=b的维数n
printf(the input n is larger than MAX_N, please redefine th MAX_N.n);
printf(please input a number between 1 and %d.n,MAX_N)对输入合理性的判断
printf(now input the matrix A(i,j),i,j=1,…,%dn,n);
i=1;i=n;i++)
printf(the array %d,i);
n;j++)
scanf(%lf,&A[i][j]);
输入系数矩阵
printf(now input the matrix y(i),i=1,…,%dn,n);
i=1;i=n;i++)
scanf(%lf,&y[i]); 输入结果矩阵y[]
i=1;i=n;i++)
i]定义x2[]初值为1
i=1;i=n;i++)
i]=y[i]A[i][i];
n;j++)
i][j]=-A[i][j]A[i][i
i][i]=0;
} 根据定义得到Jaccobi的迭代矩阵B[][]和g[]
limitless_dimension(x1,x2,n)eps)
printf(第%d次迭代:,k++);
i=1;i=n-1;i++)
printf(%.6lf ,x2[i]);
printf(%.6lfn,x2[i]输出第k次迭代
n;u++)
i=1;i=n;i++)
i];
n;j++)
i][j]x2[j];
i]=s;
} 实现Gauss-Seidel迭代法的核心算法
printf(the results X[%d]n,n);
i=1;i=n-1;i++)
printf(%.6lf ,x2[i]);
printf(%.6lfn,x2[i]); 打印结果
}
