雅克比迭代法
- 格式:doc
- 大小:163.50 KB
- 文档页数:3
雅克比迭代法
上机题目:
用雅克比迭代法解线性方程组
上机程序:
#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); } 运行结果: