求高手指点:以下为雅可比迭代法计算3*4矩阵程序,为何程序可以运行但是结果不正确?

来源:百度知道 编辑:UC知道 时间:2024/05/25 18:35:37
/*雅可比迭代法*/
#include <stdio.h>
#include <conio.h>
#include <alloc.h>
#include <math.h>
#define EPS 1e-6
#define MAX 100
float *Jacobi (float a[3][4],int n)
{
float *x,*y,epsilon,s;
int i,j,k=0;
x=(float *)malloc(n*sizeof(float));
y=(float *)malloc(n*sizeof(float));
for(i=0; i<n; i++) x[i]=0;
while(1)
{
epsilon=0.0;
k++;
for(i=0; i<n; i++)
{
s=0;
for(j=0; j<n; j++)
{
if(j==i) continue;
s+=a[i][j]*x[j];
};
y[i]=(a[i][n]-s)/a[i][i];
epsilon+=fabs(y[i]-x[i]);
};
if(epsilon<EPS) printf("迭代次数为: %d\n",k);return;
if(k>=MAX)
{printf("The method is disconvergent");
return y; };
for(i=0; i<n; i++) x[i]=y[i];
};
}
main()
{
int i;
float a[3][4]={5,2,1,8,2,8,-3,21,1

#include "stdio.h"
#include "math.h"
#include "string.h"
main()
{
int i,j,k;
float m1=0.0,m2=0.0;
float a[4][5]={5,-1,-1,-1,4,-1,10,-1,-1,12,-1,-1,5,-1,8,-1,-1,-1,10,30};
float x[4]={0.0,0.0,0.0,0.0};
for(k=1;k<=7;)
{for(i=0;i<=3;i++)
{
for(j=0;j<i;j++)
m1=m1+a[i][j]*x[j];
for(j=i+1;j<=3;j++)
m2=m2+a[i][j]*x[j];
x[i]=(a[i][4]-m1-m2)/a[i][i];
m1=0,m2=0;
}
k++;
}
for(i=0;i<=3;i++)
printf("x(%2d)=%8.9f\n",i+1,x[i]);
}