实验9(非线性函数极值求解)课件_第1页
实验9(非线性函数极值求解)课件_第2页
实验9(非线性函数极值求解)课件_第3页
实验9(非线性函数极值求解)课件_第4页
实验9(非线性函数极值求解)课件_第5页
已阅读5页,还剩48页未读 继续免费阅读

下载本文档

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

文档简介

1、数学实验 实验9 非线性函数极值求解实验目的 1、学会用MATLAB求非线性函数极值; 2、学会建立简单的优化模型并求解;实验内容1、用matlab软件求解非线性函数极值;2、几个具体非线性规划模型的建立及求解。设函数 f 在点x0的某邻域内有定义,若存在0,使对于任意xU(x0, )时,不等式f(x)f(x0)(f(x)f(x0)成立,则称f在点x0处取得无约束极大(小)值f(x0),极大值与极小值统称极值。极值称关于n个变量x1,x2,xn的二次齐次多项式函数二次型为n元二次型,也可以写成下面的矩阵形式调用函数:fminbnd 语法: x=fminbnd(fun,a,b) 功能:找到a,

2、b内单变量函数的最小值。 算法:基于黄金分割法和二次插值法. 说明: (1)要求目标函数必须是连续函数; (2)该命令只给出局部最优值. 一元函数的极值一般调用格式: x,fval,exitflag,output=fminbnd(fun,a,b)返回包含优化信息的结构输出.fval为目标函数的最小值 exitflag为终止迭代的条件 output为优化信息 说明 若参数exitflag0,表示函数收敛于x,若exitflag=0,表示超过函数估计值或迭代的最大数字,exitflag0表示函数不收敛于x;若参数output=iterations表示迭代次数,output=funccount表示函

3、数赋值次数,output=algorithm表示所使用的算法。 计算下面函数在区间(0,1)内的最小值.示例x,fval,exitflag,output=fminbnd(x3+cos(x)+x*log(x)/exp(x),0,1) x = 0.5223 fval = 0.3974 exitflag = 1 output = iterations: 9 funcCount: 9 algorithm: golden section search, parabolic interpolationmessage: 1x112 char 运行结果: 示例1:对边长为6m的正方形铁板,在四个角处剪去相等的

4、正方形以制成方形无盖水槽,问如何剪法使水槽的容积最大? 解:假设剪去的正方形边长为x,则水槽的容积为 .转化为求 的在0,3最小值。 示例1示例1function f=myfun1(x) f=-(3-2*x)2*x ; %函数M文件x,fval=fminbnd(myfun1,0,3) %调用命令fmax=-fval 方法一:方法二:f=-(6-2*x)2*x;x,fval=fminbnd(f,0,3)fmax=-fval命令:f=2*exp(-x)*sin(x);xmin,fmin=fminbnd(f,0,8)f1=-2*exp(-x)*sin(x);xmax,fval=fminbnd(f1,

5、0,8)fmax=-fval示例2多元无约束函数的极值函数:fminunc、fminsearch 功能:求多变量无约束函数的最小值。 数学模型 : 调用格式:x,fval,exitflag,output=fminunc(fun,x0,options ) x,fval,exitflag,output=fminsearch(fun,x0,options )说明:fminsearch是用单纯形法寻优. fminunc的算法见以下几点说明:1 fminunc为无约束优化提供了大型优化和中型优化算法。由options中的参数LargeScale控制:LargeScale=on(默认值),使用大型算法La

6、rgeScale=off(默认值),使用中型算法2 fminunc为中型优化算法的搜索方向提供了4 种算法,由 options中的参数HessUpdate控制:HessUpdate=bfgs(默认值),拟牛顿法的BFGS公式;HessUpdate=dfp,拟牛顿法的DFP公式;HessUpdate=steepdesc,最速下降法3 fminunc为中型优化算法的步长一维搜索提 供了两种算法, 由options中参数LineSearchType控制:LineSearchType=quadcubic(缺省值),混合的二次和三次多项式插值;LineSearchType=cubicpoly,三次多项式

7、插使用fminunc和 fminsearch可能会得到局部最优解.示例3、最小化下列函数: (1) 先建立目标函数的M文件 function f=myfun2(x) f=3*x(1) 2+2*x(1)*x(2)+x(2) 2 %函数M文件(2)写出调用命令 x0=1 , 1; x,fval=fminunc(myfun2,x0)示例3示例4 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)

8、+1); 2、输入执行命令: x0 = -1, 1; x,fval=fminunc(fun1,x0) 3、运行结果: x=0.5000 ,-1.0000; fval =1.3029e-10示例4示例5画Rosenbrock函数图象% 画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)画Rosenbrock等高线图象% 画等高线的图contour(x,y,z,20)drawnowhold onplot(-1.2,2,o)text(-1.2,2,start point)plot(1,

9、1,o)text(1,1,solution)求极小值命令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.0000fval =1.9151e-010exitflag = 1output = iterations: 108 funcCount: 202 algorithm: Nelder-Mead simplex direct search调用函数:quadprog 功能:求解二次规划问题。 数学模型 : 多元约束函数的极值调用格式: x,fval,exitflag,output

10、,lambda= quadprog(H,f,A,B,Aeq,Beq,vlb,vub,x0,options) 其中,H、A、Aeq为矩阵,f、b、beq、lb、ub、x为向量 示例6:求解下面的最优化问题: 示例6 H=2 -2 ; -2 4; f=-4;-12;A=-1 2;2 1; B=2;3; Aeq=1 1; Beq=2; lx=zeros(2,1); ux=inf*ones(2,1); x,fval=quadprog(H,f,A,B,Aeq,Beq,lx,ux) 调用函数:fmincon 功能:求多变量有约束非线性函数的最小值。 数学模型 : 有约束非线性规划 调用格式: x,fval

11、,exitflag,output,lambda =fmincon(fun,x0,A,B,Aeq,Beq,lx,ux,nonlcon) 数学模型中,x,B,Beq,lx和ux为向量,A和Aeq为矩阵,c(x)和ceq(x)为函数,返回标量。f(x),c(x),ceq(x)可以是非线性函数 示例7、求侧面积为常数150的体积最大的长方体体积。 解;设该长方体的长、宽、高分别为 ,则数学模型为: 示例7(1)编写目标函数的M文件(myfun.m)function f=myfun (x)f= -x(1)*x(2)*x(3) %目标函数(2)编写约束函数的M文件(myconfun.m)function

12、c,ceq=myconfun(x)c=; %非线性不等约束ceq=x(1)*x(2)+x(2)*x(3)+x(3)*x(1)-75 %非线性等式约束(3)编写调用程序命令x0=1;1;1;A= ;B= ;Aeq= ;Beq= ;lx=zeros(3,1);ux=inf*ones(3,1);x,fval=fmincon(myfun,x0,A,B,Aeq,Beq,lx,ux,myconfun) 现有一旅行者,他要从多种物品中选取体积之和不超过一定限制的行李装入背包随身携带,问如何进行选择,使得最后装入背包内的物品总价值达到最大?由这一典型应用抽象出的一类优化问题常称为背包问题.背包问题 背包问题不

13、仅可直接应用到管理中的资源分配、装载问题、投资决策问题等,而且也常常以子问题形式出现在某些复杂的决策问题中.示例8 示例8:现有容积为1.5立方米的背包,以及6件物品已知物品的价格分别为0.7,0.5,0.4,0.6,0.8,0.55(万元),物品的体积分别为0.35,0.3,0.6,0.4,0.7,0.5(立方米),确定一种方案选取哪几件物品装入包内,可使背包所装物品的总价值最大?该问题的本质是如何选择物品装入背包以使在背包的容量限定之内所装的物品总价值达到最大。对每件物品只有选取与不选取两种可能,用0表示没有被选取,1表示被选取。用gi表示第i件物品。用长度为6的0-1字符串代表一个装包策

14、略。我们采用穷举法举出所有可能的策略,然后比较各种不同策略所产生的总价值,得到最优策略。示例8:模型建立示例8:模型求解(法1:穷举法)jz=0.7 0.5 0.4 0.6 0.8 0.55;tj=0.35 0.3 0.6 0.4 0.7 0.5;k=1;for x1=0:1;for x2=0:1;for x3=0:1; for x4=0:1;for x5=0:1;for x6=0:1; fx=x1 x2 x3 x4 x5 x6; if tj*fx=1.5;fxjz(k,1:6)=fx; k=k+1; end end;end;end;end;end;end;fxlr=fxjz*jz;f,i=m

15、ax(fxlr);f,zjfx=fxjz(i,1:6),fxtj=tj*zjfx用穷举法能保证求得最优解,但当物品数量相当大时,计算量大,用时很长。贪婪算法是求解背包问题的另一种方法:将物品按价值密度的大小降序排列,则依该次序将相应的物品装入背包,直到超出背包的容积限制为止。运用这种贪婪算法能求得背包问题的较好近似解,但不能保证一定是最优解。示例8:模型求解(法2:贪婪算法)%贪心算法程序jz=0.7 0.5 0.4 0.6 0.8 0.55;tj=0.35 0.3 0.6 0.4 0.7 0.5;a1=tj./jz;a,id=sort(a1,descend);tj0=0;for i=1:6

16、b=tj0+tj(id(i); if b=1.5; tj0=b; fangshi(i)=1; else fangshi(i)=0; endendfangshi,zjz=jz*fangshi示例9:产销量的最佳安排示例9:模型建立示例9:模型求解(一)%编写函数文件function y=cfun(x)y1=(100-x(1)-0.1*x(2)-(30*exp(-0.015*x(1)+20)*x(1);y2=(280-0.2*x(1)-2*x(2)-(100*exp(-0.02*x(2)+30)*x(2);y=-y1-y2;示例9:模型求解(一)续%调用命令进行求解x0=1 1;xmax,yval

17、=fminunc(cfun,x0);xmaxymax=-yval示例9:模型求解结果 xmax = 23.9025 62.4977ymax = 6.4135e+0031. lsqcurvefit已知数据点: xdata=(xdata1,xdata2,xdatan), ydata=(ydata1,ydata2,ydatan)非线性最小二乘拟合 Matlab的提供了两个求非线性最小二乘拟合的函数:lsqcurvefit和lsqnonlin。两个命令都要先建立M-文件fun.m,在其中定义函数f(x),但两者定义f(x)的方式是不同的,可参考例题.lsqcurvefit用以求含参量x(向量)的向量值

18、函数F(x,xdata)=(F(x,xdata1),F(x,xdatan)T中的参变量x(向量),使得 (1) x = lsqcurvefit (fun,x0,xdata,ydata); (2) x =lsqcurvefit (fun,x0,xdata,ydata,options); (3) x = lsqcurvefit (fun,x0,xdata,ydata,options,grad); (4) x, options = lsqcurvefit (fun,x0,xdata,ydata,); (5) x, options,funval = lsqcurvefit (fun,x0,xdata,

19、ydata,); (6) x, options,funval, Jacob = lsqcurvefit (fun,x0,xdata,ydata,);fun是一个事先建立的定义函数F(x,xdata) 的M-文件, 自变量为x和xdata说明:x = lsqcurvefit (fun,x0,xdata,ydata,options);迭代初值已知数据点选项见无约束优化 调用格式:lsqnonlin用以求含参量x(向量)的向量值函数 f(x)=(f1(x),f2(x),fn(x)T中的参量x,使得 最小。 其中 fi(x)=f(x, xdatai, ydatai)=F(x,xdatai)-ydata

20、i 2. lsqnonlin已知数据点: xdata=(xdata1,xdata2,xdatan) ydata=(ydata1,ydata2,ydatan) 1) x=lsqnonlin(fun,x0); 2) x= lsqnonlin (fun,x0,options); 3) x= lsqnonlin (fun,x0,options,grad); 4) x,options= lsqnonlin (fun,x0,); 5) x,options,funval= lsqnonlin (fun,x0,);说明:x= lsqnonlin (fun,x0,options);fun是一个事先建立的定义函数f(x)的M-文件,自变量为x迭代初值选项见无约束优化调用格式:示例10 用下面一组数据拟合 中的参数r,k.t0.250.511.523468c19.2118.1515.3614.1012.899.327.455.243.01(1)编写M-文件 curvefun1.m function f=curvefun1(x,tdata) f=x(1)*exp(-x(2)*tdata) %其中 x(1)=r; x(2)=k;(2)输入调用命令t

温馨提示

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

最新文档

评论

0/150

提交评论