第6讲--Matlab-方程求解与优化问题

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

1/20第6讲Matlab方程求解与优化问题6.1方程求解6.2无约束优化问题6.3有约束优化问题6.4线性规划问题2/206.1方程数值求解6.1.1单变量非线性方程求解在Matlab中提供了一个fzero函数,可以用来求单变量非线性方程的根。该函数的调用格式为:z=fzero('filename',x0)其中,filename是待求根的函数文件名,x0为搜索的起点。一个函数可能有多个根,但fzero函数只给出距离x0最近的那个根。3/20例6-1求f(x)=x-10x+2=0在x0=0.5附近的根。步骤如下:(1)建立函数文件funx.m.functionfx=funx(x)fx=x-10.^x+2;(2)调用fzero函数求根。z=fzero('funx',0.5)z=0.3758Ex:求方程在附近的根。0sinxxx5.00x4/206.1.2非线性方程组的求解对于非线性方程组F(X)=0,用fsolve函数求其数值解。fsolve函数的调用格式为:x=fsolve('filename',x0,option)其中x为返回的解,filename是用于定义需求解的非线性方程组的函数文件名,x0是求根过程的初值,option为设定的最优化工具箱的选项。最优化工具箱提供了20多个优化参数选项,用户可以使用optimset命令将它们显示出来。如果想改变其中某个选项,则可以调用optimset()函数来完成。例如,‘Display’选项决定函数调用时中间结果的显示方式,其中‘off’为不显示,‘iter’表示每步都显示,‘final’只显示最终结果。optimset(‘Display’,‘off’)将设定Display选项为‘off’.5/20例6-2求下列非线性方程组在(0.5,0.5)附近的数值解。(1)建立函数文件myfun.m.functionq=myfun(p)x=p(1);y=p(2);q(1)=x-0.6*sin(x)-0.3*cos(y);q(2)=y-0.6*cos(x)+0.3*sin(y);(2)在给定的初值x0=0.5,y0=0.5下,调用fsolve函数求方程的根。x=fsolve('myfun',[0.5,0.5],optimset('Display','off'))0sin3.0cos6.00cos3.0sin6.0yxyyxx6/20x=0.63540.3734将求得的解代回原方程,可以检验结果是否正确,命令如下:q=myfun(x)q=1.0e-009*0.23750.2957可见得到了较高精度的结果。7/206.2无约束最优化问题求解6.2.1非线性一元函数的最小值Matlab命令为fminbnd,其调用格式为X=fminbnd(fun,x1,x2)[X,fval,exitflag,output]=fminbnd(fun,x1,x2)其中,fun为目标函数,x1,x2为变量的边界约束,即x1≤x≤x2,x为最小值点,fval为最小值。exitflag返回算法的终止标志,exitflag0表示计算收敛,exitflag=0表示超过了最大的迭代次数,exitflag0表示计算不收敛。output返回优化算法信息的一个数据结构,其中包含三个分量:iterations:优化过程中迭代次数,funcCount:代入函数值的次数;algorithm:优化所采用的算法。8/20例6-3求f(x)=x3-2x-5在[0,5]内的最小值点与最大值点。(1)建立函数文件mymin.mfunctionfx=mymin(x)fx=x.^3-2*x-5;(2)调用fmin函数求最小值点与最大值点。xmin=fminbnd('mymin',0,5)xmin=0.81659/2025321()sinxxxxfxex例6-4求函数f(x)在区间[-2,2]上的最小值和相应的x值。解:Matlab程序为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)X=0.2176fval=-1.1312exitflag=1output=iterations:12funcCount:13algorithm:'goldensectionsearch,parabolicinterpolation'message:[1x112char]10/206.2.2非线性多元函数的最小值Matlab提供了两个命令:fminsearch,fminunc,前者适合处理阶次低但是间断点多的函数,后者则对于高阶连续函数比较有效。fminsearch的调用格式为:x=fminsearch(fun,x0)[x,fval,exitflag,output]=fminsearch(fun,x0,options)该命令可求解目标函数fun的极小值点x和相应的最小值fval,x0为x的初始值。其余参数同fminbnd.options是一个结构,里面有控制优化过程的各种参数,可以使用optimset命令来设置,一般情况下不必改动它,使用默认设置就可以了。11/20fminunc的调用格式为:x=fminunc(fun,x0)[x,fval,exitflag,output,grad,hessian]=fminunc(fun,x0,options)该命令求解目标函数fun的极小值点x和相应的最小值fval,x0为优化的初始值,grad返回目标函数在最优解点的梯度,hessian返回最优解点的hessian矩阵,其它参数的意义同fminsearch.注意:1、当目标函数的阶数大于2时,fminunc比fminsearch更有效。但当目标函数高度不连续时,使用fminsearch效果更好.2、Matlab没有专门求函数最大值的函数,但只要注意到–f(x)在区间(a,b)上的最小值点就是函数f(x)在(a,b)的最大值点,所以fminsearch(-f,x1,x2)返回函数f(x)在区间(x1,x2)上的最大值点。12/2012121212223231(,)xfxxexxxxx例6-5求如下函数的最小值。解:Matlab程序为fun='exp(x(1))*(2*x(1)+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)本例的程序对参数options进行了设置:'largescale','off',关闭了大规模方式;'display'用来控制计算过程的显示;'iter'表示显示优化过程的每次计算结果;'off'表示不显示所有输出,'final'仅输出最后结果;‘tolx'用来控制输入变量x的允许误差精度,本例设置为1e-8,'tolfun'是控制目标函数的允许误差精度,缺省值是1e-4,本例为1e-8.13/206.3有约束优化问题有约束最优化问题一般描述为:minf(x)s.t.G(x)≤0其中,x=[x1,x2,…,xn]’,该数学表示的含义是求一组x,使得目标函数f(x)为最小,且满足约束条件G(x)≤0.约束条件可以进一步细化为:00eqeqeqbndbndAxbAxbCxCxxLxU线性不等式约束:线性等式约束:非线性不等式约束:非线性等式约束:的上界和下界:14/20Matlab最优化工具箱提供了一个fmincon函数,专门用于求解各种约束下的最优化问题。该函数的调用格式为:[x,fval]=fmincon(‘fname’,x0,A,b,Aeq,beq,Lbnd,Ubnd,NonF,option)其中,x、fval、filename、x0和option的含义与求最小值函数相同。其余参数为约束条件,参数NonF为非线性约束函数的m文件名。如果某个约束不存在,则用空矩阵来表示。15/20223212121121212104300504050500min().,......,fxxxxxxxxxstxxxx(1)首先编写目标函数M文件fop.mfunctionf=fop(x)f=0.4*x(2)+x(1)^2+x(2)^2-x(1)*x(2)+1/30*x(1)^3;(2)设定约束条件,并调用fmincon函数求解此约束最优化问题:x0=[0.5;0.5];A=[-1,-0.5;-0.5,-1];b=[-0.4,-0.5];lb=[0,0];option=optimset;option.LargeScale=‘off’;option.Display=‘off’;[x,f]=fmincon(‘fop’,x0,A,b,[],[],lb,[],[],option)例6-6求解有约束最优化问题16/206.4线性规划6.4.1Matlab标准形式及求解线性规划的目标函数可以是求最大值,也可以是求最小值,约束条件的不等号可以是小于号也可以是大于号。为了避免这种形式多样性带来的不便,Matlab中规定线性规划的标准形式为minTcx,s.t.,,.AxbAeqxbeqlbxubì祝ïïïï?íïï#ïïî其中,,,,,cxbbeqlbub为列向量,c称为价值向量,b称为资源向量,,AAeq为矩阵。17/20Matlab中求解线性规划的命令为[x,fval]=linprog(f,A,b)[x,fval]=linprog(f,A,b,Aeq,beq)[x,fval]=linprog(f,A,b,Aeq,beq,lb,ub)其中x返回的是决策向量的取值,fval返回的是目标函数的最优值,f为价值向量,A,b对应的是线性不等式约束,Aeq,beq对应的是线性等式约束,lb和ub分别对应的是决策向量的下界向量和上界向量。18/20例6-7求解下列线性规划问题123235zxxx=+-max,s.t.1237xxx++=,1232510xxx-+?,123312xxx++?,123,,0xxx³.解(1)化成Matlab标准型123235wxxx=--+min,s.t.1232511013112xxx轾犏轾轾---犏犏犏£犏犏犏臌臌犏臌,123[1,1,1][,,]7Txxx?.19/20(2)求解的Matlab程序如下f=[-2;-3;5];a=[-2,5,-1;1,3,1];b=[-10;12];aeq=[1,1,1];beq=7;[x,y]=linprog(f,a,b,aeq,beq,zeros(3,1));x,y=-y求得的最优解为16.4286x=,20.5714x=,30x=,对应的最优值14.5714z=.20/20例6-8求解线性规划问题12323zxxx=++min,s.t.12312123428,326,,,0.xxxxxxxxì++?ïïïï+?íïï³ïïî解编写Matlab程序如下c=[2;3;1];a=[1,4,2;3,2,0];b=[8;6];[x,y]=linprog(c,-a,-b,[],[],zeros(3,1))%这里没有等式约束,对应的矩阵为空矩阵求得的最优解为10.8066x=,21.7900x=,30.0166x=,对应的最优值7.0000z=.

1 / 20
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功