机械优化设计一维搜索实验报告
- 格式:doc
- 大小:169.00 KB
- 文档页数:9
《机械优化设计》
实验报告
班级: 机械设计(2)班
姓名:邓传淮
学号:0901102008
1 实验名称:一维搜索黄金分割法求最佳步长
2 实验目的:通过上机编程,理解一维搜索黄金分割法的原理,了解计算机在优化设计中的应用。
3 黄金分割法的基本原理
黄金分割法是用于一元函数f(x)在给定初始区间[a,b]内搜索极小点α*的一种方法。它是优化计算中的经典算法,以算法简单、收敛速度均匀、效果较好而著称,是许多优化算法的基础,但它只适用于一维区间上的凸函数[6],即只在单峰区间内才能进行一维寻优,其收敛效率较低。其基本原理是:依照“去劣存优”原则、对称原则、以及等比收缩原则来逐步缩小搜索区间[7]。具体步骤是:在区间[a,b]内取点:a1 ,a2 把[a,b]分为三段。如果f(a1)>f(a2),令a=a1,a1=a2,a2=a+r*(b-a);如果f(a1) 4实验所编程序框图(1)进退发确定单峰区间的计算框图 (2)黄金分割法计算框图 5 程序源代码 (1)进退发确定单峰区间的程序源代码 #include #include #define f(x) pow(x,4)-3*pow(x,3)-5*pow(x,2)-14*x+46 main() { int k; double x,h,x1,x2,x3; double f1,f2,f3,f; double a,b; x1=0; h=1; x2=x1+h; f1=f(x1); f2=f(x2); if (f1>f2) { h=2*h; x3=x2+h; f3=f(x3); . } else { h=-h; x1=x2; f1=f2; x3=x2+h; f3=f(x3); } printf("x1=%lf,x2=%lf\0",x1,x2); do { x1=x2; x2=x3; f1=f2; f2=f3; x3=x2+h; f3=f(x3); }while(f3 if (h>0) { a=x1; b=x3; } else { a=x3; b=x1; } printf("a=%lf,b=%lf\n",a,b); } (2)黄金分割法的程序源代码 #include #include #define f(x)=pow(x,4)-3*pow(x,3)-5*pow(x,2)-14*x+46 main() { int k; double x,h,x1,x2,x3,c; double f1,f2,f3,f; double a,b; printf("input c:\n"); scanf("%lf",&c); a=1; b=5; x1=b-0.618*(b-a);printf("x1=%lf ",x1); f1=f(x1);printf("f1=%lf ",f1); x2=a+0.618*(b-a);printf("x2=%lf ",x2); f2=f(x2);printf("f2=%lf ",f2); k=0; loop: { if(f1 { b=x2;printf("b=%lf ",b); x2=x1;printf("x2=%lf ",x2); f2=f1;printf("f2=%lf ",f2); x1=a+0.382*(b-a);printf("x1=%lf ",x1); f1=f(x1);printf("f1=%lf ",f1); } else { a=x1;printf("a=%lf ",a); x1=x2;printf("x1=%lf ",x1); f1=f2;printf("f1=%lf ",f1); x2=a+0.618*(b-a);printf("x2=%lf ",x2); f2=f(x2);printf("f2=%lf ",f2); } k=k+1; printf("k=%d\n",k); } if(fabs(b-a { x=0.5*(b+a);printf("x=%lf ",x); f=f(x);printf("f=%lf ",f); } else { goto loop; } getchar(); } 6 程序运行截图