方程组为:
1.2.1 雅可比迭代法算法
设方程组Ax=b的系数矩阵的对角线元素(i=1,2,…,n),M为迭代次数容许的最大值 为容许误差。
1 取初始向量 令k=0.
2 对i=1,2,…,n计算
3 如果则输出结果;否则执行4
4 如果则不收敛,终止程序;否则,转2
1.2.2 程 序
#include
#include
#define eps 1e-6
#define max 100
void Jacobi(float *a,int n,float x[])
{
int i,j,k=0;
float epsilon,s;
float *y= new float [n];
for(i=0;i while(1) { epsilon=0; k++; for(i=0;i { s=0; for(j=0;j { if(j==i)continue; s+=*(a+i*(n+1)+j)*x[j]; } y[i]=(*(a+i*(n+1)+n)-s)/(*(a+i*(n+1)+i)); epsilon+=fabs(y[i]-x[i]); } for(i=0;i if(epsilon {printf("die dai ci shu wei:%d\n",k);return;} if(k>=max) {printf("die dai fa san");return;} } delete y; } void main() {s int i; float a[4][5]={10,-1,2,0,-11,0,8,-1,3,-11,2,-1,10,0,6,-1,3,-1,11,25}; float x[4]; Jacobi(a[0],4,x); for(i=0;i<4;i++)printf("x[%d]=%f\n",i,x[i]); } 1.2.3 输出结果 迭代次数增加时,精度越高。从输出结果可以看出此方程组的迭代次数为17,迭代结果越来越接近精确解了,于是 =-1.467391, =-2.358696, =0.657609, =2.842391 1.3 题目 高斯-赛德尔迭代法解方程组 方程组为: 1.3.1 高斯-赛德尔迭代法算法 设方程组Ax=b的系数矩阵的对角线元素(i=1,2,…,n),M为迭代次数容许的最大值 为容许误差。 1 取初始向量令k=0. 2 对i=1,2,…,n计算 3 如果则输出结束;否则执行4 4 如果则不收敛,终止程序;否则,转2 #include #include #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 while(1) {eps=0; for(i=0;i { d=0; for(j=0;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;}
1.2.4 结果分析