2019年matlab优化工具箱的使用_第1页
2019年matlab优化工具箱的使用_第2页
2019年matlab优化工具箱的使用_第3页
2019年matlab优化工具箱的使用_第4页
2019年matlab优化工具箱的使用_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、优化工具箱的使用MATLAB 的优化工具箱提供了各种优化函数,这些优化函数可以通过在命令行输入相应的函数名加以调用; 此外为了使用方便, MA TLAB 还提供了图形界面的优化工具( GUI Optimization tool )。1 GUI 优化工具GUI 优化工具的启动有两种启动方法:( 1)在命令行输入 optimtool ;(2) 在MATLAB主界面单击左下角的"Start”按钮,然后依次选择"ToolboxesOptimization宀OptimizationGUI 优化工具的界面界面分为三大块:左边(Problem Setup and Results)为优化问

2、题的描述及计算结果显示;中间(Options)为优化选项的设置;右边(Quick Reference)为帮助。为了界面的简洁,可以单击右上角"<<”、“>>”的按钮将帮助隐藏或显示。1、优化问题的描述及计算结果显示此板块主要包括选择求解器、目标函数描述、约束条件描述等部分。 选择合适的求解器以及恰当的优化算法,是进行优化问题求解的首要工作。Solver:选择优化问题的种类,每类优化问题对应不同的求解函数。Algorithm :选择算法,对于不同的求解函数,可用的算法也不同。Problem 框组用于描述优化问题,包括以下内容:Objective function

3、: 输入目标函数。Derivatives: 选择目标函数微分(或梯度)的计算方式。Start point: 初始点。Constraints 框组用于描述约束条件,包括以下内容:Linear inequalities: 线性不等式约束,其中 A 为约束系数矩阵, b 代表约束向量。Linear equalities: 线性等式约束,其中 Aeq 为约束系数矩阵, beq 代表约束向量。Bounds: 自变量上下界约束。Nonlinear Constraints function; 非线性约束函数。Derivatives: 非线性约束函数的微分(或梯度)的计算方式。Run solver and v

4、iew results 框组用于显示求解过程和结果。(对于不同的优化问题类型, 此板块可能会不同, 这是因为各个求解函数需要的参数个数不一样, 如 Fminunc函数就没有 Constraints 框组。)2、优化选项( Options )Stopping criteria: 停止准则。Function value check: 函数值检查。User-supplied derivatives:用户自定义微分(或梯度) 。Approximated derivatives:自适应微分(或梯度) 。Algorithm settings: 算法设置。Inner iteration stopping c

5、riteria: 内迭代停止准则。Plot function: 用户自定义绘图函数。Output function: 用户自定义输出函数。Display to command window: 输出到命令行窗口。 对于不同的优化问题类型,此板块也会不同,3、帮助( Quick Reference )每选择一个函数求解器,帮助部分都有对这个函数的功能说明,同时还会给出相应的各个输入项说明。GUI 优化工具的使用步骤( 1)选择求解器 Solver 和优化算法。 (2)选定目标函数。(3)设定目标函数的相关参数。(4)设置优化选项。(5)单击"Start”按钮,运行求解。( 6)查看求解器

6、的状态和求解结果。( 7)将目标函数、选项和结果导入 / 导出。(在菜单文件中寻找)GUI 优化工具的应用实例1、无约束优化( fminunc 求解器) fminunc 求解器可用的算法有两种: ? Large scale (大规模算法) ? Medium scale (中等规模算法) 对于一般问题,采用中等规模算法即可。例 1 :用优化工具求 f x2x2 4x 6 的极小值,初始点取 x=0。解:首先在当前 MA TLAB的工作目录下建立目标函数文件文件:function y= FunUnc1(x)% function 必须为小写,如果 F 为大写则不行y=xA2+4*x-6;%平方符号输

7、入时用键盘上数字 6 上的符合,否则错误然后启动优化工具:在Solver下拉选框中选择fminunc ;Algorithm 下拉选框中选择 Medium scale ;目标函数栏输入FunUnc1 ;%运算时输入函数不知什么原因老有错误,直接输入目标函数却没有错误初始点输入0,其余参数默认;单击"Start”按钮运行。从求解结果可以看出,函数的极小值为-10,且在x=-2时取到,而且从 Current iteration框可以看出迭代的步数。对于函数形式比较简单的情况,可以直接输入目标函数,而不用建立目标函数文件,在目标函数栏中直接输入 (x) xA2+4*x-6,也可求出结果。此题

8、能否用进退法和黄金分割法(或二次插值法)求解吗?不能,要用进退法或黄金分割法得自己先编程序,然后才能调用这样的函数。2、无约束优化(fminsearch求解器)fminsearch求解器也可用来求解无约束优化问题,它有时候能求解fminunc不能解决的问题。例2:用优化工具求f x x2 3x 2的极小值,初始点取x=-7,比较fminunc和fminsearch求出的结果。解:通过数学计算,可以得到本例中的极小点有两个x1=1,x2=2。启动优化工具:在Solver下拉选框中选择fminunc ;Algorithm 下拉选框中选择 Medium scale ;目标函数栏输入(x)abs(xA

9、2-3*x+2);初始点输入-7,其余参数默认;单击"Start”按钮运行。Fminunc求得的结果为x=,显然数值不对,它是未加绝对值时函数f xx2 3x 2的极小值。然后在Solver下拉选框中选择fminsearch ;Algorithm 下拉选框中选择 Medium scale ;目标函数栏输入(x)abs(xA2-3*x+2);初始点输入-7,其余参数默认;单击"Start”按钮运行。fminsearch求得的结果为x=2,显然数值是对的。可为什么不能求出数值x=1呢,因为此时的函数值也是最小的。由此可得结论:对于非光滑优化问题Fminunc可能求不到正确的结果

10、,而fminsearch却能很好地胜任这类问题的求解。2 MATLAB 优化工具箱在一维优化问题中的应用应用 fminbnd 函数在 MA TLAB 中, fminbnd 函数可用来求解一维优化问题,其调用格式为:(1) x=fminbnd(fun,x1,x2);%求函数fun在区间(x1,x2)上的极小值对应的自变量值。(2) x=fminbnd(fun,x1,x2,options);% 按options结构指定的优化参数求函数fun在区间(x1,x2)上的极小值对应的自变量值,而 options 结构的参数可以通过函数 optimset 来设置,其中 options 结构中的字段如下:Di

11、splay 设置结果的显示方式:off不显示任何结果;iter显示每步迭代后的结果;final只显示最后的结果; n otify只有当求解不收敛的时候才显示结果。Fu nValCheck检查目标函数值是否可接受:On当目标函数值为复数或NaN时显示出错信息;Off 不显示任何错误信息。MaxFunEvals 最大的目标函数检查步数。MaxIter 最大的迭代步数。OutputFcn 用户自定义的输出函数,它将在每个迭代步调用。PlotFcns 用户自定义的绘图函数。TolX 自变量的精度。(3) x,fval= fminbnd(.);%此格式中的输出参数 fval 返回目标函数的极小值。( 4

12、) x,fval,exitflag= fminbnd(.);%此格式中的输出参数 exitflag 返回函数 fminbnd 的求解状态(成功或失败),说明如下:exitflag=1 fminbnd 成功求得最优解,且解的精度为 TolX;exitflag=0 由于目标函数检查步数达到最大或迭代步数达到最大值而推出。exitflag=-1 用户自定义函数引起的退出。exitflag=-2边界条件不协调(x1>x2)。( 5) x,fval,exitflag,output= fminbnd(.);%此格式中的输出参数output 返回函数 fminbnd 的求解信息(迭代次数、所用算法等)

13、 ,说明如下:output 结构中的字段:: 优化算法: 优化迭代步数: 目标函数检查步数退出信息例 1: 用 fminbnd 求函数 f xx4 x2 x 1在区间 -2,1 上的极小值。解:在 MA TLAB 命令窗口输入>>x,fval,exitflag,output= fminbnd(A4-xA2+x-1 '-2,1)所得结果为x =fval =exitflag =1output = iterations: 11%funcCount: 12%迭代次数为 11 次函数计算了 12次algorithm: 'golden section search, parab

14、olic interpolation' % 抛物线算法求本例函数的极小值message: 1x112 charfminbnd 用了黄金分割法和要查看结果的精度,可以接着在 MA TLAB 命令窗口中输入>>可得如下信息ans =Optimization terminated:the current x satisfies the termination criteria using of说明求得结果的精度为 , 如果想提高精度,可以通过 option 结构来指定,在>>opt=optimset( TolX ' ,;>>format long;

15、>>x,fval,exitflag,output= fminbnd(xA4-xA2+x-1 ',-2,1,opt)所得结果为x =fval =exitflag =1output = iterations: 11funcCount: 12algorithm: 'golden section search, parabolic interpolation'message: 1x112 char这样求得的结果 x 就有了的精度。为了理解 fminbnd 的求解原理,将每一步的迭代过程打印出来,在 MA TLABMATLAB 命令窗口输入命令窗口中输入>>

16、; opt=optimset(display ', ' iter ');>>x,fval,exitflag,output= fminbnd(A4-xA2+x-1 ',-2,1,opt)所得结果为Func-count x f(x) Procedure1initial2golden3golden4parabolic5parabolic6parabolic7golden8parabolic9parabolic10parabolic11parabolic12parabolicOptimization terminated:the current x sati

17、sfies the termination criteria using ofx =fval =exitflag =1output = iterations: 11funcCount: 12algorithm: 'golden section search, parabolic interpolation'message: 1x112 char分析迭代过程可发现, fminbnd 首先产生一个迭代的初始点, 经过简单的计算可以发现, 这个初始点是区间的 黄金分割点(=-2+ () * (1+2),接着再用黄金分割法迭代,直到相连两步迭代得到的f(x)相差不大时,此时用二次插值法

18、迭代一步,如果用二次插值法得到的估计点可以接受的话(和前次黄金分割法得到的f(x)相差不大),则再用二次插值法迭代,如果相连两次二次插值法迭代得到的f(x)相差不大,且自变量的差别很小,则继续直到满足精度要求,否则换用黄金分割法。x2例 2:用 fminbnd 求函数 f x e x x sinx 在区间-10,10上的极小值。解:在 MA TLAB 命令窗口中输入>>x,fval,exitflag= fminbnd( exp(-xA2)*(x+sin(x) ',-10,10)所得结果为x =fval =exitflag =12函数f x e x x sinx在区间-10,

19、10上的图形如图所示,在此区间上函数有两个极值点,一个极大值, 一个极小值,函数 fminbnd成功求得极小值点。例 3:用 fminbnd 求函数 f xsin(2x 1) 3sin(4x 3) 5sin(6x 5)在区间-4,4上的极小值。解:在MATLAB命令窗口中输入>>x,fval= fminbnd( si n(2*x+1)+3*si n(4*x+3)+5*si n(6*x+5)'-4,4)所得结果为x =fval =若在MATLAB命令窗口中输入>>x,fval,exitflag= fminbnd(si n(2*x+1)+3*si n(4*x+3)+

20、5*si n(6*x+5)',-4,4)x =fval =exitflag =1例4:用fminbnd求函数f x1 1(x 2)2 33(x 5)242一 在区间-8,8上的极小值。2(x 1)2 1x =解:在MATLAB命令窗口中输入>>x,fval= fminbnd(-1/(x-2)A2+3)-1/(3*(x-5)A2+4)-1/(2*(x-1)A2+1)'-8,8) 所得结果为x =fval =例5:用fminbnd求函数f x x 1 x2 x 2在区间-2,2上的极小值。解:在MATLAB命令窗口中输入>>x,fval= fminbnd(

21、abs(x+1)+xA2+x-2 '-2,2)所得结果为fval =应用fminsearch 函数fminsearch函数的主要功能是求多变量的极值问题,当然也就可以求单变量极值问题。例:用fminsearch函数求函数f x x4 x2 x 1的极小值。xA4-xA2+x-1 '解:在MATLAB命令窗口中输入>>x,fval,exitflag,output= fmin search(所得结果为x = fval = exitflag =1output =iterati ons: 24fun cCou nt: 48algorithm: 'Nelder-Mea

22、d simplex direct search'message: 1x196 char3 MATLAB优化工具箱在无约束优化问题中的应用应用fminsearch 函数在MATLAB中,fminsearch函数可用来求解无约束多维极值问题,其调用格式为(1) x= fminsearch(fun,x0):从起始点x0出发,求出fun的一个局部极小点;(2) x= fminsearch(fun,x0,options):按options结构指定的优化参数求函数fun的极小点,而 options结构的参数可以通过函数 optimset来设置,options结构中的各个字段及其含义如表所示;字段说

23、明Display设置结果的显示方式:off不显示任何结果;iter显示每步迭代后的结果;final只显示取后的结果;n otify只有当求解不收敛的时候才显示结果。Fun ValCheck检查目标函数值是否可接受:On当目标函数值为复数或 NaN时显示出错信息;Off 不显示任何错误信息。MaxF un Evals最大的目标函数检查步数MaxIter最大的迭代步数OutputFc n用户自定义的输出函数,它将在每个迭代步调用PlotFcns用户自定义的绘图函数,它将在每个迭代步调用TolFu n目标函数值的精度TolX自变量的精度。(4) x,fval,exitflag= fminsearch

24、():此格式中的输出参数exitflag返回函数fminsearch的求解状态(成功或失败),其取值如表所示。exitflag说明1fminbnd成功求得最优解,且解的精度为TolX0由于目标函数检查步数达到最大或迭代步数达到最大值而退出。-1用户自定义函数引起的退出(5) x,fval,exitflag,output= fminsearch():此格式中的输出参数 output返回函数fminsearch的求解信息(迭代次数、所用算法等),其字段及其含义如表所示:Output结构中的字段说明优化算法优化迭代步数目标函数检查步数退出信息例1 :用fminsearch函数求解无约束多维函数f x

25、 sin % sin x2的极小值。解:在MATLAB命令窗口中输入%建立函数>>fx=(x)s in (x(1)+si n(x (2);>>xv,fv= fmin search(fx,0,0)所得结果为xv = fv =2一的极小值。2 x2 15例2:用fminsearch函数求解无约束多维函数 f x解:显然,上式的极值点为(2, -1),最小值为-2/15。在MA TLAB 命令窗口中输入>>fx=(x)-1/(x(1)-2)A2+3)-1/(2*(x(2)+1)A2-5);>>xv,fv= fmin search(fx,0,0)所得结果

26、为xv = fv =为了看清楚fminsearch函数的单纯型搜索过程,采用optimset函数设置options结构,将display字段设为iter,以显示每次迭代的信息。在 MA TLAB 命令窗口中输入>>opt=optimset( display ', 'iter ');>>xv,fv= fminsearch(fx,0,0,opt)所得结果为IterationFunc-countmin f(x)Procedure0113initial simplex %初始单纯型25expand %扩展37expand49expand511expand

27、613expand715expand817expand919expand1021expand1123expand1225expand1327expand1429expand1531expand1633expand1735reflect %反射1836reflect1938contract inside%压缩2040contract inside2141reflect2243contract inside2345contract outside2447contract inside2549contract inside2651reflect2753contract inside2855expan

28、d2957expand3059expand3161expand3263expand3365expand3466reflect3568expand3669reflect3771expand3873expand3975expand4077expand4179expand4281reflect4382reflect4484con tract in side4586con tract in side4688con tract in side4790reflect4892con tract in side4994con tract in side5096con tract in side5198con

29、tract in side52100con tract outside53102con tract in side54104con tract outside55106con tract in side56108con tract in side57110con tract outside58112con tract in side59114con tract in side60116con tract in side61118con tract in side62120con tract in side63121reflect64123con tract in side65125con tr

30、act outside66127con tract in side67129con tract in side68131con tract in side69133reflect70135con tract in sideOptimization terminated:the curre nt x satisfies the term in ati on criteria using ofand F(X) satisfies the con verge nee criteria using ofxv =fv =从迭代过程可看出,经过多次扩展、反射、压缩过程,才求得极小值。 过建立相应的 m文件

31、可实现。为了得到每一步优化得到的x值,通1 例3:用fminsearch函数求解无约束多维函数 f x 为1x2的极小值。X2解:显然,上式的最小值为4,极值点为(1,1)。在MA TLAB 命令窗口中输入>>fx=(x)x(1)+1/x(1)+x(2)+1/x(2);建立函数>>xv,fv=fmi nsearch(fx,2,3)所得结果为XV = fv =fminsearch用的算法是单纯形搜索法,由于不需要计算梯度,因此fminsearch函数的运算速度很快,常见的函数都能立即求出极小值。应用fminunc函数fminunc函数也能求无约束极值问题。常用的调用格式为

32、:(1) x=fminunc(fun,x0):表示从起始点 x0出发,求出fun的一个局部极小点。(2) x=fminunc(fun,xO,options):按options结构指定的优化参数求函数的极小点,而options结构的参数通过函数optimset来设置,options结构和fminsearch函数一样。(3) x=fminunc(problem):所需求解的极值问题及选项通过problem结构指定,其字段及其含义如表所示:字段说明objective目标函数x0初始点solver求解方法, fminunc 'optio nsoptions 结构(4) x,fval=fminu

33、nc(.):输出参数fval返回目标函数的极小值;(5) x,fval, exitflag=fminunc(.):输出参数 exitflag返回函数fminunc的求解状态(成功或失败);(6) x,fval, exitflag, output=fminunc(.):输出参数 output返回函数fminunc的求解信息(迭代次数,所用 算法等);(7) x,fval, exitflag, output, grad=fminunc(.):输出参数 grad 返回函数 fun 在极小点 x 处的梯度。(8) x,fval,exitflag, output, grad,hessian=fminun

34、c(.):输出参数 hessian返回函数 fun 在极小点 x处的海 森矩阵。例1:用fminunc函数求解无约束多维函数f x1x, 2 2 32的极小值。2 x2 15解:在MATLAB命令窗口中输入>> fx=(x)-1/(x(1)-2)A2+3)-1/(2*(x(2)+1)A2-5);>>=fx;%此处用的是problem结构来求解极值。>>=0,0; >>='fminunc '>>=optimset( Display ', 'iter ')>>xv,fv , exitflag , output , grad, hess=fminunc(pro) 所得结果为Warning: Gradient must be provided for trust-region method;using line-search method instead.> In fminunc at 265Iteration Func-count f(x)0123456789103691218212427303336First-orderStep-size optimality111111111Optimization terminated: relative infinit

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论