1、Matlab优化工具箱简介,1.MATLAB求解优化问题的主要函数,2. 优化函数的输入变量,使用优化函数或优化工具箱中其它优化函数时, 输入变量见下表:,3. 优化函数的输出变量,4控制参数options的设置,(3) MaxIter: 允许进行迭代的最大次数,取值为正整数.,Options中常用的几个参数的名称、含义、取值如下:,(1)Display: 显示水平.取值为off时,不显示输出; 取值为iter时,显示每次迭代的信息;取值为final时,显示最终结果.默认值为final.,(2)MaxFunEvals: 允许进行函数评价的最大次数,取值为正整数.,例:opts=optimset
2、(Display,iter,TolFun,1e-8) 该语句创建一个称为opts的优化选项结构,其中显示参数设为iter, TolFun参数设为1e-8.,控制参数options可以通过函数optimset创建或修改。命令的格式如下:,(1) options=optimset(optimfun) 创建一个含有所有参数名,并与优化函数optimfun相关的默认值的选项结构options.,(2)options=optimset(param1,value1,param2,value2,.) 创建一个名称为options的优化选项参数,其中指定的参数具有指定值,所有未指定的参数取默认值.,(3)op
3、tions=optimset(oldops,param1,value1,param2, value2,.) 创建名称为oldops的参数的拷贝,用指定的参数值修改oldops中相应的参数.,返回,用Matlab解无约束优化问题,其中(3)、(4)、(5)的等式右边可选用(1)或(2)的等式右边。 函数fminbnd的算法基于黄金分割法和二次插值法,它要求目标函数必须是连续函数,并可能只给出局部最优解。,常用格式如下:(1)x= fminbnd (fun,x1,x2)(2)x= fminbnd (fun,x1,x2 ,options)(3)x,fval= fminbnd(.)(4)x,fval,
4、exitflag= fminbnd(.)(5)x,fval,exitflag,output= fminbnd(.),主程序为 jizhi1.m: f=2*exp(-x).*sin(x); fplot(f,0,8); %作图语句 xmin,ymin=fminbnd (f, 0,8) f1=-2*exp(-x).*sin(x); xmax,ymax=fminbnd (f1, 0,8),例2 对边长为3米的正方形铁板,在四个角剪去相等的正方形以制成方形无盖水槽,问如何剪法使水槽的容积最大?,解,先编写M文件fun0.m如下: function f=fun0(x) f=-(3-2*x).2*x;,主程
5、序为jizhi2.m: x,fval=fminbnd(fun0,0,1.5); xmax=x fmax=-fval,运算结果为: xmax = 0.5000,fmax =2.0000.即剪掉的正方形的边长为0.5米时水槽的容积最大,最大容积为2立方米.,命令格式为:(1)x= fminunc(fun,X0 );或x=fminsearch(fun,X0 )(2)x= fminunc(fun,X0 ,options); 或x=fminsearch(fun,X0 ,options)(3)x,fval= fminunc(.); 或x,fval= fminsearch(.)(4)x,fval,exitf
6、lag= fminunc(.); 或x,fval,exitflag= fminsearch(5)x,fval,exitflag,output= fminunc(.); 或x,fval,exitflag,output= fminsearch(.),2、多元函数无约束优化问题,标准型为:min F(X),3 fminunc为中型优化算法的步长一维搜索提供了两种算法, 由options中参数LineSearchType控制:LineSearchType=quadcubic(缺省值),混合的二次和三 次多项式插值;LineSearchType=cubicpoly,三次多项式插,使用fminunc和 f
7、minsearch可能会得到局部最优解.,说明:,fminsearch是用单纯形法寻优. fminunc的算法见以下几点说明:,1 fminunc为无约束优化提供了大型优化和中型优化算法。由options中的参数LargeScale控制:LargeScale=on(默认值),使用大型算法LargeScale=off(默认值),使用中型算法,2 fminunc为中型优化算法的搜索方向提供了4种算法,由 options中的参数HessUpdate控制:HessUpdate=bfgs(默认值),拟牛顿法的BFGS公式;HessUpdate=dfp,拟牛顿法的DFP公式;HessUpdate=stee
8、pdesc,最速下降法,例3 min f(x)=(4x12+2x22+4x1x2+2x2+1)*exp(x1),1、编写M-文件 fun1.m: function f = fun1 (x) f = exp(x(1)*(4*x(1)2+2*x(2)2+4*x(1)*x(2)+2*x(2)+1); 2、输入M文件wliti3.m如下: x0 = -1, 1; x=fminunc(fun1,x0); y=fun1(x),3、运行结果: x= 0.5000 -1.0000 y = 1.3029e-10,2. 画出Rosenbrock 函数的等高线图,输入命令: contour(x,y,z,20) ho
9、ld on plot(-1.2,2, o ); text(-1.2,2,start point) plot(1,1,o) text(1,1,solution),1. 为获得直观认识,先画出Rosenbrock 函数的三维图形, 输入以下命令: x,y=meshgrid(-2:0.1:2,-1:0.1:3); z=100*(y-x.2).2+(1-x).2; mesh(x,y,z),3.用fminsearch函数求解,输入命令: f=100*(x(2)-x(1)2)2+(1-x(1)2; x,fval,exitflag,output=fminsearch(f, -1.2 2),运行结果: x =
10、1.0000 1.0000fval =1.9151e-010exitflag = 1output = iterations: 108 funcCount: 202 algorithm: Nelder-Mead simplex direct search,4. 用fminunc 函数,(1)建立M-文件fun2.m function f=fun2(x) f=100*(x(2)-x(1)2)2+(1-x(1)2,(2)主程序wliti44.m,oldoptions=optimset(fminunc) options=optimset(oldoptions,LargeScale,off) optio
11、ns11=optimset(options,HessUpdate,dfp) x11,fval11,exitflag11,output11=fminunc(fun2, -1.2 2,options11) pause,options12=optimset(options,HessUpdate,dfp,LineSearchType,cubicpoly) x12,fval12,exitflag12,output12=fminunc(fun2, -1.2 2,options12) pause options21=optimset(options,HessUpdate,bfgs) x21,fval21,e
12、xitflag21,output21=fminunc(fun2, -1.2 2,options21) pause options22=optimset(options,HessUpdate,bfgs,LineSearchType,cubicpoly) x22,fval22,exitflag22,output22=fminunc(fun2, -1.2 2,options22) pause,options31=optimset(options,HessUpdate,steepdesc) x31,fval31,exitflag31,output31=fminunc(fun2, -1.2 2,opti
13、ons31) pause options32=optimset(options,HessUpdate,steepdesc,MaxIter,8000,MaxFunEvals,8000) x32,fval32,exitflag32,output32=fminunc(fun2, -1.2 2,options32) pause options33=optimset(options,HessUpdate,steepdesc,MaxIter,9000,MaxFunEvals,9000) x33,fval33,exitflag33,output33=fminunc(fun2, -1.2 2,options33),Rosenbrock函数不同算法的计算结果,可以看出,最速下降法的结果最差.因为最速下降法特别不适合于从一狭长通道到达最优解的情况.,实验作业,