雅克比迭代法c语言程序,急!

帮忙看一下这个程序哪错了,要怎么改?#include <stdio.h>#define N 4#define delta 0.000001double norm(double x1[N],double x2[N]){ int i,j,n; double a; n=N; double sum[N]; for(i=1;i<=n;i++) {if(x2[i]>x1[i]) sum[i]=x2[i]-x1[i]; else sum[i]=x1[i]-x2[i]; } for(a=0,j=1;j<=n;j++) {if(a<sum[j]) a=sum[j]; }return a; }void main(){ int i,j; double a[N][N]={ 0,0,0,0, 0.78,-0.02,-0.12,-0.14, -0.02,0.86,-0.04,0.06, -0.12,-0.04,0.72,-0.08, -0.14,0.06,-0.08,0.74}, b[N]={0.76,0.08,1.12,0.68}; double x1[N]={0},x2[N]={0}; int n=N; double sum; int k=0; for(i=1;i<=n;i++) { for(sum=0,j=1;j<=n;j++) if(i != j) sum+=a[i][j]*x1[j]; x2[i]=(1/a[i][i])*(b[i]-sum); } k++; while( norm(x1,x2) > delta) { for(i=1;i<=n;i++) x1[i]=x2[i]; for(i=1;i<=n;i++) { for(sum=0,j=1;j<=n;j++) if(i != j) sum+=a[i][j]*x1[j]; x2[i]=1/a[i][i]*(b[i]-sum); } k++; } for(i=1;i<=n;i++) printf("x[%d]=%f尀n",i,x2[i]); printf("k=%d尀n",k);}
2026年09月26日 05:46
有1个网友回答
网友(1):

double a[N][N]={ 0,0,0,0,
0.78,-0.02,-0.12,-0.14,
-0.02,0.86,-0.04,0.06,
-0.12,-0.04,0.72,-0.08,
-0.14,0.06,-0.08,0.74},

你定义的N为4,4*4=16,但你初始化有20个值,建议改成4*5,或5*5