雅克比迭代法

时间:2022-01-06 04:24:15
c++
#include<stdio.h>
#include<math.h>
void main()
{
int n,i,j,k,M;
double a[20][20],b[20],x[20],y[20];
float num1,num2,num3,p;
FILE *fp1=fopen("Jacobi1.txt","r");
FILE *fp2=fopen("Jacobi2.txt","r");
if(fp1==NULL||fp2==NULL)
return;
fscanf(fp1,"%d",&n);
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
fscanf(fp1,"%f",&num1);
a[i][j]=num1;
printf("%f ",a[i][j]);
}
fscanf(fp2,"%f",&num2);
b[i]=num2;
printf("%f\n",b[i]);
}
printf("\n\n*******增广矩阵读取并存储完毕*******\n\n");
printf("请输入初始值");
for(j=0;j<n;j++)
scanf("%f",&x[j]);
printf("请输入迭代精度");
scanf("%f",&p);
printf("请输入迭代次数");
scanf("%d",&M);
for(k=1;k<M;k++)
for(i=0;i<n;i++)
 for(j=0;j<n;j++)
 {
  if(j==i) 
  continue;
  else
 y[i]=(b[i]-a[i][j]*x[j])/a[i][i]; 
 }
 if(fabs(x[j]-y[i])<p)
 {
for(i=0;i<n;i++)  
 printf("x%d=%f",i+1,y[i]);
 }
}



为什么算出的结果完全凌乱,请高手指点,在下谢过!

1 个解决方案

#1


1. 每轮迭代后要用y的值更新x,否则每轮迭代的操作都一样
2. 在一轮迭代里,这个公式也有问题
 y[i]=(b[i]-a[i][j]*x[j])/a[i][i]; 
每次后面的计算都把前面的覆盖掉了

#1


1. 每轮迭代后要用y的值更新x,否则每轮迭代的操作都一样
2. 在一轮迭代里,这个公式也有问题
 y[i]=(b[i]-a[i][j]*x[j])/a[i][i]; 
每次后面的计算都把前面的覆盖掉了