ImageVerifierCode 换一换
格式:DOCX , 页数:78 ,大小:1.05MB ,
资源ID:7105197      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/7105197.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(最优化方法的Matlab实现公式完整版.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

最优化方法的Matlab实现公式完整版.docx

1、最优化方法的最优化方法的 Matlab 实现公式完整版实现公式完整版 第九章 最优化方法的 Matlab 实现 在生活和工作中,人们对于同一个问题往往会提出多个解决方案,并通过各方面的论证从中提取最佳方案。最优化方法就是专门研究如何从多个方案中科学合理地提取出最佳方案的科学。由于优化问题无所不在,目前最优化方法的应用和研究已经深入到了生产和科研的各个领域,如土木工程、机械工程、化学工程、运输调度、生产控制、经济规划、经济管理等,并取得了显著的经济效益和社会效益。用最优化方法解决最优化问题的技术称为最优化技术,它包含两个方面的内容:1)建立数学模型 即用数学语言来描述最优化问题。模型中的数学关系

2、式反映了最优化问题所要达到的目标和各种约束条件。2)数学求解 数学模型建好以后,选择合理的最优化方法进行求解。最优化方法的发展很快,现在已经包含有多个分支,如线性规划、整数规划、非线性规划、动态规划、多目标规划等。9.1 概 述 利用 Matlab 的优化工具箱,可以求解线性规划、非线性规划和多目标规划问题。具体而言,包括线性、非线性最小化,最大最小化,二次规划,半无限问题,线性、非线性方程(组)的求解,线性、非线性的最小二乘问题。另外,该工具箱还提供了线性、非线性最小化,方程求解,曲线拟合,二次规划等问题中大型课题的求解方法,为优化方法在工程中的实际应用提供了更方便快捷的途径。9.1.1 优

3、化工具箱中的函数 优化工具箱中的函数包括下面几类:1最小化函数 表 9-1 最小化函数表 函 数 描 述 fgoalattain 多目标达到问题 fminbnd 有边界的标量非线性最小化 fmincon 有约束的非线性最小化 fminimax 最大最小化 fminsearch,fminunc 无约束非线性最小化 fseminf 半无限问题 linprog 线性课题 quadprog 二次课题 2方程求解函数 表 9-2 方程求解函数表 函 数 描 述 线性方程求解 fsolve 非线性方程求解 fzero 标量非线性方程求解 3最小二乘(曲线拟合)函数 表 9-3 最小二乘函数表 函 数 描

4、述 线性最小二乘 lsqlin 有约束线性最小二乘 lsqcurvefit 非线性曲线拟合 lsqnonlin 非线性最小二乘 lsqnonneg 非负线性最小二乘 4实用函数 表 9-4 实用函数表 函 数 描 述 optimset 设置参数 optimget 5大型方法的演示函数 表 9-5 大型方法的演示函数表 函 数 描 述 circustent 马戏团帐篷问题二次课题 molecule 用无约束非线性最小化进行分子组成求解 optdeblur 用有边界线性最小二乘法进行图形处理 6中型方法的演示函数 表 9-6 中型方法的演示函数表 函 数 描 述 bandemo 香蕉函数的最小化

5、dfildemo 过滤器设计的有限精度 goaldemo 目标达到举例 optdemo 演示过程菜单 tutdemo 教程演示 9.1.3 参数设置 利用 optimset 函数,可以创建和编辑参数结构;利用 optimget 函数,可以获得options 优化参数。optimget 函数 功能:获得 options 优化参数。语法:val=optimget(options,param)val=optimget(options,param,default)描述:val=optimget(options,param)返回优化参数 options 中指定的参数的值。只需要用参数开头的字母来定义参数

6、就行了。val=optimget(options,param,default)若 options 结构参数中没有定义指定参数,则返回缺省值。注意,这种形式的函数主要用于其它优化函数。举例:1 下面的命令行将显示优化参数 options 返回到 my_options 结构中:val=optimget(my_options,Display)2 下面的命令行返回显示优化参数 options 到 my_options 结构中(就象前面的例子一样),但如果显示参数没有定义,则返回值final:optnew=optimget(my_options,Display,final);参见:optimset op

7、timset 函数 功能:创建或编辑优化选项参数结构。语法:options=optimset(param1,value1,param2,value2,.)optimset options=optimset options=optimset(optimfun)options=optimset(oldopts,param1,value1,.)options=optimset(oldopts,newopts)描述:options=optimset(param1,value1,param2,value2,.)创建一个称为 options 的优化选项参数,其中指定的参数具有指定值。所有未指定的参数都设置

8、为空矩阵(将参数设置为表示当 options 传递给优化函数时给参数赋缺省值)。赋值时只要输入参数前面的字母就行了。optimset 函数没有输入输出变量时,将显示一张完整的带有有效值的参数列表。options=optimset(with no input arguments)创建一个选项结构 options,其中所有的元素被设置为。options=optimset(optimfun)创建一个含有所有参数名和与优化函数 optimfun相关的缺省值的选项结构 options。options=optimset(oldopts,param1,value1,.)创建一个 oldopts 的拷贝,用指

9、定的数值修改参数。options=optimset(oldopts,newopts)将已经存在的选项结构 oldopts 与新的选项结构newopts 进行合并。newopts 参数中的所有元素将覆盖 oldopts 参数中的所有对应元素。举例:1下面的语句创建一个称为 options 的优化选项结构,其中显示参数设为iter,TolFun参数设置为 1e-8:options=optimset(Display,iter,TolFun,1e-8)2下面的语句创建一个称为 options 的优化结构的拷贝,改变 TolX 参数的值,将新值保存到 optnew参数中:optnew=optimset(

10、options,TolX,1e-4);3下面的语句返回 options 优化结构,其中包含所有的参数名和与 fminbnd 函数相关的缺省值:options=optimset(fminbnd)4若只希望看到 fminbnd 函数的缺省值,只需要简单地键入下面的语句就行了:optimset fminbnd 或者输入下面的命令,其效果与上面的相同:optimset(fminbnd)参见:optimget 9.1.4 模型输入时需要注意的问题 使用优化工具箱时,由于优化函数要求目标函数和约束条件满足一定的格式,所以需要用户在进行模型输入时注意以下几个问题:1.目标函数最小化 优化函数 fminbnd

11、、fminsearch、fminunc、fmincon、fgoalattain、fminmax 和lsqnonlin 都要求目标函数最小化,如果优化问题要求目标函数最大化,可以通过使该目标函数的负值最小化即-f(x)最小化来实现。近似地,对于 quadprog 函数提供-H和-f,对于 linprog函数提供-f。2.约束非正 优化工具箱要求非线性不等式约束的形式为 Ci(x)0,通过对不等式取负可以达到使大于零的约束形式变为小于零的不等式约束形式的目的,如 Ci(x)0 形式的约束等价于-Ci(x)0;Ci(x)b形式的约束等价于-Ci(x)+b0。3.避免使用全局变量 9.1.5(函数句柄

12、)函数 MATLAB6.0 中可以用函数进行函数调用。函数返回指定 MATLAB函数的句柄,其调用格式为:handle=function 利用函数进行函数调用有下面几点好处:用句柄将一个函数传递给另一个函数;减少定义函数的文件个数;改进重复操作;保证函数计算的可靠性。下面的例子为 humps 函数创建一个函数句柄,并将它指定为 fhandle 变量。fhandle=humps;同样传递句柄给另一个函数,也将传递所有变量。本例将刚刚创建的函数句柄传递给 fminbnd 函数,然后在区间0.3,1上进行最小化。x=fminbnd(humps,0.3,1)x=0.6370 9.2 最小化问题 9.2

13、.1 单变量最小化 9.2.1.1 基本数学原理 本节讨论只有一个变量时的最小化问题,即一维搜索问题。该问题在某些情况下可以直接用于求解实际问题,但大多数情况下它是作为多变量最优化方法的基础在应用,因为进行多变量最优化要用到一维搜索法。该问题的数学模型为:其中,x,x1,和 x2 为标量,f(x)为函数,返回标量。该问题的搜索过程可用下式表达:其中 xk 为本次迭代的值,d 为搜索方向,为搜索方向上的步长参数。所以一维搜索就是要利用本次迭代的信息来构造下次迭代的条件。求解单变量最优化问题的方法有很多种,根据目标函数是否需要求导,可以分为两类,即直接法和间接法。直接法不需要对目标函数进行求导,而

14、间接法则需要用到目标函数的导数。1直接法 常用的一维直接法主要有消去法和近似法两种。(1)消去法 该法利用单峰函数具有的消去性质进行反复迭代,逐渐消去不包含极小点的区间,缩小搜索区间,直到搜索区间缩小到给定的允许精度为止。一种典型的消去法为黄金分割法(Golden Section Search)。黄金分割法的基本思想是在单峰区间内适当插入两点,将区间分为三段,然后通过比较这两点函数值的大小来确定是删去最左段还是最右段,或同时删去左右两段保留中间段。重复该过程使区间无限缩小。插入点的位置放在区间的黄金分割点及其对称点上,所以该法称为黄金分割法。该法的优点是算法简单,效率较高,稳定性好。(2)多项

15、式近似法 该法用于目标函数比较复杂的情况。此时寻找一个与它近似的函数代替目标函数,并用近似函数的极小点作为原函数极小点的近似。常用的近似函数为二次和三次多项式。二次内插涉及到形如下式的二次函数数据拟合问题:其中步长极值为:然后只要利用三个梯度或函数方程组就可以确定系数 a和 b,从而可以确定*。得到该值以后,进行搜索区间的收缩。在缩短的新区间中,重新安排三点求出下一次的近似极小点*,如此迭代下去,直到满足终止准则为止。其迭代公式为:其中 二次插值法的计算速度比黄金分割法的快,但是对于一些强烈扭曲或可能多峰的函数,该法的收敛速度会变得很慢,甚至失败。2间接法 间接法需要计算目标函数的导数,优点是

16、计算速度很快。常见的间接法包括牛顿切线法、对分法、割线法和三次插值多项式近似法等。优化工具箱中用得较多的是三次插值法。三次插值的基本思想与二次插值的一致,它是用四个已知点构造一个三次多项式P3(x),用它逼近函数 f(x),以 P3(x)的极小点作为 f(x)的近似极小点。一般讲,三次插值法比二次插值法的收敛速度要快些,但每次迭代需要计算两个导数值。三次插值法的迭代公式为 其中 如果函数的导数容易求得,一般来说首先考虑使用三次插值法,因为它具有较高的效率。对于只需要计算函数值的方法中,二次插值法是一个很好的方法,它的收敛速度较快,尤其在极小点所在区间较小时尤其如此。黄金分割法则是一种十分稳定的

17、方法,并且计算简单。由于以上原因,Matlab 优化工具箱中使用得较多的方法是二次插值法、三次插值法、二次、三次混合插值法和黄金分割法。9.2.1.2 相关函数介绍 fminbnd 功能:找到固定区间内单变量函数的最小值。语法:x=fminbnd(fun,x1,x2)x=fminbnd(fun,x1,x2,options)x=fminbnd(fun,x1,x2,options,P1,P2,.)x,fval=fminbnd(.)x,fval,exitflag=fminbnd(.)x,fval,exitflag,output=fminbnd(.)描述:fminbnd 求取固定区间内单变量函数的最小

18、值。x=fminbnd(fun,x1,x2)返回区间x1,x2上 fun参数描述的标量函数的最小值 x。x=fminbnd(fun,x1,x2,options)用 options 参数指定的优化参数进行最小化。x=fminbnd(fun,x1,x2,options,P1,P2,.)提供另外的参数 P1,P2 等,传输给目标函数fun。如果没有设置 options 选项,则令 options=。x,fval=fminbnd(.)返回解 x 处目标函数的值。x,fval,exitflag=fminbnd(.)返回 exitflag值描述 fminbnd 函数的退出条件。x,fval,exitfla

19、g,output=fminbnd(.)返回包含优化信息的结构输出。变量:函数的输入变量在表 9-7 中进行描述,输出变量在表 9-8中描述。与 fminbnd 函数相关的细节内容包含在 fun,options,exitflag和 output 等参数中,如表 9-10 所示。表 9-10 参数描述表 参 数 描 述 fun 需要最小化的目标函数。fun函数需要输入标量参数 x,返回 x 处的目标函数标量值 f。可以将 fun函数指定为命令行,如 x=fminbnd(inline(sin(x*x),x0)同样,fun参数可以是一个包含函数名的字符串。对应的函数可以是 M 文件、内部函数或 MEX

20、文件。若 fun=myfun,则 M 文件函数myfun.m 必须右下面的形式。function f=myfun(x)f=.%计算 x 处的函数值。options 优化参数选项。你可以用 optimset 函数设置或改变这些参数的值。options 参数有以下几个选项:Display 显示的水平。选择off,不显示输出;选择iter,显示每一步迭代过程 的输出;选择final,显示最终结果。MaxFunEvals 函数评价的最大允许次数。MaxIter 最大允许迭代次数。TolX x 处的终止容限。exitflag 描述退出条件:0 表示目标函数收敛于解 x 处。0 表示已经达到函数评价或迭代

21、的最大次数。0 表示目标函数不收敛。output 该参数包含下列优化信息:output.iterations 迭代次数。output.algorithm 所采用的算法。output.funcCount 函数评价次数。算法:fminbnd 是一个 M 文件。其算法基于黄金分割法和二次插值法。文献1中给出了实现同样算法的 Fortran 程序。局限性:1目标函数必须是连续的。2fminbnd 函数可能只给出局部最优解。3当问题的解位于区间边界上时,fminbnd 函数的收敛速度常常很慢。此时,fmincon函数的计算速度更快,计算精度更高。4fminbnd 函数只用于实数变量。参见:fminsea

22、rch,fmincon,fminunc,optimset,inline 文献:1 Forsythe,G.E.,M.A.Malcolm,and C.B.Moler,Computer Methods for Mathematical Computations,Prentice Hall,1976.9.2.1.3 应用实例 例一 在区间(0,2)上求函数 sin(x)的最小值:x=fminbnd(sin,0,2*pi)x=4.7124 所以区间(0,2)上函数 sin(x)的最小值点位于 x=4.7124 处。最小值处的函数值为:y=sin(x)y=-1.0000 磁盘中该问题的 M 文件名为 op

23、t21_1.m。例三 对边长为 3m 的正方形铁板,在四个角处剪去相等的正方形以制成方形无盖水槽,问如何剪法使水槽的容积最大?假设剪去的正方形的边长为 x,则水槽的容积为 现在要求在区间(0,1.5)上确定一个 x,使 最大化。因为优化工具箱中要求目标函数最小化,所以需要对目标函数进行转换,即要求 最小化。首先编写 M 文件 opt21_3o.m:function f=myfun(x)f=-(3-2*x).2*x;然后调用 fminbnd 函数(磁盘中 M 文件名为 opt21_3.m):x=fminbnd(opt21_3o,0,1.5)得到问题的解:x=0.5000 即剪掉的正方形的边长为

24、0.5m 时水槽的容积最大。水槽的最大容积计算:y=optim2(x)y=-2.0000 所以水槽的最大容积为 2.0000m3。9.2.2 线性规划 9.2.2.1 基本数学原理 线性规划是处理线性目标函数和线性约束的一种较为成熟的方法,目前已经广泛应用于军事、经济、工业、农业、教育、商业和社会科学等许多方面。线性规划问题的标准形式是:或 写成矩阵形式为:其中,0为 n 维列向量。线性规划的标准形式要求目标函数最小化,约束条件取等式,变量非负。不符合这几个条件的线性模型要首先转化成标准形。线性规划的求解方法主要是单纯形法(Simple Method),该法由 Dantzig于 1947年提出

25、,以后经过多次改进。单纯形法是一种迭代算法,它从所有基本可行解的一个较小部分中通过迭代过程选出最优解。其迭代过程的一般描述为:1 将线性规划化为典范形式,从而可以得到一个初始基本可行解 x(0)(初始顶点),将它作为迭代过程的出发点,其目标值为 z(x(0)。2 寻找一个基本可行解 x(1),使 z(x(1)z(x(0)。方法是通过消去法将产生 x(0)的典范形式化为产生 x(1)的典范形式。3 继续寻找较好的基本可行解 x(2),x(3),使目标函数值不断改进,即z(x(1)z(x(2)z(x(3)。当某个基本可行解再也不能被其它基本可行解改进时,它就是所求的最优解。Matlab 优化工具箱

26、中采用的是投影法,它是单纯形法的一种变种。9.2.2.2 相关函数介绍 linprog函数 功能:求解线性规划问题。数学模型:其中 f,x,b,beq,lb 和 ub 为向量,A 和 Aeq 为矩阵。语法:x=linprog(f,A,b,Aeq,beq)x=linprog(f,A,b,Aeq,beq,lb,ub)x=linprog(f,A,b,Aeq,beq,lb,ub,x0)x=linprog(f,A,b,Aeq,beq,lb,ub,x0,options)x,fval=linprog(.)x,fval,exitflag=linprog(.)x,fval,exitflag,output=lin

27、prog(.)x,fval,exitflag,output,lambda=linprog(.)描述:x=linprog(f,A,b)求解问题 min f*x,约束条件为 A*x 1%调用 fun 函数并要求有两个输出变量。g=.%计算 x 处的梯度值。end 若 Hessian 矩阵也可以求得,并且 options.Hessian 设为on,即,options=optimset(Hessian,on)则 fun函数必须返回解 x 处的 Hessian 对称矩阵 H到第三个输出变量中去。注意,当被调用的 fun函数只需要一个或两个输出变量时(如算法只需要目标函数的值 f和梯度值 g而不需要 He

28、ssian 矩阵 H时),可以通过核对 nargout 的值来避免计算 Hessian 矩阵 function f,g,H=myfun(x)f=.%计算 x 处得函数值。if nargout 1%调用 fun 函数并要求有两个输出变量。g=.%计算 x 处的梯度值。if nargout 2 H=.%计算 x 处的 Hessian 矩阵。end options 优化参数选项。可以通过 optimset 函数设置或改变这些参数。其中有的参数适用于所有的优化算法,有的则只适用于大型优化问题,另外一些则只适用于中型问题。首先描述适用于大型问题的选项。这仅仅是一个参考,因为使用大型问题算法有一些条件。对

29、于 fminunc函数来说,必须提供梯度信息。LargeScale 当设为on时使用大型算法,若设为off则使用中型问题的算法。适用于大型和中型算法的参数:Diagnostics 打印最小化函数的诊断信息。Display 显示水平。选择off,不显示输出;选择iter,显示每一步迭代过程的输出;选择final,显示最终结果。打印最小化函数的诊断信息。GradObj 用户定义的目标函数的梯度。对于大型问题此参数是必选的,对于中型问题则是可选项。MaxFunEvals 函数评价的最大次数。MaxIter 最大允许迭代次数。TolFun 函数值的终止容限。TolX x 处的终止容限。只用于大型算法的

30、参数:Hessian 用户定义的目标函数的 Hessian 矩阵。HessPattern 用于有限差分的 Hessian 矩阵的稀疏形式。若不方便求 fun函数的稀疏 Hessian 矩阵 H,可以通过用梯度的有限差分获得的 H的稀疏结构(如非零值的位置等)来得到近似的 Hessian 矩阵 H。若连矩阵的稀疏结构都不知道,则可以将 HessPattern设为密集矩阵,在每一次迭代过程中,都将进行密集矩阵的有限差分近似(这是缺省设置)。这将非常麻烦,所以花一些力气得到 Hessian 矩阵的稀疏结构还是值得的。MaxPCGIter PCG迭代的最大次数。PrecondBandWidth PCG

31、前处理的上带宽,缺省时为零。对于有些问题,增加带宽可以减少迭代次数。TolPCG PCG 迭代的终止容限。TypicalX 典型 x 值。只用于中型算法的参数:DerivativeCheck 对用户提供的导数和有限差分求出的导数进行对比。DiffMaxChange 变量有限差分梯度的最大变化。DiffMinChange-变量有限差分梯度的最小变化。LineSearchType 一维搜索算法的选择。exitflag 描述退出条件:0 表示目标函数收敛于解 x 处。0 表示已经达到函数评价或迭代的最大次数。0 表示目标函数不收敛。output 该参数包含下列优化信息:output.iteratio

32、ns 迭代次数。output.algorithm 所采用的算法。output.funcCount 函数评价次数。output.cgiterations PCG迭代次数(只适用于大型规划问题)。output.stepsize 最终步长的大小(只用于中型问题)。output.firstorderopt 一阶优化的度量:解 x处梯度的范数。注意:1对于求解平方和的问题,fminunc函数不是最好的选择,用 lsqnonlin 函数效果更佳。2使用大型方法时,必须通过将 options.GradObj 设置为on来提供梯度信息,否则将给出警告信息。算法:大型优化算法 若用户在 fun函数中提供梯度信息

33、,则缺省时函数将选择大型优化算法,该算法是基于内部映射牛顿法的子空间置信域法,理论描述可参见文献8,9。计算中的每一次迭代涉及到用 PCG 法求解大型线性系统得到的近似解。中型优化算法 此时 fminunc函数的参数 options.LargeScale 设置为off。该算法采用的是基于二次和三次混合插值一维搜索法的 BFGS 拟牛顿法。该法通过 BFGS 公式来更新 Hessian 矩阵。通过将 HessUpdate参数设置为dfp,可以用 DFP 公式来求得Hessian 矩阵逆的近似。通过将 HessUpdate 参数设置为steepdesc,可以用最速下降法来更新 Hessian 矩阵。但一般不建议使用最速下降法。缺省时的一维搜索算法,当 options.LineSearchType 设置为quadcubic时,将采用二次和三次混合插值法。将 options.LineSearchT

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1