利用MATLAB求解无约束优化问题

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
5
4. 用fminunc 函数 (1)建立M-文件fun2.m
function f=fun2(x)
f=100*(x(2)-x(1)^2)^2+(1-x(1))^2 (2)简单计算 [x,fval,exitflag,output]=fminunc('fun2', [-1.2 2]) (3)比较各种算法主程序compare.m
7
例3:Matlab编程求解
2 2 min f ( x ) x 25 x 用最速下降法求解无约束非线性规划问题: 1 2 ,其中
x ( x1 , x2 )T ,要求选取初始点 x 0 (2,2)T ,终止误差 103 。
解: f ( x ) (2 x1 ,50x2 )T (i)编写M文件 detaf.m如下: function [f,df]=detaf(x);
-1.5
-1
-0.5
0
0.5
1
1.5
2
4
用fminsearch函数求解
输入命令: f='100*(x(2)-x(1)^2)^2+(1-x(1))^2'; [x,fval,exitflag,output]=fminsearch(f, [-1.2 2]) 运行结果: x =1.0000 1.0000 fval =1.9151e-010 exitflag = 1 output = iterations: 108 funcCount: 202 algorithm: 'Nelder-Mead simplex direct search'
6
options11=optimset('HessUpdate','dfp') [x11,fval11,exitflag11,output11]=fminunc('fun2', [-1.2 2],options11) pause options12=optimset('HessUpdate','dfp','LineSearchType','cubicpoly') [x12,fval12,exitflag12,output12]=fminunc('fun2', [-1.2 2],options12) pause options21=optimset('HessUpdate','bfgs') [x21,fval21,exitflag21,output21]=fminunc('fun2', [-1.2 2],options21) pause options22=optimset('HessUpdate','bfgs','LineSearchType','cubicpoly') [x22,fval22,exitflag22,output22]=fminunc('fun2', [-1.2 2],options22) pause options31=optimset('HessUpdate','steepdesc') [x31,fval31,exitflag31,output31]=fminunc('fun2', [-1.2 2],options31) pause options32=optimset(,'HessUpdate','steepdesc','MaxIter',8000,'MaxFunEvals',8000) [x32,fval32,exitflag32,output32]=fminunc('fun2', [-1.2 2],options32) pause options33=optimset('HessUpdate','steepdesc','MaxIter',9000,'MaxFunEvals',9000) [x33,fval33,exitflag33,output33]=fminunc('fun2', [-1.2 2],options33)
2. 画出 Rosenbrock 函数的等高线图, 输入命令: contour(x,y,z,20) hold on plot(-1.2,2,' o '); text(-1.2,2,'start point') plot(1,1,'o') text(1,1,'solution')
3 2.5 2 1.5 1 0.5 0 -0.5 -1 -2 solution start point
matlab解多元函数无约束优化问题
标准型为:min F(X) 命令格式为: [x,fval,exitflag,output]= fminunc(fun, x0 ,options); 或 [x,fval,exitflag,output]= fminsearch(fun, x0 ,options); •使用fminunc和 fminsearch可能会得到局部最优解. •fminsearch是用单纯形法寻优. •fminunc的算法见以下几点说明:
8
1
说明: [1] fminunc为无约束优化提供了大型优化和中型优化算法。 由options中的参数LargeScale控制: LargeScale=’on’(默认值),使用大型算法 LargeScale=’off’(默认值),使用中型算法 [2] fminunc为中型优化算法的搜索方向提供了3种算法, 由 options中的参数HessUpdate控制: HessUpdate=’bfgs’(默认值),拟牛顿法的BFGS公式; HessUpdate=’dfp’,拟牛顿法的DFP公式; HessUpdate=’steepdesc’,最速下降法 [3] fminunc为中型优化算法的步长一维搜索提供了两种算法, 由options中参数LineSearchType控制: LineSearchType=’quadcubic’(缺省值), 混合的二次和三次多项式插值; LineSearchType=’cubicpoly’,三次多项式插值
3000
2
2
பைடு நூலகம்
2
为获得直观认识, 输入以下命令, 画出 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)
2500 2000 1500 1000 500 0 3 2 1 0 1 0 -1 -1 -2 2
3、运行结果: x= 0.5000 -1.0000 y = 1.3029e-10
3
例 2 Rosenbrock 函数 f(x1,x2)=100(x2-x1 ) +(1-x1) 的最优解(极小)为 x*=(1,1) ,极小值为 f*=0.试用 不同算法(搜索方向和步长搜索)求数值最优解. 初值选为 x0=(-1.2 , 2).
2
例1 min f(x)=(4x12+2x22+4x1x2+2x2+1)*ex1 1、编写M-文件 fun.m: function f = fun (x) f = exp(x(1))*(4*x(1)^2+2*x(2)^2+4*x(1)*x(2)+2*x(2)+1); 2、输入M文件wliti.m如下: x0 = [-1, 1]; x=fminunc(‘fun’,x0); y=fun(x)
f=x(1)^2+25*x(2)^2;
df(1)=2*x(1); df(2)=50*x(2);
(ii)编写M文件zuisu.m x=[2;2]; [f0,g]=detaf(x); while norm(g)>0.001 d=-g'/norm(g); t=1.0;f=detaf(x+t*d); while f>f0 t=t/2;f=detaf(x+t*d); end x=x+t*d [f0,g]=detaf(x) end
相关文档
最新文档