www.pudn.com > cghost.rar > ABINT.C


 
  #include "stdlib.h" 
  #include "math.h" 
  #include "stdio.h" 
  int abint(a,n,b,eps,x) 
  int n; 
  double a[],b[],x[],eps; 
  { int i,j,k,kk; 
    double *p,*r,*e,q,qq; 
    extern int agaus(); 
    extern void brmul(); 
    p=malloc(n*n*sizeof(double)); 
    r=malloc(n*sizeof(double)); 
    e=malloc(n*sizeof(double)); 
    i=60; 
    for (k=0; k<=n-1; k++) 
    for (j=0; j<=n-1; j++) 
      p[k*n+j]=a[k*n+j]; 
    for (k=0; k<=n-1; k++) x[k]=b[k]; 
    kk=agaus(p,x,n); 
    if (kk==0) 
      { free(p); free(r); free(e); return(kk); } 
    q=1.0+eps; 
    while (q>=eps) 
      { if (i==0) 
          { free(p); free(r); free(e); return(i); } 
        i=i-1; 
        brmul(a,x,n,n,1,e); 
        for ( k=0; k<=n-1; k++) r[k]=b[k]-e[k]; 
        for ( k=0; k<=n-1; k++) 
        for ( j=0; j<=n-1; j++) 
           p[k*n+j]=a[k*n+j]; 
        kk=agaus(p,r,n); 
        if (kk==0) 
          { free(p); free(r); free(e); return(kk); } 
        q=0.0; 
        for ( k=0; k<=n-1; k++) 
          { qq=fabs(r[k])/(1.0+fabs(x[k]+r[k])); 
            if (qq>q) q=qq; 
          } 
        for ( k=0; k<=n-1; k++) x[k]=x[k]+r[k]; 
      } 
    free(p); free(r); free(e); return(1); 
  }