matlab优化工具箱的使用(共16页).doc

上传人:飞****2 文档编号:16270624 上传时间:2022-05-16 格式:DOC 页数:16 大小:126KB
返回 下载 相关 举报
matlab优化工具箱的使用(共16页).doc_第1页
第1页 / 共16页
matlab优化工具箱的使用(共16页).doc_第2页
第2页 / 共16页
点击查看更多>>
资源描述

《matlab优化工具箱的使用(共16页).doc》由会员分享,可在线阅读,更多相关《matlab优化工具箱的使用(共16页).doc(16页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

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

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

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

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

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

6、件中寻找)1.4 GUI优化工具的应用实例1、无约束优化(fminunc求解器)fminunc求解器可用的算法有两种: Large scale(大规模算法) Medium scale(中等规模算法)对于一般问题,采用中等规模算法即可。例1:用优化工具求的极小值,初始点取x=0。解:首先在当前MATLAB的工作目录下建立目标函数文件Fununc1.m文件:function y= FunUnc1(x) % function必须为小写,如果F为大写则不行y=x2+4*x-6; %平方符号输入时用键盘上数字6上的符合,否则错误然后启动优化工具: 在Solver下拉选框中选择fminunc; Algor

7、ithm下拉选框中选择Medium scale; 目标函数栏输入FunUnc1; %运算时输入函数不知什么原因老有错误,直接输入目标函数却没有错误 初始点输入0,其余参数默认; 单击“Start”按钮运行。从求解结果可以看出,函数的极小值为-10,且在x=-2时取到,而且从Current iteration框可以看出迭代的步数。对于函数形式比较简单的情况,可以直接输入目标函数,而不用建立目标函数文件,在目标函数栏中直接输入(x)x2+4*x-6,也可求出结果。此题能否用进退法和黄金分割法(或二次插值法)求解吗?不能,要用进退法或黄金分割法得自己先编程序,然后才能调用这样的函数。2、无约束优化(

8、fminsearch求解器)fminsearch求解器也可用来求解无约束优化问题,它有时候能求解fminunc不能解决的问题。例2:用优化工具求的极小值,初始点取x=-7,比较fminunc和fminsearch求出的结果。解:通过数学计算,可以得到本例中的极小点有两个x1=1,x2=2。启动优化工具: 在Solver下拉选框中选择fminunc; Algorithm下拉选框中选择Medium scale; 目标函数栏输入(x)abs(x2-3*x+2); 初始点输入-7,其余参数默认; 单击“Start”按钮运行。Fminunc求得的结果为x=1.5,显然数值不对,它是未加绝对值时函数的极小

9、值。 然后在Solver下拉选框中选择fminsearch; Algorithm下拉选框中选择Medium scale; 目标函数栏输入(x)abs(x2-3*x+2); 初始点输入-7,其余参数默认; 单击“Start”按钮运行。fminsearch求得的结果为x=2,显然数值是对的。可为什么不能求出数值x=1呢,因为此时的函数值也是最小的。由此可得结论:对于非光滑优化问题Fminunc可能求不到正确的结果,而fminsearch却能很好地胜任这类问题的求解。2 MATLAB优化工具箱在一维优化问题中的应用2.1 应用fminbnd函数在MATLAB中,fminbnd函数可用来求解一维优化问

10、题,其调用格式为:(1)x=fminbnd(fun,x1,x2); %求函数fun在区间(x1,x2)上的极小值对应的自变量值。(2)x=fminbnd(fun,x1,x2,options); % 按options结构指定的优化参数求函数fun在区间(x1,x2)上的极小值对应的自变量值,而options结构的参数可以通过函数optimset来设置,其中options结构中的字段如下:Display设置结果的显示方式:off不显示任何结果;iter显示每步迭代后的结果;final只显示最后的结果;notify只有当求解不收敛的时候才显示结果。FunValCheck检查目标函数值是否可接受: O

11、n当目标函数值为复数或NaN时显示出错信息; Off不显示任何错误信息。MaxFunEvals最大的目标函数检查步数。MaxIter最大的迭代步数。OutputFcn用户自定义的输出函数,它将在每个迭代步调用。PlotFcns用户自定义的绘图函数。TolX自变量的精度。(3)x,fval= fminbnd(.); %此格式中的输出参数fval返回目标函数的极小值。(4)x,fval,exitflag= fminbnd(.); %此格式中的输出参数exitflag返回函数fminbnd的求解状态(成功或失败),说明如下:exitflag=1fminbnd成功求得最优解,且解的精度为TolX;ex

12、itflag=0由于目标函数检查步数达到最大或迭代步数达到最大值而推出。exitflag=-1用户自定义函数引起的退出。exitflag=-2边界条件不协调(x1x2)。(5)x,fval,exitflag,output= fminbnd(.); %此格式中的输出参数output返回函数fminbnd的求解信息(迭代次数、所用算法等),说明如下:output结构中的字段:output.algorithm: 优化算法output.iterations: 优化迭代步数output.funcCount: 目标函数检查步数output.message: 退出信息例1:用fminbnd求函数在区间-2,

13、1上的极小值。解:在MATLAB命令窗口输入x,fval,exitflag,output= fminbnd(x4-x2+x-1,-2,1)所得结果为x =-0.8846fval =-2.0548exitflag =1output = iterations: 11 %迭代次数为11次 funcCount: 12 %函数计算了12次 algorithm: golden section search, parabolic interpolation % fminbnd用了黄金分割法和抛物线算法求本例函数的极小值 message: 1x112 char要查看结果的精度,可以接着在MATLAB命令窗口中

14、输入 output.message可得如下信息ans =Optimization terminated: the current x satisfies the termination criteria using OPTIONS.TolX of 1.e-004说明求得结果的精度为1.0e-4,如果想提高精度,可以通过option结构来指定,在MATLAB命令窗口输入opt=optimset(TolX,1.0e-6);format long;x,fval,exitflag,output= fminbnd(x4-x2+x-1,-2,1,opt)所得结果为x = -0.4752fval = -2.

15、5396exitflag = 1output = iterations: 11 funcCount: 12 algorithm: golden section search, parabolic interpolation message: 1x112 char这样求得的结果x就有了1.0e-6的精度。为了理解fminbnd的求解原理,将每一步的迭代过程打印出来,在MATLAB命令窗口中输入 opt=optimset(display,iter);x,fval,exitflag,output= fminbnd(x4-x2+x-1,-2,1,opt)所得结果为Func-count x f(x) P

16、rocedure 1 -0. -2.05144 initial 2 -0. -1.16673 golden 3 -1.2918 -1.17585 golden 4 -0.72025 -1.9699 parabolic 5 -0. -2.05139 parabolic 6 -0. -2.05464 parabolic 7 -1.04402 -1.94595 golden 8 -0. -2.05478 parabolic 9 -0.88455 -2.05478 parabolic 10 -0. -2.05478 parabolic 11 -0. -2.05478 parabolic 12 -0.8

17、8468 -2.05478 parabolicOptimization terminated: the current x satisfies the termination criteria using OPTIONS.TolX of 1.e-004 x = -0.1543fval = -2.4385exitflag = 1output = iterations: 11 funcCount: 12 algorithm: golden section search, parabolic interpolation message: 1x112 char分析迭代过程可发现,fminbnd首先产生

18、一个迭代的初始点,经过简单的计算可以发现,这个初始点是区间的黄金分割点(-0.854=-2+(1-0.618)*(1+2),接着再用黄金分割法迭代,直到相连两步迭代得到的f(x)相差不大时,此时用二次插值法迭代一步,如果用二次插值法得到的估计点可以接受的话(和前次黄金分割法得到的f(x)相差不大),则再用二次插值法迭代,如果相连两次二次插值法迭代得到的f(x)相差不大,且自变量的差别很小,则继续直到满足精度要求,否则换用黄金分割法。例2:用fminbnd求函数在区间-10,10上的极小值。解:在MATLAB命令窗口中输入x,fval,exitflag= fminbnd(exp(-x2)*(x+

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

20、3*sin(4*x+3)+5*sin(6*x+5),-4,4)x =-1.1082fval =-8.8940exitflag =1例4:用fminbnd求函数在区间-8,8上的极小值。解:在MATLAB命令窗口中输入x,fval= fminbnd(-1/(x-2)2+3)-1/(3*(x-5)2+4)-1/(2*(x-1)2+1),-8,8)所得结果为x =1.0337fval =-1.2715例5:用fminbnd求函数在区间-2,2上的极小值。解:在MATLAB命令窗口中输入x,fval= fminbnd(abs(x+1)+x2+x-2,-2,2)所得结果为x =-1.0000fval =

21、-2.00002.2 应用fminsearch函数fminsearch函数的主要功能是求多变量的极值问题,当然也就可以求单变量极值问题。例:用fminsearch函数求函数的极小值。解:在MATLAB命令窗口中输入x,fval,exitflag,output= fminsearch(x4-x2+x-1,0)所得结果为x =-0.8846fval =-2.0548exitflag =1output =iterations: 24 funcCount: 48 algorithm: Nelder-Mead simplex direct search message: 1x196 char3 MATL

22、AB优化工具箱在无约束优化问题中的应用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不显示任何结果;iter显示每步迭代后的结果;final只显示最后

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

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

25、output.message退出信息例1:用fminsearch函数求解无约束多维函数的极小值。解:在MATLAB命令窗口中输入fx=(x)sin(x(1)+sin(x(2); %建立函数xv,fv= fminsearch(fx,0,0)所得结果为xv =-1.5708 -1.5708fv =-2.0000例2:用fminsearch函数求解无约束多维函数的极小值。解:显然,上式的极值点为(2,-1),最小值为-2/15。在MATLAB命令窗口中输入fx=(x)-1/(x(1)-2)2+3)-1/(2*(x(2)+1)2-5);xv,fv= fminsearch(fx,0,0)所得结果为xv

26、=2.0000 -1.0000fv =-0.1333为了看清楚fminsearch函数的单纯型搜索过程,采用optimset函数设置options结构,将display字段设为iter,以显示每次迭代的信息。在MATLAB命令窗口中输入opt=optimset(display,iter);xv,fv= fminsearch(fx,0,0,opt)所得结果为Iteration Func-count min f(x) Procedure 0 1 0. 1 3 0. initial simplex %初始单纯型 2 5 0. expand %扩展 3 7 0. expand 4 9 0. expan

27、d 5 11 0. expand 6 13 0. expand 7 15 0. expand 8 17 0. expand 9 19 0. expand 10 21 0. expand 11 23 0. expand 12 25 0.13326 expand 13 27 0. expand 14 29 0. expand 15 31 0. expand 16 33 -0. expand 17 35 -0. reflect %反射 18 36 -0. reflect 19 38 -0. contract inside %压缩 20 40 -0. contract inside 21 41 -0.

28、 reflect 22 43 -0. contract inside 23 45 -0. contract outside 24 47 -0. contract inside 25 49 -0. contract inside 26 51 -0. reflect 27 53 -0. contract inside 28 55 -0. expand 29 57 -0. expand 30 59 -0. expand 31 61 -0. expand 32 63 -0. expand 33 65 -0. expand 34 66 -0. reflect 35 68 -0. expand 36 69

29、 -0. reflect 37 71 -0. expand 38 73 -0. expand 39 75 -0. expand 40 77 -0.10392 expand 41 79 -0. expand 42 81 -0. reflect 43 82 -0. reflect 44 84 -0. contract inside 45 86 -0. contract inside 46 88 -0. contract inside 47 90 -0. reflect 48 92 -0. contract inside 49 94 -0.13329 contract inside 50 96 -0

30、. contract inside 51 98 -0. contract inside 52 100 -0. contract outside 53 102 -0. contract inside 54 104 -0. contract outside 55 106 -0. contract inside 56 108 -0. contract inside 57 110 -0. contract outside 58 112 -0. contract inside 59 114 -0. contract inside 60 116 -0. contract inside 61 118 -0.

31、 contract inside 62 120 -0. contract inside 63 121 -0. reflect 64 123 -0. contract inside 65 125 -0. contract outside 66 127 -0. contract inside 67 129 -0. contract inside 68 131 -0. contract inside 69 133 -0. reflect 70 135 -0. contract inside Optimization terminated: the current x satisfies the te

32、rmination criteria using OPTIONS.TolX of 1.e-004 and F(X) satisfies the convergence criteria using OPTIONS.TolFun of 1.e-004 xv =2.0000 -1.0000fv =-0.1333从迭代过程可看出,经过多次扩展、反射、压缩过程,才求得极小值。为了得到每一步优化得到的x值,通过建立相应的m文件可实现。例3:用fminsearch函数求解无约束多维函数的极小值。解:显然,上式的最小值为4,极值点为(1,1)。在MATLAB命令窗口中输入fx=(x)x(1)+1/x(1)+

33、x(2)+1/x(2); %建立函数xv,fv=fminsearch(fx,2,3)所得结果为xv =1.0000 1.0000fv =4.0000fminsearch用的算法是单纯形搜索法,由于不需要计算梯度,因此fminsearch函数的运算速度很快,常见的函数都能立即求出极小值。3.2 应用fminunc函数fminunc函数也能求无约束极值问题。常用的调用格式为:(1)x=fminunc(fun,x0):表示从起始点x0出发,求出fun的一个局部极小点。(2)x=fminunc(fun,x0,options):按options结构指定的优化参数求函数的极小点,而options结构的参数

34、通过函数optimset来设置,options结构和fminsearch函数一样。(3)x=fminunc(problem):所需求解的极值问题及选项通过problem结构指定,其字段及其含义如表所示:字段说明objective目标函数x0初始点solver求解方法,fminuncoptionsoptions结构(4)x,fval=fminunc(.):输出参数fval返回目标函数的极小值;(5)x,fval,exitflag=fminunc(.):输出参数exitflag返回函数fminunc的求解状态(成功或失败);(6)x,fval,exitflag,output=fminunc(.):

35、输出参数output返回函数fminunc的求解信息(迭代次数,所用算法等);(7)x,fval,exitflag,output,grad=fminunc(.):输出参数grad返回函数fun在极小点x处的梯度。(8)x,fval,exitflag,output,grad,hessian=fminunc(.):输出参数hessian返回函数fun在极小点x处的海森矩阵。例1:用fminunc函数求解无约束多维函数的极小值。解:在MATLAB命令窗口中输入 fx=(x)-1/(x(1)-2)2+3)-1/(2*(x(2)+1)2-5);pro.objective=fx; %此处用的是proble

36、m结构来求解极值。pro.x0=0,0;pro.solver=fminunc;pro.options=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 265 First-order Iteration Func-count f(x) Step-size optimality 0 3 0. 0.444 1 6 0. 1 0.116 2 9 0. 1 0.0945 3 12 -0. 1 0.124 4 18 -0. 0. 0.162 5 21 -0.09662 1 0.105 6 24 -0. 1 0.0394 7 27 -0.

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁