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


 
  #include "stdlib.h" 
  #include "math.h" 
  int jjsim(n,d,u,v,x,eps,k,xx,f) 
  int n,k; 
  double d,u,v,x[],eps,xx[],f[]; 
  { int r,g,i,j,l,kk; 
    double nn,fe,fr,fl,fg,ft,ff,fs; 
    double *xt,*xf,*xe; 
    extern double jjsimf(); 
    xt=malloc(n*sizeof(double)); 
    xf=malloc(n*sizeof(double)); 
    xe=malloc(n*sizeof(double)); 
    kk=0; nn=1.0*n; 
    fr=sqrt(nn+1.0); 
    fl=d*(fr-1.0)/(1.414*nn); 
    fg=d*(fr+nn-1.0)/(1.414*nn); 
    for(i=0; i<=n-1; i++) 
    for(j=0; j<=n; j++) 
       xx[i*(n+1)+j]=0.0; 
    for(i=1; i<=n; i++) 
    for(j=0; j<=n-1; j++) 
       xx[j*(n+1)+i]=fl; 
    for(i=1; i<=n; i++) 
       xx[(i-1)*(n+1)+i]=fg; 
    for(i=0; i<=n; i++) 
      { for(j=0; j<=n-1; j++) 
           { xt[j]=xx[j*(n+1)+i]; } 
        f[i]=jjsimf(xt,n); 
      } 
    ft=1.0+eps; 
    while ((kkeps)) 
      { kk=kk+1; 
        fr=f[0]; fl=f[0]; r=0; l=0; 
        for (i=1; i<=n; i++) 
          { if (f[i]>fr) { r=i; fr=f[i];} 
            if (f[i]fg)) 
            { g=i; fg=f[i];} 
        for (j=0; j<=n-1; j++) 
          { xf[j]=0.0; 
            for (i=0; i<=n; i++) 
              if (i!=r) 
                xf[j]=xf[j]+xx[j*(n+1)+i]/nn; 
            xt[j]=2.0*xf[j]-xx[j*(n+1)+r]; 
          } 
        ft=jjsimf(xt,n); 
        if (ftf[r]) 
                  for (i=0; i<=n; i++) 
                    { for (j=0; j<=n-1; j++) 
                        { xx[j*(n+1)+i]=(xx[j*(n+1)+i]+ 
					xx[j*(n+1)+l])/2.0; 
                          x[j]=xx[j*(n+1)+i]; xe[j]=x[j]; 
                        } 
                      fe=jjsimf(xe,n); f[i]=fe; 
                    } 
                else 
                  { for (j=0; j<=n-1; j++) 
                      xx[j*(n+1)+r]=xf[j]; 
                    f[r]=ff; 
                  } 
              } 
          } 
        ff=0.0; ft=0.0; 
        for (i=0; i<=n; i++) 
          { ff=ff+f[i]/(1.0+nn); 
            ft=ft+f[i]*f[i]; 
          } 
        ft=(ft-(1.0+n)*ff*ff)/nn; 
      } 
    for (j=0; j<=n-1; j++) 
      { x[j]=0.0; 
        for (i=0; i<=n; i++) 
          x[j]=x[j]+xx[j*(n+1)+i]/(1.0+nn); 
        xe[j]=x[j]; 
      } 
    fe=jjsimf(xe,n); x[n]=fe; 
    free(xt); free(xf); free(xe); 
    return(kk); 
  }