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

下载本文档

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

文档简介

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

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

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

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

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

6、器的状态和求解结果。(7)将目标函数、选项和结果导入 /导出。(在菜单文件中寻找)1.4 GUI优化工具的应用实例1、无约束优化(fminunc求解器)fminunc求解器可用的算法有两种:Large scale (大规模算法)Medium scale (中等规模算法)对于一般问题,采用中等规模算法即可。例1 :用优化工具求f x =x2,4x-6的极小值,初始点取 x=0。解:首先在当前 MATLAB的工作目录下建立目标函数文件Fununc1.m文件: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例2:用优化工具求f (x )= x -3x+2的极小值,初始点取x=-7,比较fminunc和fminsearch求出的结果。解:通过数学计算,可以得到本例中的极小点有两个x1=1,x2=2。启动优化工具:在Solver下拉选框中选择fminunc ;Algorithm 下拉选框中选择 Medium scale ;目标函数栏输入(x)abs(xA2-3

9、*x+2);初始点输入-7,其余参数默认;单击"Start”按钮运行。Fminunc求得的结果为x=1.5,显然数值不对,它是未加绝对值时函数f x = X2 - 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 优化工具箱在一维优化问题中的应用2.1 应用 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 来设置,其中 opt

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

12、 返回目标函数的极小值。( 4) 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 结构中的字段: output.algorithm: 优化算法 output.iterations: 优化迭代步数output.fu ncCou nt:目标函数检查步数output.message:退出信息例1:用fminbnd求函数f x =x4_x2,x-1在区间-2,1上的极小值。解:在MATLAB命令窗口输入>>x,fval,exitflag,output= fminbnd(所得结果为x =-0.8846fval =-2.0548exitflag =1output = iterati ons: 11%fun cCou

14、nt: 12%algorithm: 'golde n sect ion search 抛物线算法求本例函数的极小值message: 1x112 charA4-xA2+x-1 '-2,1)迭代次数为11次函数计算了 12次parabolic in terpolati on'%fminbnd用了黄金分割法和17要查看结果的精度,可以接着在MATLAB命令窗口中输入>> output.message可得如下信息ans =Optimization terminated:the current x satisfies the term in ation criteri

15、a usi ng OPTIONS.ToIX of 1.000000e-004MATLAB 命令窗口输入说明求得结果的精度为1.0e-4,如果想提高精度,可以通过option结构来指定,>>opt=optimset( ' TolX ' ,1.0e-6);>>format l ong;>>x,fval,exitflag,output= fminbnd( xA4-xA2+x-1 ,-2,1,opt)所得结果为x= -0.884646164474752fval = -2.054784062185396exitflag =1output =iterat

16、i ons: 11fun cCou nt: 12algorithm: 'golde n sect ion search, parabolic in terpolati on'message: 1x112 char这样求得的结果 x 就有了 1.0e-6 的精度。为了理解 fminbnd 的求解原理,将每一步的迭代过程打印出来,在 MA TLAB 命令窗口中输入 >> opt=optimset( display ', ' iter ');>>x,fval,exitflag,output= fminbnd(A4-xA2+x-1 

17、9;,-2,1,opt)所得结果为Func-count xf(x)Procedure1-0.854102-2.05144initial2-0.145898-1.16673golden3-1.2918-1.17585golden4-0.72025-1.9699parabolic5-0.853884-2.05139parabolic6-0.890887-2.05464parabolic7-1.04402-1.94595golden8-0.884922-2.05478parabolic9-0.88455-2.05478parabolic10-0.884647-2.05478parabolic11-0

18、.884613-2.05478parabolic12-0.88468-2.05478parabolicOptimization terminated:the current x satisfies the termination criteria using OPTIONS.TolX of 1.000000e-004x = -0.884646700241543fval = -2.054784062184385exitflag =1output = iterations: 11funcCount: 12algorithm: 'golden section search, paraboli

19、c interpolation'message: 1x112 char分析迭代过程可发现, fminbnd 首先产生一个迭代的初始点, 经过简单的计算可以发现, 这个初始点是区间的 黄金分割点(-0.854=-2+ (1-0.618) * (1+2),接着再用黄金分割法迭代,直到相连两步迭代得到的f(x)相差不大时,此时用二次插值法迭代一步,如果用二次插值法得到的估计点可以接受的话(和前次黄金分割法得 到的f(x)相差不大),则再用二次插值法迭代,如果相连两次二次插值法迭代得到的f(x)相差不大,且自变量的差别很小,则继续直到满足精度要求,否则换用黄金分割法。X2例2:用fminbnd

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

21、的极小值。解:在MATLAB命令窗口中输入>>x,fval= fminbnd(si n(2*x+1)+3*si n(4*x+3)+5*si n(6*x+5)',-4,4)所得结果为x =-1.1082fval =-8.8940若在MATLAB命令窗口中输入>>x,fval,exitflag= fminbnd( si n(2*x+1)+3*si n(4*x+3)+5*si n(6*x+5)'-4,4)x =-1.1082fval =-8.8940exitflag =1例4:用fminbnd求函数在区间-8,8上的极小值。1 _ 1 _ 12 2 2(x-2

22、)33(x-5)42(x-1)1解:在MATLAB命令窗口中输入>>x,fval= fminbnd(-'1/(x-2)a2+3)-1/(3*(x-5)a2+4)-1/(2*(x-1)a2+1)'-8,8)所得结果为x =1.0337fval =-1.2715例5:用fminbnd求函数f ( x ) = |x+1 +x2+x-2在区间-2,2上的极小值。解:在MATLAB命令窗口中输入>>x,fval= fminbnd( abs(x+1)+xA2+x-2 '-2,2)所得结果为x =-1.0000fval =-2.00002.2 应用 fmins

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

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

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

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

27、ut.iterati ons优化迭代步数output.fu ncCo unt目标函数检查步数output.message退出信息例1:用fminsearch函数求解无约束多维函数 f x =sinin x2的极小值。解:在MATLAB命令窗口中输入>>fx=(x)si n(x(1)+si n(x(2);%建立函数>>xv,fv= fmin search(fx,0,0)所得结果为xv =-1.5708 -1.5708fv =-2.0000例2:用fminsearch函数求解无约束多维函数1_ 2(%-2) +32的极小值。2(X2 +1) -5解:显然,上式的极值点为(2

28、,-1),最小值为-2/15。在MA TLAB 命令窗口中输入>>fX=(x)-1/(x(1)-2)A2+3)-1/(2*(x(2)+1F2-5);>>xv,fv= fminsearch(fx,0,0) 所得结果为xv =2.0000-1.0000fv =-0.1333为了看清楚 fminsearch 函数的单纯型搜索过程, 以显示每次迭代的信息。采用 optimset 函数设置 options 结构,将 display 字段设为 iter ,在 MA TLAB 命令窗口中输入>>opt=optimset( display ', 'iter

29、');>>xv,fv= fminsearch(fx,0,0,opt)所得结果为IterationFunc-count min f(x)Procedure010.190476130.190456initial simplex%初始单纯型250.190224expand%扩展370.190067expand490.189526expand5110.188944expand6130.187583expand7150.185763expand8170.182219expand9190.177002expand10210.167918expand11230.154383expand1

30、2250.13326expand13270.103875expand14290.0643404expand15310.0157881expand1633-0.0384754expand1735-0.0567264reflect%反射1836-0.0567264reflect1938-0.0567264contract inside%压缩2040-0.0594596contract inside2141-0.0594596reflect2243-0.0599578contract inside2345-0.0599653contract outside2447-0.0601014contract

31、 inside2549-0.0601014contract inside2651-0.0601903reflect2753-0.0601903contract inside2855-0.0603234expand2957-0.0604675expand3059-0.0607257expand3161-0.0612865expand3263-0.0617259expand3365-0.0635127expand3466-0.0635127reflect3568-0.0673697expand3669-0.0673697reflect3771-0.0740469expand3873-0.07807

32、03expand3975-0.0928988expand4077-0.10392expand4179-0.127078expand4281-0.130651reflect4382-0.130651reflect4484-0.131814contract inside4586-0.133102contract inside4688-0.133102contract inside4790-0.133204reflect4892-0.133204contract inside4994-0.13329contract inside5096-0.133326contract inside5198-0.1

33、33326contract inside52100-0.133326contract outside53102-0.133328contract inside54104-0.133331contract outside55106-0.133332contract inside56108-0.133333contract inside57110-0.133333contract outside58112-0.133333contract inside59114-0.133333contract inside60116-0.133333contract inside61118-0.133333co

34、ntract inside62120-0.133333contract inside63121-0.133333reflect64123-0.133333contract inside65125-0.133333contract outside66127-0.133333contract inside67129-0.133333contract inside68131-0.133333contract inside69133-0.133333reflect70135-0.133333contract insideOptimization terminated:the current x sat

35、isfies the termination criteria using OPTIONS.TolX of 1.000000e-004 and F(X) satisfies the convergence criteria using OPTIONS.TolFun of 1.000000e-004 xv =2.0000 -1.0000fv =-0.1333x值,通从迭代过程可看出,经过多次扩展、反射、压缩过程,才求得极小值。为了得到每一步优化得到的 过建立相应的 m文件可实现。11例3:用fminsearch函数求解无约束多维函数f x =捲x2的极小值。X|x2解:显然,上式的最小值为 4,

36、极值点为(1,1)。在MA TLAB 命令窗口中输入>>fx=(x)x(1)+1/x(1)+x(2)+1/x(2);%建立函数>>xv,fv= fmin search(fx,2,3)所得结果为xv =1.00001.0000fv =4.0000fminsearch用的算法是单纯形搜索法,由于不需要计算梯度,因此fminsearch函数的运算速度很快,常见的函数都能立即求出极小值。3.2应用fminunc函数fminunc函数也能求无约束极值问题。常用的调用格式为:(1) x=fminunc(fun,x0):表示从起始点 x0出发,求出fun的一个局部极小点。(2) x=

37、fminunc(fun,x0,options):按options结构指定的优化参数求函数的极小点,而options结构的参数通过函数optimset来设置,options结构和fminsearch函数一样。(3) x=fminunc(problem):所需求解的极值问题及选项通过problem结构指定,其字段及其含义如表所示:字段说明objective目标函数x0初始点solver求解方法, fminunc 'optio nsoptions 结构(4) x,fval=fminunc(.):输出参数fval返回目标函数的极小值;(5) x,fval, exitflag=fminunc(.

38、):输出参数 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=fminunc(.):输出参数 hessian返回函数 fun 在极小点 x处的海 森矩阵。例1:用fminun

39、c函数求解无约束多维函数12X1 - 23122 X2 1-5的极小值。解:在MATLAB命令窗口中输入>> fx=(x)-1/(x(1)-2)A2+3)-1/(2*(x(2)+1)A2-5);>>pro.objective=fx;%此处用的是problem结构来求解极值。>>pro.x0=0,0;>>pro.solver= 'fminunc '>>pro.options=optimset( Display f 'iter f>>xv,fv , exitflag , output, grad, he

40、ss=fminunc(pro)所得结果为Warning: Gradie nt must be provided for trust-regi on method;using lin e-search method in stead.> In fminunc at 265First-orderIteratio nFun c-co untf(x)Step-sizeoptimality030.1904760.444160.078471410.116290.048262310.0945312-0.053214510.124418-0.07618720.4058170.162521-0.0966210.105624-0.12839610.0394727-0.13268910.0141830-0.13333110.000826933-0.13333315.13e-0061036-0.1333

温馨提示

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

评论

0/150

提交评论