资源描述:
《机械优化设计实验报告(浙江理工大学)》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、机械优化设计实验报告班级:XXXX姓名:XX学号:XXXXXXXXXXX一、外推法1、实验原理常用的一维优化方法都是通过逐步缩小极值点所在的搜索区间来求最优解的。一般情况下,我们并不知道一元函数f(X)极大值点所处的大概位置,所以也就不知道极值点所在的具体区域。由于搜索区间范围的确定及大小直接影响着优化方法的收敛速度及计算精度。因此,一维优化的第一步应首先确定一个初始搜索区间,并且在该区间内函数有唯一的极小值存在。该区间越小越好,并且仅存在唯一极小值点。所确定的单股区间应具有如下性质:如果在[α1,α3]区间内任取一点α2,
2、,α1<α2<α3或α3<α2<α1,则必有f(α1)>f(α2)#include#definef(x)3*x*x-8*x+9//定义函数intmain(){doublea0,a1,a2,a3,f1,f2,f3,h
3、;printf(“a0=”,a0);//单谷区间起始点scanf(“%lf”,&a0);printf(“h=”,h);//起始的步长scanf(“%lf”,&h);a1=a0;a2=a1+h;f1=f(a0);f2=f(a2);if(f1>f2)//判断函数值的大小,确定下降方向{a3=a2+h;f3=f(a3);}else{h=-h;a3=a1;f3=f1;a1=a2;f1=f2;a2=a3;f2=f3;a3=a2+h;f3=f(a3);}while(f3<=f2)//当不满足上述比较时,说明下降方向反向,继续进行判断{h
4、=2*h;a1=a2;f1=f2;a2=a3;f2=f3;a3=a2+h;f3=f(a3);}printf(“a1=%lf,a3=%lf”,a1,a3);printf(“[a1,a3]=[%lf,%lf]”,a1,a3);//输出区间}1、调试结果2、总结与讨论1)当写成voidmain时会出现如下警告改成intmain警告消失。一、黄金分割法1、实验原理在外推法确定了单股区间[α1,α3]的基础上去其中对称两点α2,α4,且满足α2=α3-λα3-α1α4=α1+λ(α3-α1)式中,λ位0~1的缩小系数。计算点α
5、2,α4的函数值,记f2=f(α2),f4=f(α4),并比较他们的大小,可能存在如下三种情况:(1)f2f4:此时必有极小值点α∈[α2,α3],应舍去区间[α1,α2],保留的区间长度为λl,缩小后的新区间为[α2,α3];(3)f2=f4:此时必有极小值点α∈[α2,α4],应舍去区间[α1,α2]或[α4,α3]。经过比较取舍后,缩小后所得的新区建长度均为λl,将区间端点重新命名为[
6、α1,α3],就可以进行新一轮的比较,如此循环。2、实验工具C-Free3.5软件3、程序调试#include#include#definef(x)3*x*x-8*x+9#definev0.618//黄金分割点intmain(){floata0,a1,a2,a3,a4,f0,f1,f2,f3,f4,b;//b收敛精度puts("单谷区间a1=");scanf("%f",&a1);puts("单谷区间a3=");scanf("%f",&a3);puts("收敛精度b=");scanf("%.4
7、f",b);a2=a3-v*(a3-a1);f2=f(a2);a4=a1+v*(a3-a1);f4=f(a4);do//do-while循环,知道满足条件退出循环{if(f2>f4)//判断函数值大小,缩小比较区间{a1=a2;a2=a4;f2=f4;a4=a1+v*(a3-a1);f4=f(a4);}else{a3=a4;a4=a2;f4=f2;a2=a3-v*(a3-a1);f2=f(a2);}}while(abs(a3-a1)>b);a0=(a3+a1)/2;f0=f(a0);printf("a0=%lf",a0)
8、;//输出结果printf("f0=%lf",f0);}1、调试结果2、总结与讨论1)要选择合适的循环嵌套语句,实现循环的同时判断;2)在执行puts("单谷区间a1=");scanf("%f",&a1);puts("单谷区间a3=");scanf("%f",&a3);puts("收敛