雅克比迭代法

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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);

}

运行结果:

相关文档
最新文档