- 1、本文档共35页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
研究生优化理论各种算法代码及运行结果
机械优化设计 目录:
1.1 进退法 - 3 -
1.1.1进退法的原理和流程图 - 3 -
1.1.2进退法程序代码 - 4 -
1.1.3程序的调试及运行结果 - 5 -
1.2 黄金分割 - 5 -
1.2.1黄金分割法的原理和流程图 - 5 -
1.2.2黄金分割法的程序代码 - 6 -
1.2.3程序的调试及运行结果 - 7 -
1.3 二次插值 - 8 -
1.3.1 二次插值确定搜索区间的原理和流程图 - 8 -
1.3.2二次插值的程序代码 - 8 -
1.3.3程序的调试及运行结果 - 9 -
1.4 牛顿型法 - 10 -
1.4.1牛顿型法的求极值的原理及其流程图 - 10 -
1.4.2牛顿型法的程序代码 - 11 -
1.4.3程序的调试及运行结果 - 13 -
1.5 鲍威尔法 - 14 -
1.5.1鲍威尔法的流程图 - 14 -
1.5.2鲍威尔法的程序代码 - 15 -
1.5.3程序的调试及运行结果 - 17 -
1.6 复合型法 - 17 -
1.6.1复合型法的求极值的原理及其流程图 - 17 -
1.6.2复合型法的程序代码 - 19 -
1.6.3程序的调试及运行结果 - 22 -
1.7 内点惩罚函数法 - 22 -
1.7.1内点惩罚函数法的求极值的原理及其流程图 - 22 -
1.7.2内点惩罚函数法的程序代码 - 23 -
1.7.3程序的调试及运行结果 - 25 -
2.1 圆柱齿轮减速器的优化计算 - 25 -
2.1.1圆柱齿轮减速器优化问题的背景 - 25 -
2.1.2圆柱齿轮减速器的优化设计 - 26 -
2.1.2.1目标函数的确定 - 26 -
2.1.2.2约束条件的确定 - 27 -
2.1.3求解优化问题的程序代码 - 31 -
2.1.4程序的调试及运行结果 - 32 -
3.1体会及建议 - 33 -
附录 - 34 -
(1)fmincon函数 - 34 -
1.1 进退法
1.1.1进退法的原理和流程图
进退法是用来确定搜索区间(包含极小值点的区间)的算法,其理论依据是:为单谷函数(只有一个极值点),且为其极小值点的一个搜索区间,对于任意,如果
图1-1进退法程序框图
,则为极小值的搜索区间,如果,则为极小值的搜索区间。不断重复即可得到所需的区间。
1.1.2进退法程序代码
h=input(请输入步长的值:);
a1=input(请输入a1的值:);
y1=xsf(a1);
a2=h;
y2=xsf(a2);
if y2y1
h=-h;
a3=a1;
y3=y1;
a1=a2;
y1=y2;
a2=a3;
y2=y3;
end
a3=a2+2*h;
y3=xsf(a3);
while y2y3
h=2*h;
a1=a2;
y1=y2;
a2=a3;
y2=y3;
a3=a2+2*h;
y3=xsf(a3);
end
a1
a2
a3
y1
y2
y3
子程序:
function y=xsf(a)
y=a^4-a^2-2*a+5;
在进退法确定根所在的区间里面,我们所取的算例是y=a^4-a^2-2*a+5,并且取
图1-2 . 进退法确定根所在的区间的程序运行结果
1.2 黄金分割
1.2.1黄金分割法的原理和流程图
黄金分割法是建立在区间消去法原理的基础上的试探方法,即在搜索区间[a,b]内适当插入两点、、并计算其函数值。、将区间分成三段。应用函数单谷性质,通过函数值大小的比较,删去其中一段,使搜索区间得以缩短。然后再在保留下来的区间上作同样的处置,如此迭代下去,使搜索区间无限缩小,从而得到极小点的数值近似解。
1.2.2黄金分割法的程序代码
a=input(请输入a的值:)
b=input(请输入b的值:)
e=input(请输入e的值:)
syms s,a,b,i
i=1;
h=0.618;
a1=b-h*(b-a);
y1=hjfg(a1);
a2=a+h*(b-a);
y2=hjfg(a2);
while i==1
switch y1y2
case 1
a=a1;
a1=a2;
y1=y2;
a2=a+h*(b-a);
y2=hjfg(a2);
if abs((y2-y1)/y2)e
i=0
end
case 0 图1-3 黄金分割法程序框
文档评论(0)