关灯

谁知道极小极大值得优化问题怎么求解阿。

[复制链接]
wengliguo 发表于 2006-5-24 20:56:44 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
 
谁知道极大极小值问题的优化怎么解决阿?谁有待约束的优化问题的程序阿,能不能发一个给我啊,谢谢了。我的油箱是wengliguo317@163.com
单选投票, 共有 4 人参与投票
您所在的用户组没有投票权限
回复

使用道具 举报

 

精彩评论3

正序浏览
xinghe010 发表于 2006-7-21 21:16:16 | 显示全部楼层
 
用matlab 工具箱就可以了
里面有现成的工具箱
回复

使用道具 举报

 
muzisheng 发表于 2007-11-11 19:13:05 | 显示全部楼层
 
看看机械工业出版社出版的《机械优化设计》(第三版),孙靖民。
上面的一维搜索中的黄金分割法和二次插值法以及后面的无约束优化方法都可以解决的!可用程序编程实现!
回复

使用道具 举报

 
muzisheng 发表于 2007-11-11 19:15:21 | 显示全部楼层
 
这是我写的二次插值法的C语言的程序

#include <stdio.h>
#include <math.h>
float fun1(float t);
float fun2(float alpha[],float y[],float h,float a);
float fun3(float alpha[],float y[],float epsilon,float h,float a);
float fun4(float alpha[],float y[],float alphap,float yp,float h);
float fun5(float alpha[],float y[],float alphap,float yp);
float fun6(float alpha[],float y[],float alphap,float yp);
void main (void)
{
   float h0,h,a,b,epsilon,alpha[4],y[4];
   int i;
   printf("Enter a,b,h0,epsilon:\\n");
   scanf("%f%f%f%f",&a,&b,&h0,&epsilon);
   alpha[0]=0;
   y[0]=0;
   alpha[1]=0;
   h=h0;
   alpha[2]=h;
   y[1]=fun1(a);
   y[2]=fun1(a+alpha[2]);
   if(y[2]>=y[1])
     {
       h=-h;
       alpha[3]=alpha[1];
       y[3]=y[1];
       fun2(alpha,y,h,a);
      }
   else
      {
        alpha[3]=alpha[2]+h;
        y[3]=fun1(a+alpha[3]);
       }
   while(y[3]<y[2])
       {
         h=2*h;
         fun2(alpha,y,h,a);
        }
   fun3(alpha,y,epsilon,h,a);
}
float fun1(float t)
   {
     float m;
     m=sin(t);
     return(m);
   }

float fun2(float alpha[],float y[],float h,float a)
  {
    int i;
    for(i=1;i<3;i++)
     {
        alpha=alpha[i+1];
        y=y[i+1];
      }
    alpha[3]=alpha[2]+h;
    y[3]=fun1(a+alpha[3]);
   }

float fun3(float alpha[],float y[],float epsilon,float h,float a)
{
   float c1,c2,alphap,yp;
   c1=(y[3]-y[1])/(alpha[3]-alpha[1]);
   c2=((y[2]-y[1])/(alpha[2]-alpha[1])-c1)/(alpha[2]-alpha[3]);
   alphap=0.5*(alpha[1]+alpha[3]-c1/c2);
   yp=fun1(a+alphap);
   if(fabs((y[2]-yp)/y[2])>=epsilon)
     {
       fun4(alpha,y,alphap,yp,h);
       fun3(alpha,y,epsilon,h,a);
     }
   else
     {
       if(y[2]<yp)
         printf("The optimal object : alpha*,y*: %f,%f\\n",alpha[2],y[2]);
       else
         printf("The optimal object : alpha*,y*: %f,%f\\n",alphap,yp);
}
}
float fun4(float alpha[],float y[],float alphap,float yp,float h)
{
    if((alphap-alpha[2])*h>0)
      fun5(alpha,y,alphap,yp);
    else
      fun6(alpha,y,alphap,yp);
}
float fun5(float alpha[],float y[],float alphap,float yp)
   {
        if(y[2]>=yp)
          {
            alpha[1]=alpha[2];
            y[1]=y[2];
            alpha[2]=alphap;
            y[2]=yp;
          }
        else
          {
             alpha[3]=alphap;
             y[3]=yp;
      }
   }
float fun6(float alpha[],float y[],float alphap,float yp)
    {
        if(y[2]>=yp)
          {
            alpha[3]=alpha[2];
            y[3]=y[2];
            alpha[2]=alphap;
            y[2]=yp;
          }
        else
          {
             alpha[1]=alphap;
             y[1]=yp;
          }
    }
回复

使用道具 举报

 
您需要登录后才可以回帖 登录 | 立即注册 微信登录

本版积分规则


4威望

132盟币

0关注

0粉丝

4帖子

排行榜
作者专栏
登录后可将在线时长兑换成盟币 ,连续在线 [1] 小时后,每小时 [0.5] 盟币.
×

你已累计兑换次数 0

你已累计兑换积分 0盟币

关注我们:微信订阅号

官方微信

APP下载

全国服务热线:

4000-000-000
Copyright   ©2005-2018  博研网Powered by©Myboyan.com    ( 粤ICP备10062441号 )