#include <stdio.h>
double norm(double *x,double *y,int n)
{
int i=0;
double s=0;
for(i=0;i<n;i++)
s=s+fabs(x[i]-y[i])*fabs(x[i]-y[i]);
return sqrt(s);
}
void Jacobi(double A[],double b[],double x0[],double x[],int n1)
{
int n=100;
double ee=0.001,s=0;
int i,j,k;
for(i=1;i<=n;i++)
{ for(j=0;j<n1;j++)
{ s=0;
for(k=0;k<n1;k++)
{if(k!=j) s=s+A[j*n1+k]*x0[k];
}
x[j]=(b[j]-s)/A[j*n1+j];
}
if (norm(x,x0,n1)<=ee)
break;
for(j=0;j<n1;j++) x0[j]=x[j];
}
}
int main()
{
double a[3][3]={{9,-1,-1},{-1,8,0},{-1,0,9}};
double b[3]= {7,7,8};
double x0[3]= {0,0,0.0};
double x[3]= {0,0,0};
int n1=3,i;
Jacobi(a,b,x0,x,n1);
for (i=0;i<n1; i++)
printf("x(%d)=%6.4f\n",i+1,x[i]);
system("pause");
return(0);
}
敢不敢自己寫啊?