工学院课程设计报告课程名称:优化计算方法课程设计指导老师:班级:交运174班姓名:学号:学期:20 18 —20 19 学年第 2 学期南京农业大学工学院教务处印目录1、抛物线法与黄金分割法的比较 (2)1.1黄金分割法原理 (2)1.2抛物线法原理 (3)1.3黄金分割与抛物线法求解问题 (4)1.4使用matlab求解过程 (4)1.5编写与运行制图程序 (6)2、matlab优化工具箱的使用 (7)2.1求解一个约束非线性问题 (7)2.2运行优化 (9)2.2.1使用优化应用程序最小化Rosenbrock的功能 (9)2.3最小化Rosenbrock在命令行中的功能: (10)3、Matlab工具箱——Fmincon函数的使用 (10)3.1算法简介 (10)3.2.算法相关句法 (11)3.3例子——非线性约束 (12)3.4利用fmincon函数解决实际问题 (14)3.4.1编程过程 (14)3.5结果分析 (15)3.5.1运行行优化 (15)优化计算方法课程设计交通运输专业 曹福 指导老师 朱磊1、抛物线法与黄金分割法的比较1.1黄金分割法原理黄金分割法也称为0.618法,其基本思想是:通过试探点函数值的比较,使包含极小点的搜索区间不断缩小,该方法仅需要计算函数值,使用范围广,使用方便。
设)()(k k sd x f s +=Φ式中:)(s Φ为搜索区间[0a ,0b ]上的单峰函数。
在第i 次迭代时,搜索区间为[i a ,i b ],取两个试探点为i p ,i q ∈[i a ,i b ]且i p <i q ,计算)(i p Φ和)(i q Φ。
根据单峰函数的性质,可能会出现如下两种情况之一: (1) 若)(i p Φ≤)(i q Φ,则令i i a a =+1,i i q b =+1; (2) 若)(i p Φ>)(i q Φ,则令i i p a =+1,i i b b =+1。
要求两个试探点i p 和i q 满足下述两个条件: (1) [i a ,i q ]与[i p ,i b ]的长度想同,即i b -i p =i q -i a ; (2) 区间长度的缩短率相同,即1+i b -1+i a =t (i b -i a )。
从而得i p =i a +(1-t )(i b -i a ),i q =i a +t (i b -i a )考虑情况(1),此时新的搜索区间为[1+i a ,1+i b ]=[i a ,i b ]。
为了进一步缩短搜索区间,取新的试探点1+i p 和1+i q ,得到1+i q =1+i a +2t (i b -i a )。
若令2t =1-t ,t >0,则1+i q =i a +(1-t )(i b -i a )=i p这样新的试探点1+i q 就不用重新计算。
类似的,对于情况(2),也有相同的结论。
解方程2t =1-t ,t >0得到区间长度缩短率为t =0.61821-5≈ 1.2抛物线法原理抛物线法也叫二次插值法,其基本思想是:在搜索区间中不断地使用二次多项式去近似目标函数,并逐步用插值多项式的极小点去逼近线搜索问题)()(min 0k k s sd x f s +=Φ>的极小点。
设已知三点0s ,h s s +=01,h s s 202+= ()0>h处的函数值0Φ,1Φ,2Φ,且满足01Φ<Φ,21Φ<Φ上述条件保证了函数在区间[0s ,2s ]上是单峰函数。
则满足上述条件的二次拉格朗日插值多项式为2210122002212))(())((2))(()(Φ--+Φ---Φ--=h s s s s h s s s s h s s s s s q )(s q 的一阶导数为22011220022122222)('Φ--+Φ---Φ--=hs s s h s s s h s s s s q 令)('s q =0,解得hshshshshssssssss+=Φ+Φ-ΦΦ+Φ-Φ+=Φ+Φ-ΦΦ++Φ+-Φ+=Φ+Φ-ΦΦ++Φ+-Φ+=2121212121211221)2(2)43()2(2)2()22(2)32()2(2)()(2)(式中)2(2)43(21210>Φ+Φ-ΦΦ+Φ-Φ=hh又因为)(sq的二阶导数为22)(''221222120>Φ+Φ-Φ=Φ+Φ-Φ=hhhhsq故)(sq为凸二次函数,从而m ins是)(sq的全局极小点。
1.3黄金分割与抛物线法求解问题利用抛物线法和黄金分割法求函数()xxx tan232-=Φ在[0,1]上的极小点。
取容许误差-410=ε,-510=δ。
1.4使用matlab求解过程步骤一:找到目标函数、梯度、黄金分割和抛物线的.m文件(如图1)图1 目标函数、梯度、黄金分割和抛物线程序步骤二:导入目标函数、梯度、黄金分割和抛物线程序(如图2)图2步骤三:输入指令运行所得结果phi=@(x)3*x^2-2*tan(x);[i,s,phis,ds,dphi,G]=golds(phi,0,1,1e-4,1e-5)%黄金分割法;i =21s =0.3895phis =-0.3658ds =6.6107e-05dphi =2.7880e-09G =0 0.3820 0.6180 1.00000 0.2361 0.3820 0.61800.2361 0.3820 0.4721 0.61800.2361 0.3262 0.3820 0.47210.3262 0.3820 0.4164 0.47210.3262 0.3607 0.3820 0.41640.3607 0.3820 0.3951 0.41640.3820 0.3951 0.4033 0.41640.3820 0.3901 0.3951 0.40330.3820 0.3870 0.3901 0.39510.3870 0.3901 0.3920 0.39510.3870 0.3889 0.3901 0.39200.3870 0.3882 0.3889 0.39010.3882 0.3889 0.3894 0.39010.3889 0.3894 0.3896 0.39010.3889 0.3892 0.3894 0.38960.3892 0.3894 0.3895 0.38960.3894 0.3895 0.3895 0.38960.3894 0.3894 0.3895 0.38950.3894 0.3895 0.3895 0.38950.3895 0.3895 0.3895 0.3895>> phi=@(x)3*x^2-2*tan(x);[i,s,phis,ds,dphi,S]=qmin(phi,0,1,1e-4,1e-5)%抛物线法;i =5s =0.3895phis =-0.3658ds =5.9671e-05dphi =7.2670e-09S =0 0.5069 0.3938 0.3895 0.3895步骤四:分析结果根据以上运算结果得到黄金分割法和抛物线法求单变量函数极小点的数值结果的对比如下方法参数迭代次数(i)极小点(*s)极小值(()*Φs)iiab-的值()()iiabΦ-Φ的值黄金分割法210.3895-0.36586.6107 ×10-52.7880 ×10-9抛物线法 5 0.3896 -0.3685 5.9671×10-5 7.2670×10-9表1结果对比1.5编写与运行制图程序golds函数中:function [i,s,phis,ds,dphi,G,Y]=golds(phi,a,b,epsilon,delta)%在golds函数的输出列表中加入矩阵Y。
if(phip<=phiq)b=q; phib=phiq; q=p; phiq=phip;h=b-a; p=a+(1-t)*h; phip=feval(phi,p);Y(i,:)=[i,phip];elsea=p; phia=phip; p=q; phip=phiq;h=b-a; q=a+t*h; phiq=feval(phi,q);Y(i,:)=[i,phiq];end%在循环体中,把第i次迭代的最优解以及i本身的值分别赋给矩阵Y的第2和第1列。
ds=abs(b-a); dphi=abs(phib-phia);plot(Y(:,1),Y(:,2),'--');hold on;%以矩阵Y第1列元素为自变量,第2列元素为因变量,线型为“--”,绘制函数图像,并保持函数图像持续显示。
qmin函数中:在qmin函数输出列表中也加入矩阵Y。
bars=s0+barh;barphi=feval(phi,bars);Y(i,:)=[i,barphi];plot(Y(:,1),Y(:,2));lege nd('golds','qmin');%在循环体中,把第i次迭代的最优解以及i本身的值分别赋给矩阵Y的第2和第1列。
以矩阵Y第1列元素为自变量,第2列元素为因变量,绘制函数图像。
并添加图例以示区别。
结果分析:每次迭代得到的目标函数值可以画成折线图表示,用不同的方法求解问题得到的折线图也不一样,下图将两种方法得到的折线合并到一张图中(如图2):图2抛物线法收敛速度快,总的迭代次数为5次,第1次次迭代目标函数值下降的快,之后的迭代目标函数值下降速度缓慢。
黄金分割法收敛速度慢,迭代次数为21次,前4次迭代的目标函数值波动,后基本接近极小值,并维持平衡。
2、matlab优化工具箱的使用2.1求解一个约束非线性问题典型优化问题此示例显示了如何使用优化工具箱求解器解决受约束的非线性问题。
该示例演示了典型的工作流程:创建目标函数、创建约束、解决问题和检查结果。
问题表述:罗森布鲁克的功能考虑最小化罗森布鲁克函数的问题f(x)=100(x(2)−x(2)^1)^2+(1−x(1))2,在单位圆盘上,即半径为1的圆盘以原点为中心。
换句话说,找到x,使函数f(x)在x(1)^2+x(2)^2≤1的集合上最小化。
这个问题是具有非线性约束的非线性函数的最小化。
注意:罗森布鲁克函数是最优化中的标准测试函数。
它在[1,1]点处具有唯一的最小值0。
对于一些算法来说,找到最小值是一个挑战,因为函数在一个深深弯曲的山谷中有一个浅的最小值。
这个问题的解决方案不在点[1,1],因为该点不满足约束条件。
该图显示了单位圆盘中罗森布鲁克函数的两个视图。
垂直轴是对数刻度的;换句话说,该图显示了log(1+f(x))。