优化设计编程实例
题目一:使用0.618法计算函数y=x2+2x在区间[3,5]中的最小值。
源程序(c语言):
#include
#define e 0.001
double fun1(double x)
{double y;
y=x*x+2*x;
return y;}
main()
{double a1=3,a2=5,a3,a4,t,c,d;
a3=double(0.618*a1+0.382*a2);
a4=double(0.382*a1+0.618*a2);
while(((a2-a1)/2)>e)
{a3=double(0.618*a1+0.382*a2);
c=fun1(a3);
a4=double(0.382*a1+0.618*a2);
d=fun1(a4);
if(c>d)
{a1=a3;
a3=a4;
a4=double(0.382*a1+0.618*a2);}
else
{a2=a4;
a4=a3;
a3=double(0.618*a1+0.382*a2);}}
t=(a1+a2)/2;
printf("The minimum of y=x*x+2*x in [3,5]is%f.\n",fun1(t));}
题目二:使用二次插值法计算函数y=x-4x-6x-16x+4在区间[-1,6]中的最小值。 源程序(c语言):
#include
#include
float fun(float x)
{float y;
y=pow(x,4)-4*pow(x,3)-6*pow(x,2)-16*x+4;
return y;
}
float fun1(float y,float f1,float f2,float f3) 432
{float p;
p=y+(3.5*(f1-f3))/(2*(f3+f1-2*f2)); return p;
}
void main()
{float a1=-1,a2,a3=6,c,d,g,t; a2=float((a1+a3)/2);
c=fun(a1);
d=fun(a2);
g=fun(a3);
t=fun1(a2,c,d,g);
while(fabs(t-a2)>0.05)
{if(t>d)
{a1=t;
a2=float((a1+a3)/2);
c=fun(a1);
d=fun(a2);
t=fun1(a2,c,d,g);
break;}
else
{a3=a2;
a2=float((a1+a3)/2);
d=fun(a2);
g=fun(a3);
t=fun1(a2,c,d,g);
printf("t is %f",t);}}
printf("when minimum, x is %f\n",a2);}