jacobi.c

来自「此代码是数值分析中的jacobi迭代法的实现方法」· C语言 代码 · 共 59 行

C
59
字号
#include <stdio.h> 
#include <math.h> 

Jacobidiedai(int n, double *a, double *b,double *x) 
{ 
int i,j; 
double *x0,m=0,eps; 
x0= (double *) malloc(n*sizeof(double)); 
for(i=0;i<n;i++) 
x0[i]=x[i]; 
while(1) 
{ 
for(i=0;i<n;i++) 
{ 
for(j=0;j<n;j++) 
m+=a[i*n+j]*x0[j]; 
m-=a[i*n+i]*x0[i]; 
x[i]=(b[i]-m)/a[i*n+i]; 
m=0; 
} 
for(i=1;i<n;i++) 
{ 
eps=fabs(x[0]-x0[0]); 
if(eps<fabs(x[i]-x0[i])) 
eps=fabs(x[i]-x0[i]); 
} 
if(eps<1e-3) return 1; 
for(i=0;i<n;i++) 
x0[i]=x[i]; 
} 
free(x0); 
} 

void main() 
{ 
int i,j,n; 
double *a; 
double *b; 
double *x; 

printf("请输入方程个数 n\n"); 
scanf("%d",&n); 


a = (double *) malloc(sizeof(double) * n*n); 


b = (double *) malloc(sizeof(double) * n); 
x = (double *) malloc(sizeof(double) * n); 

printf("请输入方程序数 a[j][i]\n"); 

for (i=0;i<n*n;i++) scanf("%lf",&a[i]); 
printf("请输入 b[j]\n"); 
for (j=0;j<n;j++) scanf("%lf",&b[j]); 

(void) Jacobidiedai(n,a,b,x); 
for(i=0;i<n;i++) printf("x[%d]=%f\n",i,x[i]); 
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?