雅克比迭代法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
雅克比迭代法
上机题目:
用雅克比迭代法解线性方程组
上机程序:
#include
#include
main()
{
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("此线性方程组的增广矩阵如下:\n ");
// 下面循环是输出增广矩阵(A, b)
for (k=0;k { for (i=0;i {printf("%f ",A[k][i]); } printf("%f \n", b[k]); } // 输出增广矩阵(A, b)完 printf("此方程组的精确解为x=(-4, 3, 2),\n"); // 显示精确解以便于对比 // 输出初始迭代向量 printf("\n Jacobi迭代的初始值x^0=("); for (i=0;i {printf(" %f ",x[i]); } printf(") \n"); // 输出初始迭代向量完 printf("误差限是%f \n",tol); // 输出误差限 printf(" Jacobi迭代解序列X^(k) max|x^(k+1)-x^(k)| \n "); printf("x^%d = ",k=0); for(i=0;i printf("%f ",x[i]); printf("\n"); // Jacobi迭代 k=0; do { for(i=0;i { double T=0.0; for(j=0;j { if(j==i)continue; T=T+A[i][j]*x[j]; } y[i]=(b[i]-T)/A[i][i]; } // Jacobi迭代完 //求相邻两个数值解想x 与y 的差的绝对值的最大的那个分量 maxerr=fabs(y[0]-x[0]); for (j=1;j { if (maxerr maxerr=fabs(y[j]-x[j]); } //求相邻两个数值解想x 与y 的差的绝对值的最大的那个分量完 for(i=0;i { x[i]=y[i]; } k=k+1; printf("x^%d=",k); for(i=0;i printf(" %f",maxerr); printf("\n"); }while(maxerr>tol); } 运行结果: