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

下载本文档

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

文档简介

数学实验数学实验1实验9非线性函数极值求解实验目的

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

语法:x=fminbnd('fun',a,b)功能:找到[a,b]内单变量函数的最小值。算法:基于黄金分割法和二次插值法.

说明:(1)要求目标函数必须是连续函数;(2)该命令只给出局部最优值.一元函数的极值调用函数:fminbnd一元函数的极值5一般调用格式:[x,fval,exitflag,output]=fminbnd('fun',a,b)返回包含优化信息的结构输出.fval为目标函数的最小值exitflag为终止迭代的条件output为优化信息说明若参数exitflag>0,表示函数收敛于x,若exitflag=0,表示超过函数估计值或迭代的最大数字,exitflag<0表示函数不收敛于x;若参数output=iterations表示迭代次数,output=funccount表示函数赋值次数,output=algorithm表示所使用的算法。一般调用格式:6计算下面函数在区间(0,1)内的最小值.示例[x,fval,exitflag,output]=fminbnd('(x^3+cos(x)+x*log(x))/exp(x)',0,1)x=0.5223fval=0.3974exitflag=1output=iterations:9funcCount:9algorithm:'goldensectionsearch,parabolicinterpolation‘message:[1x112char]

运行结果:计算下面函数在区间(0,1)内的最小值.示例[x,fval,7示例1:对边长为6m的正方形铁板,在四个角处剪去相等的正方形以制成方形无盖水槽,问如何剪法使水槽的容积最大?

解:假设剪去的正方形边长为x,则水槽的容积为.转化为求的在[0,3]最小值。示例1示例1:对边长为6m的正方形铁板,在四个角处剪去相等的正8示例1functionf=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示例1functionf=myfun1(x)9命令:f='2*exp(-x)*sin(x)';[xmin,fmin]=fminbnd(f,0,8)f1='-2*exp(-x)*sin(x)';[xmax,fval]=fminbnd(f1,0,8)fmax=-fval示例2命令:示例210多元无约束函数的极值函数:fminunc、fminsearch

功能:求多变量无约束函数的最小值。

数学模型:

调用格式:[x,fval,exitflag,output]=fminunc(fun,x0,options)

[x,fval,exitflag,output]=fminsearch(fun,x0,options)多元无约束函数的极值函数:fminunc、fminsearc11说明:fminsearch是用单纯形法寻优.fminunc的算法见以下几点说明:[1]fminunc为无约束优化提供了大型优化和中型优化算法。由options中的参数LargeScale控制:LargeScale=’on’(默认值),使用大型算法LargeScale=’off’(默认值),使用中型算法说明:fminsearch是用单纯形法寻优.[1]fmi12[2]fminunc为中型优化算法的搜索方向提供了4种算法,由

options中的参数HessUpdate控制:HessUpdate=’bfgs’(默认值),拟牛顿法的BFGS公式;HessUpdate=’dfp’,拟牛顿法的DFP公式;HessUpdate=’steepdesc’,最速下降法[2]fminunc为中型优化算法的搜索方向提供了413[3]fminunc为中型优化算法的步长一维搜索提供了两种算法,由options中参数LineSearchType控制:LineSearchType=’quadcubic’(缺省值),混合的二次和三次多项式插值;LineSearchType=’cubicpoly’,三次多项式插使用fminunc和fminsearch可能会得到局部最优解.[3]fminunc为中型优化算法的步长一维搜索提使14示例3、最小化下列函数:

(1)先建立目标函数的M文件functionf=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示例3、最小化下列函数:(1)先建立目标函数的M文件(15示例4minf(x)=(4x12+2x22+4x1x2+2x2+1)*exp(x1)1、编写M-文件fun1.m:

functionf=fun1(x)f=exp(x(1))*(4*x(1)^2+2*x(2)^2…+4*x(1)*x(2)+2*x(2)+1);

2、输入执行命令:

x0=[-1,1];[x,fval]=fminunc('fun1',x0)

3、运行结果:x=0.5000,-1.0000;fval=1.3029e-10示例4示例4minf(x)=(4x12+2x22+4x1x2+16示例5示例517画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函数图象%画Rosenbrock函数18实验9-(非线性函数极值求解)课件19画Rosenbrock等高线图象%画等高线的图contour(x,y,z,20)drawnowholdonplot(-1.2,2,'o')text(-1.2,2,'startpoint')plot(1,1,'o')text(1,1,'solution')画Rosenbrock等高线图象%画等高线的图20实验9-(非线性函数极值求解)课件21求极小值命令f='100*(x(2)-x(1)^2)^2+(1-x(1))^2';[x,fval,exitflag,output]=fminsearch(f,[-1.2,2])x=1.00001.0000fval=1.9151e-010exitflag=1output=iterations:108funcCount:202algorithm:'Nelder-Meadsimplexdirectsearch'求极小值命令f='100*(x(2)-x(1)^2)^2+(22调用函数:quadprog

功能:求解二次规划问题。数学模型:多元约束函数的极值调用函数:quadprog多元约束函数的极值23调用格式:

[x,fval,exitflag,output,lambda]=quadprog(H,f,A,B,Aeq,Beq,vlb,vub,x0,options)

其中,H、A、Aeq为矩阵,f、b、beq、lb、ub、x为向量调用格式:其中,H、A、Aeq为矩阵,f、b、beq、l24示例6:求解下面的最优化问题:示例6示例6:求解下面的最优化问题:示例625H=[2-2;-24];

f=[-4;-12];A=[-12;21];B=[2;3];Aeq=[11];Beq=[2];lx=zeros(2,1);ux=inf*ones(2,1);[x,fval]=quadprog(H,f,A,B,Aeq,Beq,lx,ux)H=[2-2;-24];f=[-26

调用函数:fmincon

功能:求多变量有约束非线性函数的最小值。数学模型:有约束非线性规划调用函数:fmincon有约束非线性规划27调用格式:

[x,fval,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)可以是非线性函数调用格式:数学模型中,x,B,B28示例7、求侧面积为常数150的体积最大的长方体体积。解;设该长方体的长、宽、高分别为,则数学模型为:

示例7示例7、求侧面积为常数150的体积最大的长方体体积29(1)编写目标函数的M文件(myfun.m)functionf=myfun(x)f=-x(1)*x(2)*x(3)

%目标函数(2)编写约束函数的M文件(myconfun.m)function[c,ceq]=myconfun(x)c=[];%非线性不等约束ceq=[x(1)*x(2)+x(2)*x(3)+x(3)*x(1)-75]%非线性等式约束(1)编写目标函数的M文件(myfun.m)(2)编写约束函30(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)(3)编写调用程序命令31现有一旅行者,他要从多种物品中选取体积之和不超过一定限制的行李装入背包随身携带,问如何进行选择,使得最后装入背包内的物品总价值达到最大?由这一典型应用抽象出的一类优化问题常称为背包问题.背包问题背包问题不仅可直接应用到管理中的资源分配、装载问题、投资决策问题等,而且也常常以子问题形式出现在某些复杂的决策问题中.现有一旅行者,他要从多种物品中选取体积之和不超过32示例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(立方米),确定一种方案选取哪几件物品装入包内,可使背包所装物品的总价值最大?示例8示例8:现有容积为1.5立方米的背包,以及6件33该问题的本质是如何选择物品装入背包以使在背包的容量限定之内所装的物品总价值达到最大。对每件物品只有选取与不选取两种可能,用0表示没有被选取,1表示被选取。用gi表示第i件物品。用长度为6的0-1字符串代表一个装包策略。我们采用穷举法举出所有可能的策略,然后比较各种不同策略所产生的总价值,得到最优策略。该问题的本质是如何选择物品装入背包以使在背包的容量限定之内所34示例8:模型建立示例8:模型建立35示例8:模型求解(法1:穷举法)jz=[0.70.50.40.60.80.55];tj=[0.350.30.60.40.70.5];k=1;forx1=0:1;forx2=0:1;forx3=0:1;forx4=0:1;forx5=0:1;forx6=0:1;fx=[x1x2x3x4x5x6];iftj*fx'<=1.5;fxjz(k,1:6)=fx;k=k+1;endend;end;end;end;end;end;fxlr=fxjz*jz';[f,i]=max(fxlr);f,zjfx=fxjz(i,1:6),fxtj=tj*zjfx'示例8:模型求解(法1:穷举法)jz=[0.70.50.36用穷举法能保证求得最优解,但当物品数量相当大时,计算量大,用时很长。贪婪算法是求解背包问题的另一种方法:将物品按价值密度的大小降序排列,则依该次序将相应的物品装入背包,直到超出背包的容积限制为止。运用这种贪婪算法能求得背包问题的较好近似解,但不能保证一定是最优解。用穷举法能保证求得最优解,但当物品数量相当大时,计算量大,用37示例8:模型求解(法2:贪婪算法)%贪心算法程序jz=[0.70.50.40.60.80.55];tj=[0.350.30.60.40.70.5];a1=tj./jz;[a,id]=sort(a1,'descend');tj0=0;fori=1:6b=tj0+tj(id(i));ifb<=1.5;tj0=b;fangshi(i)=1;elsefangshi(i)=0;endendfangshi,zjz=jz*fangshi'示例8:模型求解(法2:贪婪算法)%贪心算法程序38示例9:产销量的最佳安排示例9:产销量的最佳安排39示例9:模型建立示例9:模型建立40示例9:模型求解(一)%编写函数文件functiony=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:模型求解(一)%编写函数文件41示例9:模型求解(一)续%调用命令进行求解x0=[11];[xmax,yval]=fminunc(@cfun,x0);xmaxymax=-yval示例9:模型求解(一)续%调用命令进行求解42示例9:模型求解结果

xmax=23.902562.4977ymax=6.4135e+003示例9:模型求解结果xmax=431.lsqcurvefit已知数据点:

xdata=(xdata1,xdata2,…,xdatan),ydata=(ydata1,ydata2,…,ydatan)非线性最小二乘拟合

Matlab的提供了两个求非线性最小二乘拟合的函数:lsqcurvefit和lsqnonlin。两个命令都要先建立M-文件fun.m,在其中定义函数f(x),但两者定义f(x)的方式是不同的,可参考例题.1.lsqcurvefit非线性最小二乘拟合Mat44lsqcurvefit用以求含参量x(向量)的向量值函数F(x,xdata)=(F(x,xdata1),…,F(x,xdatan))T中的参变量x(向量),使得

lsqcurvefit用以求含参量x(向量)的向量值函数F(45(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,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);迭代初值已知数据点选项见无约束优化

调用格式:(1)x=lsqcurvefit(‘46lsqnonlin用以求含参量x(向量)的向量值函数

f(x)=(f1(x),f2(x),…,fn(x))T中的参量x,使得

最小。其中fi(x)=f(x,xdatai,ydatai)=F(x,xdatai)-ydatai

2.lsqnonlin已知数据点:xdata=(xdata1,xdata2,…,xdatan)ydata=(ydata1,ydata2,…,ydatan)lsqnonlin用以求含参量x(向量)的向量值函数2.l471)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迭代初值选项见无约束优化调用格式:1)x=lsqnonlin(‘fun’,x0);48示例10用下面一组数据拟合中的参数r,k.t0.250.511.523468c19.2118.1515.3614.1012.899.327.455.243.01示例10用下面一组数据拟合49(1)编写M-文件curvefun1.m

functionf=curvefun1(x,tdata)f=

温馨提示

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

评论

0/150

提交评论