上交一维搜索法.docx
- 文档编号:29384567
- 上传时间:2023-07-22
- 格式:DOCX
- 页数:11
- 大小:104.57KB
上交一维搜索法.docx
《上交一维搜索法.docx》由会员分享,可在线阅读,更多相关《上交一维搜索法.docx(11页珍藏版)》请在冰豆网上搜索。
上交一维搜索法
一、一维黄金分割法
F(X)=3*x*x*x-8*x+9,初始点:
0,初始步长:
0.1,终止迭代精度e:
0.01,求极小值点和极小值
程序:
#include
#include
#definef(x)3*x*x*x-8*x+9
main()
{
doublef1,f2,f3,t,x1,x2,x3,h,a,b,Y1,Y2,A,A1,A2,e=0.01;
printf("请输入x1,h:
");
scanf("%lf,%lf",&x1,&h);
f1=f(x1);
x2=x1+h;
f2=f(x2);
if(f2>=f1)
{
h=-h;
t=x1;x1=x2;x2=t;
t=f1;f1=f2;f2=t;
x3=x2+h;
f3=f(x3);
}
else
{
h=2*h;
x3=x2+h;
f3=f(x3);
}
while(f2>f3)
{
x1=x2;
x2=x3;
f2=f(x3);
x3=x2+h;
f3=f(x3);
}
a=x1 x1: x3; b=x1>x3? x1: x3; printf("[%f,%f]\n",a,b); A1=b-0.618*(b-a);Y1=f(A1); A2=a+0.618*(b-a);Y2=f(A2); do{ if(Y1>=Y2) { a=A1; A1=A2; Y1=Y2; A2=a+0.618*(b-a); Y2=f(A2); } else { b=A2; A2=A1; Y2=Y1; A1=a+0.382*(b-a); Y1=f(A1); } } while((a-b)>=e||(a-b)<=-e); A=(a+b)*0.5; printf("A=%lf\n",A); printf("f(A)=%lf\n",f(A)); printf("a=%f,b=%f",a,b); } 运行结果: 二、多维进退法和黄金分割法 求目标函数f(X)=60-10X1-4X2+X1*X1+X2*X2-X1*X2的极小值和极小值点,初始步长为h=0.1,终止迭代精度为e=0.05,初始点为[0,0]T,,方向为S=[0.8,0.6]T。 程序: #include #include #defineN2 floatf(floata[N]); voidhj(); voidjt(); floata0[N],d[N],a[N],b[N],a1[N],a3[N],h0,e; floatmain() { inti; printf("请输入初始点a0[N]\n"); for(i=0;i { scanf("%f",&a0[i]); } printf("请输入搜索方向d[n]\n"); for(i=0;i { scanf("%f",&d[i]); } printf("请输入步长h0和精度e\n"); scanf("%f,%f",&h0,&e); jt(); hj(); } floatf(floata[N]) { floaty; y=60-10*a[0]-4*a[1]+a[0]*a[0]+a[1]*a[1]-a[0]*a[1]; returny; } voidhj() { inti; floata2[N],f1,f2,d0,f0; for(i=0;i { a1[i]=b[i]-0.618*(b[i]-a[i]); } for(i=0;i { a2[i]=a[i]+0.618*(b[i]-a[i]); } f1=f(a1); f2=f(a2); do { if(f1>=f2) { for(i=0;i { a[i]=a1[i]; a1[i]=a2[i]; a2[i]=a[i]+0.618*(b[i]-a[i]); } f2=f(a2); f1=f(a1); } else { for(i=0;i { b[i]=a2[i]; a2[i]=a1[i]; a1[i]=b[i]-0.618*(b[i]-a[i]); } f1=f(a1); f2=f(a2); } d0=float(sqrt((b[0]-a[0])*(b[0]-a[0])+(b[1]-a[1])*(b[1]-a[1]))); }while((d0>=e)); for(i=0;i { a0[i]=(a[i]+b[i])/2; } f0=f(a0); printf("极小值点a0[]和极小值f0分别是: \n"); for(i=0;i { printf("a0[i]=%f\n",a0[i]); } printf("f0=%f\n",f0); } voidjt() { inti; floata2[N],t1[N],f1,f2,f3,h; for(i=0;i { a1[i]=a0[i]; } h=h0; for(i=0;i { a2[i]=a1[i]+d[i]*h; } f1=f(a1); f2=f(a2); if(f2>=f1) { h=-h; for(i=0;i { t1[i]=a1[i]; a1[i]=a2[i]; a2[i]=t1[i]; } f1=f(a1); f2=f(a2); } else h=2*h; for(i=0;i { a3[i]=a2[i]+d[i]*h; } f3=f(a3); while(f2>=f3) { for(i=0;i { a1[i]=a2[i]; } f1=f(a1); for(i=0;i { a2[i]=a3[i]; } f2=f(a2); for(i=0;i { a3[i]=a2[i]+d[i]*h; } f3=f(a3); } if(h<0) { for(i=0;i { b[i]=a1[i]; a[i]=a3[i]; } } else { for(i=0;i { b[i]=a3[i]; a[i]=a1[i]; } } for(i=0;i printf("\na[i]=%f\nb[i]=%f\n",a[i],b[i]); } 运行结果: 优化设计作业 学院: 机仪学院 班级: 研1404班 姓名: 杨政威 学号: 2140220097
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 上交 搜索