1 / 20

实验十三 用 MATLAB 求解非线性优化问题

实验十三 用 MATLAB 求解非线性优化问题. 一、实验目的. 了解 MATLAB 的优化工具箱,利用 MATLAB 求解非线性优化问题。. 二、相关知识. 非线性优化包括相当丰富的内容,我们这里就 MATLAB 提供的一些函数来介绍相关函数的用法及其所能解决的问题。 (一)非线性一元函数的最小值 MATLAB 命令为 fminbnd() ,其使用格式为: X=fminbnd(fun,x1,x2) [X,fval,exitflag,output]= fminbnd(fun,x1,x2).

galeno
Download Presentation

实验十三 用 MATLAB 求解非线性优化问题

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 实验十三 用MATLAB求解非线性优化问题

  2. 一、实验目的 • 了解MATLAB的优化工具箱,利用MATLAB求解非线性优化问题。

  3. 二、相关知识 • 非线性优化包括相当丰富的内容,我们这里就MATLAB提供的一些函数来介绍相关函数的用法及其所能解决的问题。 • (一)非线性一元函数的最小值 • MATLAB命令为fminbnd(),其使用格式为: • X=fminbnd(fun,x1,x2) • [X,fval,exitflag,output]= fminbnd(fun,x1,x2)

  4. 其中:fun为目标函数,x1,x2为变量得边界约束,即x1≤x≤x2,X为返回得满足fun取得最小值的x的值,而fval则为此时的目标函数值。exitflag>0表示计算收敛,exitflag=0表示超过了最大的迭代次数,exitflag<0表示计算不收敛,返回值output有3个分量,其中iterations是优化过程中迭代次数,funcCount是代入函数值的次数,algorithm是优化所采用的算法。其中:fun为目标函数,x1,x2为变量得边界约束,即x1≤x≤x2,X为返回得满足fun取得最小值的x的值,而fval则为此时的目标函数值。exitflag>0表示计算收敛,exitflag=0表示超过了最大的迭代次数,exitflag<0表示计算不收敛,返回值output有3个分量,其中iterations是优化过程中迭代次数,funcCount是代入函数值的次数,algorithm是优化所采用的算法。

  5. 例1:求函数 在区间 的最小值和相应的 值。 • 解决此问题的MATLAB程序为: • clear • fun='(x^5+x^3+x^2-1)/(exp(x^2)+sin(-x))' • ezplot(fun,[-2,2]) • [X,fval,exitflag,output]= fminbnd(fun,-2,2)

  6. 结果为: • X = 0.2176 • fval =-1.1312 • exitflag = 1 • output = iterations: 13 • funcCount: 13 • algorithm: 'golden section search, parabolic interpolation'

  7. (二)无约束非线性多元变量的优化 • 这里我们介绍两个命令:fminsearch()和fminunc(),前者适合处理阶次低但是间断点多的函数,后者则对于高阶连续的函数比较有效。

  8. 命令1:X= fminsearch(fun,X0) [X,fval,exitflag,output]= fminsearch(fun,X0,options) • 功能:从点x0开始求函数f的极小值点x 。

  9. X0为x的初始值,fval为返回的函数值,exitflag=1表示优化结果收敛,exitflag=0表示超过了最大迭代次数。返回值output有3个分量,其中iterations是优化过程中迭代次数,funcCount是代入函数值的次数,algorithm是优化所采用的算法。Options是一个结构,里面有控制优化过程的各种参数,参考optimset()命令来设置,一般情况下我们不必改动它,即使用缺省设置就可以了。

  10. 例2:求函数 的最小值以及最小值点。 • 完成该计算的MATLAB程序如下: • clear • fun1='sin(x)*sin(x)+cos(y)' • fun2='sin(x(1))*sin(x(1))+cos(x(2))' • ezmesh(fun1) • [X,fval]=fminsearch(fun2,[0,0]) • X = -1.5708 3.1416 • fval = -2.0000

  11. 其中语句ezmesh()是为了画出函数的图形,注意这里fun1和fun2的不同,考虑如果用相同的是否可行。其中语句ezmesh()是为了画出函数的图形,注意这里fun1和fun2的不同,考虑如果用相同的是否可行。 • 命令fminunc()的格式为: • X=fminunc(fun,X0) • [X,fval,exitflag,output,grad,hessian]=fminunc(fun,X0,options)

  12. 命令2:x=fminunc(‘f’,x0,opt) • 功能:从点x0开始求函数f的极小值点x。其中f 是M函数文件,x,x0 。opt(1)=1,有中间结果输出;opt(1)=-1给出警告信息。

  13. 命令fminunc()通过计算寻找多变量目标函数fun的最小值,X0为优化的初始值,X为返回的变量的值,grad返回解点的梯度,hessian返回解点的汉森矩阵。其它参数的意义和命令fminsearch()相同。命令fminunc()通过计算寻找多变量目标函数fun的最小值,X0为优化的初始值,X为返回的变量的值,grad返回解点的梯度,hessian返回解点的汉森矩阵。其它参数的意义和命令fminsearch()相同。

  14. 求解非线性规划 • 例:求解 解:1、建立M文件 function y=fun1(x) y=x(1).^2/2+x(2).^2/2; 2、建立命令文件 x0=[1,1]; x=fminunc(‘fun1’,x0)

  15. 例3:求函数 的最小值。 • MATLAB程序为 • clear • fun='exp(x(1))*(2*x(1)^2+3*x(2)^2+2*x(1)*x(2)+3*x(2)+1)'; • x0=[0,0]; • options=optimset('largescale','off','display','iter','tolx',1e-8,'tolfun',1e-8); • [x,fval,exitflag,output,grad,hessian]=fminunc(fun,x0,options)

  16. 运行结果为:

  17. Optimization terminated successfully: • Current search direction is a descent direction, and magnitude of • directional derivative in search direction less than 2*options.TolFun • x = 0.2695 -0.5898 • fval = 0.1330 • exitflag = 1 • output = iterations: 6 • funcCount: 33 • stepsize: 1.0000 • firstorderopt: 1.6892e-005

  18. algorithm: 'medium-scale: Quasi-Newton line search' • grad = 1.0e-004 * ( -0.1689, 0.0074) • hessian = 5.1110 2.6437 • 2.6437 8.0539 • 本例的程序对参数options进行了设置,'largescale','off',关闭了大规模方式,'display',用来控制计算过程的显示,'iter'表示显示优化过程的每次计算结果,'off'表示不显示所有输出,'final'仅输出最后结果,

  19. 'tolx'用来控制输入变量x的允许误差精度,本例设置为1e-8,'tolfun'是控制目标函数的允许误差精度,缺省值是1e-4,本例为1e-8。'tolx'用来控制输入变量x的允许误差精度,本例设置为1e-8,'tolfun'是控制目标函数的允许误差精度,缺省值是1e-4,本例为1e-8。

  20. 三、实验内容 • 1.将例1中x的范围改为[-5,5]你将得到怎样的结果,你认为正确吗?应该如何解决? • 2.求函数 的最小值。 • 3.在区间 上,求函数 • 的最小值。 • 4.完成实验报告。

More Related