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


 
  #include "stdlib.h" 
  int jcplx(n,m,a,b,alpha,eps,x,xx,k) 
  int n,m,k; 
  double a[],b[],alpha,eps,x[],xx[]; 
  { extern double jcplxf(); 
    extern void jcplxs(); 
    double rn(); 
    int r,g,i,j,it,kt,jt,kk; 
    double fj,fr,fg,z,rr,*c,*d,*w,*xt,*xf; 
    c=malloc(m*sizeof(double)); 
    d=malloc(m*sizeof(double)); 
    w=malloc(m*sizeof(double)); 
    xt=malloc(n*sizeof(double)); 
    xf=malloc(n*sizeof(double)); 
    rr=0.0; 
    for (i=0; i<=n-1; i++) 
      xx[i*n*2]=x[i]; 
    xx[n*n*2]=jcplxf(x,n); 
    for (j=1; j<=2*n-1; j++) 
      { for (i=0; i<=n-1; i++) 
	  { xx[i*n*2+j]=a[i]+(b[i]-a[i])*rn(&rr); 
            x[i]=xx[i*n*2+j]; 
          } 
        it=1; 
        while (it==1) 
          { it=0; r=0; g=0; 
            while ((r=x[r])) r=r+1; 
                else g=1; 
              } 
            if (g==0) 
              { jcplxs(n,m,x,c,d,w); 
                r=0; 
                while ((r=w[r])) r=r+1; 
                    else g=1; 
                  } 
              } 
            if (g!=0) 
              { for (r=0; r<=n-1; r++) 
                  { z=0.0; 
                    for (g=0; g<=j-1; g++) 
                      z=z+xx[r*n*2+g]/(1.0*j); 
                    xx[r*n*2+j]=(xx[r*n*2+j]+z)/2.0; 
                    x[r]=xx[r*n*2+j]; 
                  } 
                it=1; 
              } 
            else xx[n*n*2+j]=jcplxf(x,n); 
          } 
      } 
    kk=1; it=1; 
    while (it==1) 
      { it=0; 
        fr=xx[n*n*2]; r=0; 
        for (i=1; i<=2*n-1; i++) 
          if (xx[n*n*2+i]>fr) 
            { r=i; fr=xx[n*n*2+i];} 
        g=0; j=0; fg=xx[n*n*2]; 
        if (r==0) 
          { g=1; j=1; fg=xx[n*n*2+1];} 
        for (i=j+1; i<=2*n-1; i++) 
          if (i!=r) 
            if (xx[n*n*2+i]>fg) 
              { g=i; fg=xx[n*n*2+i];} 
        for (i=0; i<=n-1; i++) 
          { xf[i]=0.0; 
            for (j=0; j<=2*n-1; j++) 
              if (j!=r) 
                xf[i]=xf[i]+xx[i*n*2+j]/(2.0*n-1.0); 
            xt[i]=(1.0+alpha)*xf[i]-alpha*xx[i*n*2+r]; 
          } 
        jt=1; 
        while (jt==1) 
          { jt=0; 
            z=jcplxf(xt,n); 
            while (z>fg) 
              { for (i=0; i<=n-1; i++) 
                  xt[i]=(xt[i]+xf[i])/2.0; 
                z=jcplxf(xt,n); 
              } 
            j=0; 
            for (i=0; i<=n-1; i++) 
              { if (a[i]>xt[i]) 
                  { xt[i]=xt[i]+0.000001; j=1;} 
                if (b[i]=w[j])) j=j+1; 
                    else kt=0; 
                  } 
                if (j=eps) 
          { kk=kk+1; 
            if (kk