3030823100 发表于 2007-5-22 22:19

求复合形算法 MATLAB源程序(有C语言的)

由于毕业设计需要,求 复合形算法 MATLAB源程序...因此请教各位大虾帮助。。。如果有复合形算法 MATLAB源程序希望能发我邮箱260694112@qq.com.....(下面是C语言的复合形也希望有大虾能帮你翻译成MATLAB语言。。如果可用一定重谢。。详情可以联系我邮箱。。。)
#include "stdlib.h"
#include "math.h"
static double rn(rr)
double *rr;
{int m;
double y,s,u,v;
s=65536.0;u=2053.0;v=13849.0;
*rr=u*(*rr)+v;m=*rr/s;*rr=*rr-m*s;
y=*rr/s;
return(y);
}
double hecmpf(x,n)
double x[];
{double y;
y=-(9.0-(x-3.0)*(x-3.0));
y=y*x*x*x/(27.0*sqrt(3.0));
return(y);
}
void hecmpfs(n,m,x,c,d,w)
int n,m;
double x[],c[],d[],w[];
{c=0.0;c=0.0;
d=x/sqrt(3.0);d=6.0;
w=x;w=x+x*sqrt(3.0);
return;
}
int hecmp(n,m,a,b,alpha,eps,x,xx,k)
int n,m,k;
double a[],b[],alpha,eps,x[],xx[];
{ //extern double hecmpf();
//extern void hecmpfs();
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=x;
   xx=hecmpf(x,n);
   for(j=1;j<=2*n-1;j++)
   {for(i=0;i<=n-1;i++)
       {xx=a+(b-a)*rn(&rr);
x=xx;
}
   it=1;
   while(it==1)
   {it=0;r=0;g=0;
   while((r<n)&&(g==0))
       {if((a<=x)&&(b>=x))r=r+1;
       else g=1;
       }
       if(g==0)
{hecmpfs(n,m,x,c,d,w);
r=0;
while((r<m)&&(g==0))
{if ((c<=w)&&(d>=w))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/(1.0*j);
xx=(xx+z)/2.0;
x=xx;
}
it=1;
}
else xx=hecmpf(x,n);
}
}
kk=1;it=1;
while(it==1)
{it=0;
fr=xx;r=0;
for(i=1;i<=2*n-1;i++)
if(xx>fr)
   {r=i;fr=xx;}
   g=0;j=0;fg=xx;
   if(r==0)
   {g=1;j=1;fg=xx;}
   for(i=j+1;i<2*n-1;i++)
   if(i!=r)
   if(xx>fg)
   {g=i;fg=xx;}
   for(i=0;i<=n-1;i++)
   {xf=0.0;
   for(j=0;j<=2*n-1;j++)
   if(j!=r)
   xf=xf+xx/(2.0*n-1.0);
   xt=(1.0+alpha)*xf-alpha*xx;
   }
   jt=1;
   while(jt==1)
   {jt=0;
    z=hecmpf(xt,n);
    while(z>fg)
    {for(i=0;i<=n-1;i++)
      xt=(xt+xf)/2.0;
      z=hecmpf(xt,n);
      }
   j=0;
   for(i=0;i<=n-1;i++)
   {if(a>xt)
      {xt=xt+0.000001;j=1;}
    if(b<xt)
      {xt=xt-0.000001;j=1;}
      }
      if(j!=0)jt=1;
      else
      {hecmpfs(n,m,xt,c,d,w);
      j=0;kt=1;
      while((kt==1)&&(j<m))
      {if((c<=w)&&(d>=w))j=j+1;
      else kt=0;
      }
      if(j<m)
      {for(i=0;i<=n-1;i++)
      xt=(xt+xf)/2.0;
      jt=1;
      }
       }
      }
   for(i=0;i<=n-1;i++)
   xx=xt;
   xx=z;
   fr=0.0;fg=0.0;
   for(j=0;j<=2*n-1;j++)
   {fj=xx;
   fr=fr+fj/(2.0*n);
   fg=fg+fj*fj;
   }
   fr=(fg-2.0*n*fr*fr)/(2.0*n-1.0);
   if(fr>=eps)
   {kk=kk+1;
   if(kk<k)it=1;
   }
   }
   for(i=0;i<=n-1;i++)
   {x=0.0;
   for(j=0;j<=2*n-1;j++)
      x=x+xx/(2.0*n);
      }
   z=hecmpf(x,n);x=z;
   free(c);free(d);free(w);
   free(xt);free(xf);
   return(kk);
   }
>>>>>>>>>>>>>>>>>
#include"stdio.h"
#include "conio.h"
//#include"hecmp.c"
main()
{
int i;
double alpha,eps,a,b,x,xx;
x=0.0;x=0.0;
a=0.0;a=0.0;
b=1.0e+35;b=b;
eps=1.0e-30;alpha=1.3;
i=hecmp(2,2,a,b,alpha,eps,x,xx,20);
printf("\n");
printf("i=%4d\n",i);
printf("\n");
for(i=0;i<=3;i++)
printf("x(0)=%e x(1)=%e f=%e\n",xx,xx,xx);
printf("\n");
for(i=0;i<=1;i++)
printf("x(%2d)=%e\n",i,x);
printf("J=%e\n",x);
printf("\n");
getch();
}

>>>>>>>>>>>>>
#include "math.h"
double hecmpf(x)
double x[];
{double y;
y=-(9.0-(x-3.0)*(x-3.0));
y=y*x*x*x/(27.0*sqrt(3.0));
return(y);
>>>>>
#include "math.h"
void hecmpfs(n,m,x,c,d,w)
int n,m;
double x[],c[],d[],w[];
{c=0.0;c=0.0;
d=x/sqrt(3.0);d=6.0;
w=x;w=x+x*sqrt(3.0);
return;
}

[ 本帖最后由 eight 于 2007-5-22 23:40 编辑 ]
页: [1]
查看完整版本: 求复合形算法 MATLAB源程序(有C语言的)