声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1533|回复: 0

[综合讨论] 求复合形算法 MATLAB源程序(有C语言的)

[复制链接]
发表于 2007-5-22 22:19 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
由于毕业设计需要,求 复合形算法 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[0]-3.0)*(x[0]-3.0));
y=y*x[1]*x[1]*x[1]/(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.0;c[1]=0.0;
d[0]=x[0]/sqrt(3.0);d[1]=6.0;
w[0]=x[1];w[1]=x[0]+x[1]*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[i*n*2]=x;
   xx[n*n*2]=hecmpf(x,n);
   for(j=1;j<=2*n-1;j++)
     {for(i=0;i<=n-1;i++)
       {xx[i*n*2+j]=a+(b-a)*rn(&rr);
x=xx[i*n*2+j];
}
     it=1;
     while(it==1)
     {it=0;r=0;g=0;
     while((r<n)&&(g==0))
       {if((a[r]<=x[r])&&(b[r]>=x[r]))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[r]<=w[r])&&(d[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]=hecmpf(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=0.0;
   for(j=0;j<=2*n-1;j++)
   if(j!=r)
   xf=xf+xx[i*n*2+j]/(2.0*n-1.0);
   xt=(1.0+alpha)*xf-alpha*xx[i*n*2+r];
   }
   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[j])&&(d[j]>=w[j]))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[i*n*2+r]=xt;
     xx[n*n*2+r]=z;
     fr=0.0;fg=0.0;
     for(j=0;j<=2*n-1;j++)
     {fj=xx[n*n*2+j];
     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[i*n*2+j]/(2.0*n);
      }
     z=hecmpf(x,n);x[n]=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[2],b[2],x[3],xx[3][4];
x[0]=0.0;x[1]=0.0;
a[0]=0.0;a[1]=0.0;
b[0]=1.0e+35;b[1]=b[0];
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[0],xx[1],xx[2]);
printf("\n");
for(i=0;i<=1;i++)
printf("x(%2d)=%e\n",i,x);
printf("J=%e\n",x[2]);
printf("\n");
getch();
}

>>>>>>>>>>>>>
#include "math.h"
double hecmpf(x)
double x[];
{double y;
y=-(9.0-(x[0]-3.0)*(x[0]-3.0));
y=y*x[1]*x[1]*x[1]/(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.0;c[1]=0.0;
d[0]=x[0]/sqrt(3.0);d[1]=6.0;
w[0]=x[1];w[1]=x[0]+x[1]*sqrt(3.0);
return;
}

[ 本帖最后由 eight 于 2007-5-22 23:40 编辑 ]
回复
分享到:

使用道具 举报

您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-19 04:41 , Processed in 0.054506 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表