1.2.4 结果分析
迭代次数增加时,精度越高。从输出结果可以看出此方程组的迭代次数为17,迭代结果越来越接近精确解了,于是
=2.842391
1.3 题目 高斯-赛德尔迭代法解方程组
方程组为:
1.3.1 高斯-赛德尔迭代法算法
设方程组Ax=b的系数矩阵的对角线元素 为容许误差。
1 取初始向量 令k=0.
2 对i=1,2,…,n计算
3 如果 结束;否则执行4
4 如果 ,转2
1.3.2 程 序
#include <stdio.h>
#include <math.h>
#define N 600
void main()
{
int i;
float x[4];
float c[4][5]={10,-1,2,0,-11,0,8,-1,3,-11,2,-1,10,0,6,-1,3,-1,11,25};
void GaussSeidel(float *,int,float[]);
GaussSeidel(c[0],4,x);
for(i=0;i<=3;i++)printf("x[%d]=%f\n",i,x[i]);
}
void GaussSeidel(float *a,int n,float x[])
{
int i,j,k=1;
float d,dx,eps;
for(i=0;i<n-1;i++)x[i]=0.0;
while(1)
{eps=0;
for(i=0;i<n-1;i++)
{
d=0;
for(j=0;j<n-1;j++)
{
if(j==i)continue;
d+=*(a+i*(n+1)+j)*x[j];
}
dx=(*(a+i*(n+1)+n)-d)/(*(a+i*(n+1)+i));
eps+=fabs(dx-x[i]);
x[i]=dx;
}
if(eps<1e-6)
{printf("迭代次数是:%d\n",k);return;}
if(k>N)
{
printf("迭代发散n\n");
return;
}
k++;}}
1.3.3 输出结果