雅克比迭代法
上机题目:
用雅克比迭代法解线性方程组 上机程序:
#include
printf(\此线性方程组的增广矩阵如下: \\n \// 下面循环是输出增广矩阵(A, b)
printf(\此方程组的精确解为 x=(-4, 3, 2),\\n\显示精确解以便于对比
// 输出初始迭代向量
printf(\迭代的初始值x^0=(\for (i=0;i // 输出增广矩阵(A, b)完 for (k=0;k for (i=0;i printf(\ double A[3][3]={{5,2,1},{-1,4,2},{2,-3,10}},b[3]={-12,20,3}; // 输入系数矩阵A 和 右端向量b double n=3, tol=1.0e-3,x[3]={-3,1,1}; // 输入方程大小n,误差限tol, 和初始向量 x double y[3]; // 记录每次迭代产生的新的近似解 double maxerr; // maxerr 记录相邻两个数值解想x 与 y 的差的绝对值的最大的那个分量。 int k,i,j; // 输出初始迭代向量完 printf(\误差限是%f \\n\输出误差限 printf(\ Jacobi迭代解序列X^(k) max|x^(k+1)-x^(k)| \\n \printf(\ for(i=0;i printf(\ \ printf(\// Jacobi迭代 k=0; //求相邻两个数值解想x 与 y 的差的绝对值的最大的那个分量 printf(\ } for(i=0;i for(i=0;i x[i]=y[i]; maxerr=fabs(y[0]-x[0]); for (j=1;j { if (maxerr maxerr=fabs(y[j]-x[j]); { for(i=0;i double T=0.0; { } y[i]=(b[i]-T)/A[i][i]; if(j==i)continue; for(j=0;j T=T+A[i][j]*x[j]; // Jacobi迭代完 //求相邻两个数值解想x 与 y 的差的绝对值的最大的那个分量完 k=k+1; printf(\ }while(maxerr>tol); 运行结果:
雅克比迭代法



