


如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
雅克比迭代法 上机题目: 用雅克比迭代法解线性方程组 上机程序: #include<stdio.h> #include<math.h> main() { doubleA[3][3]={{5,2,1},{-1,4,2},{2,-3,10}},b[3]={-12,20,3};//输入系数矩阵A和右端向量b doublen=3,tol=1.0e-3,x[3]={-3,1,1};//输入方程大小n,误差限tol,和初始向量x doubley[3];//记录每次迭代产生的新的近似解 doublemaxerr;//maxerr记录相邻两个数值解想x与y的差的绝对值的最大的那个分量。 intk,i,j; printf("此线性方程组的增广矩阵如下:\n"); //下面循环是输出增广矩阵(A,b) for(k=0;k<n;k++) { for(i=0;i<n;i++) {printf("%f",A[k][i]); } printf("%f\n",b[k]); } //输出增广矩阵(A,b)完 printf("此方程组的精确解为x=(-4,3,2),\n");//显示精确解以便于对比 //输出初始迭代向量 printf("\nJacobi迭代的初始值x^0=("); for(i=0;i<n;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<n;i++) printf("%f",x[i]); printf("\n"); //Jacobi迭代 k=0; do {for(i=0;i<n;i++) { doubleT=0.0; for(j=0;j<n;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<n;j++) {if(maxerr<fabs(y[j]-x[j])) maxerr=fabs(y[j]-x[j]); } //求相邻两个数值解想x与y的差的绝对值的最大的那个分量完 for(i=0;i<n;i++) { x[i]=y[i]; } k=k+1; printf("x^%d=",k); for(i=0;i<n;i++)printf("%f",x[i]); printf("%f",maxerr); printf("\n"); }while(maxerr>tol); } 运行结果:

快乐****蜜蜂
实名认证
内容提供者


最近下载