代码资源精通matlab科学计算15-3rd_第1页
代码资源精通matlab科学计算15-3rd_第2页
代码资源精通matlab科学计算15-3rd_第3页
代码资源精通matlab科学计算15-3rd_第4页
代码资源精通matlab科学计算15-3rd_第5页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

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

文档简介

15中有着广泛的应用。可以利用提供的最优化计算工具箱中的函数进行最优化计通过本章学习,读者不必掌握复杂的各种优化算法,便可轻松地利用进行15.1无约束最(GA,minf(x),x[a,a,bf(xf'(x

f(x分别在区间[ax*上单调减,在[x*b5步骤1在区间[a,b]中取两点ca(1-r)h和darh其中r 5:如果x*c(f(cf(d)x*d(f(cf(d步骤3:如果f(cf(d,则令bd。否则ac,跳到步骤1算法的实在中编程实现的黄金搜索算法为:Opt_Golden调用格式:[xofo]Opt_Golden(fabTolX,TolFun,k)。其中,f为函数名;abKxofoxo 算法程序Opt_Golden.m的代码如下所示。function%fo:函数在点xo处的函数值rsqrt(5)- h=b- rh=%%%取两点c、d,并计算相应的函数值fcc=b-d=fc=feval(f,c);fd=ifk<=0|(abs(h)<TolX&abs(fc-fd)<TolFun)iffc<=fdxo=c;fo=fc;xo=d;fo=fd;ifk==

iffc<[xo,fo]=Opt_Golden(f,a,d,TolX,TolFun,k-1);[xo,fo]=Opt_Golden(f,c,b,TolX,TolFun,k-15-1】黄金搜索法求解无约束最优化问题实例。采用黄金搜索法求如下函数的f(x)xx22)32x[0%ex1501.m用Opt_Golden()求解最优f1501=inline('x-(x.*x-a=b=TolX1e- %判断循环是否停止的x阈TolFun1e- MaxIter [xo,fo]=>>xo=fo-x[04]x4f(x)xx22)32取最小值1368在包含f(x)极小值x*的区间[a,b]中,给定三点x0x1x2f0f1,f2x0x1x2。可以构造二次函数q(x,使其在三点处的值等于f(x对应的函数值。可以根据q(x)0,求得该二项式取最小值时的点x3如下所示:1(x12x22)f0(x22x02)f1(x02x12)x3

(x1x2)f0(x2x0)f1(x0x1)根据求出的x3的大小情况确定取代三点中的某一点。直到|x2x0|1,或|f2f0|2时停止迭代,其中1和2x31x3x1x3x12步骤2:如果f(x3f(x1x2x1x1x3,转到步骤4x0x3,转到步骤4;3:若f(x34

f(x1xx1x1x34x2x3算法的实在中编程实现的二次插值算法为:Opt_Quadratic。调用格式:[xo,fo]Opt_Quadratic(fxTolX,TolFun,MaxIter)。其中,f为函数名;xTolFun为函数的误差阈值;MaxIter为最大迭代次数;xofo为函数在点xo二次插值法的编程实现如下算法程序Opt_Quadratic.mfunction[xo,fo]=用二次插值求f(x)%fo:函数在点xo处的函数值iflength(x)>2x012=iflength(x)==a=b=a=x-10;b=

x012=[a(a+b)/2f012=x0=x012(1);x1=x012(2);x2=x012(3);f0=f012(1);f1=f012(2);f2=f012(3);%%%%%求出插值二项式的取最小值处的x3以及相应的最小值nd=[f0-f2f1-f0f2-f1]*[x1*x1x2*x2x0*x0;x1x2x0]';x3=nd(1)/2/nd(2);f3=ifMaxIter<=0|abs(x3-x1)<TolX|abs(f3-f1)<TolFunxo=x3;fo=f3;ifx3<iff3<x012=[x0x3x1];f012=[f0f3x012=[x3x1x2];f012=[f3f1iff3<=x012=[x1x3x2];f012=[f1f3x012=[x0x1x3];f012=[f0f1[xo,fo]=Opt_Quadratic(f,x012,TolX,TolFun,MaxIter-15-2】二次插值法求解无约束最优化问题实例。采用二次插值法求解如下表达f(x)(x22)2/21,x[0,解:调用Opt_Quadratic()%ex1502.m用插值法求解最优化问题例15-2clearallf1502=inline('(x.*x-2).^2/2-1',a=b=%%%分别设定x阈值和函数f阈值TolX=1e-5;TolFun=1e-MaxIter100;[xoq,foq]=Opt_Quadratic(f1502,[a%用优化工具箱的函数求最小值以及它的函数[xob,fob]= %优化工具箱的函数求>>ex1502xoq=1.4142foq=-xobfob=-x[05x1.4142f(x)(x22)221取最小值1。且用二次插值法求得的解与用优化工具箱的函数fminbnd求得的解相同。对于中的几个求最优化的优化工具箱的函数,将在最后一节中对其具体说Nelder-Mead算法是求函数极值的一种算法,由Nelder和Mead提出,又叫单纯Nelder-Mead法是利用多面体来逐步近最佳点x*的。设函数变量为n维,则在n维空间里多面体有(n+1)个顶点。设x1,x2,,xn1为多面体的顶点,且满足:f(x1)剟f(x2 ?fNelder-Mead法试着将多面体中的顶点xn1(k)(也就是函数值最大的点以新的最反射eec扩展外收缩(outside内收缩(inside15-1Nelder-Mead方法示意15-1中给出了Nelder-Mead算法 实 中编程实现的Nelder-Mead算法为:Opt_Nelder。功能:Nelder-Mead算法求无约束最优化解。调用格式:[xofoOpt_Nelderfx0,TolX,TolFun,MaxIter)。其中,f为函数名;xoTolFun为函数的误差阈值;MaxIter为最大迭代次数;xofoxoNelder-Mead法 算法程序为Neldr0.m和Opt_Nelder.m。其中子程序Nelder0.m用于二上的多边形最优化近对于维数大于2的最优化问题可以通过若干二维的迭代计算求出最优解。Opt_Nelder.m可求解若干维变量的最优化问题。Nelder0.mfunction[xo,fo]=%%%%确定三个顶点a,b,c并且其函数值按从小到大排[fabc,I]=sort(fabc);%将二中的多边形三个顶点的函数值按从小到大顺序排a=b=c=fa=fabc(1);fb=fabc(2);fc=fbafb fcbfc ifk<=0|abs(fba)+abs(fcb)<TolFun|abs(b-a)+abs(c-b)<xo=fo m=(a+b)/2;e3*m %扩展fe=feval(f,e);iffe<fbc=e;fc=fe;r=(m+e)/2; fr=feval(f,r);iffr<c=r;fc=fr;iffr>=s=(c+m)/2; %内收缩(insidecontraction)fs=feval(f,s);iffs<c=s;fc=fs;b=c(ac)/2;%变小(shrink)fb=feval(f,b);fc=

[xo,fo]=Nelder0(f,[a;b;c],[fafbfc],TolX,TolFun,k-function[xo,fo]N=ifN==1 [xo,foOpt_Quadratic(f,x0,TolX,TolFun,MaxIter);S=fori= i1=i+ifi1>i1=abcx0;x0S(ix0S(i1fabc=[feval(f,abc(1,:));feval(f,abc(2,:));feval(f,abc(3,:))];[x0,fo]=Nelder0(f,abc,fabc,TolX,TolFun,MaxIter);ifN xo=15-3】Nelder-MeadNelder-Mead算法求f(x,y)x(x5y)y(y解:在中编写函数ex1503.m来进行求解,具体代码如下所示%ex1503.m用Nelder-Meadf1503=inline('x(1)*(x(1)-5-x(2))+x(2)*(x(2)-4)','x');x0=[04];TolX=1e-4;TolFun=1e-9;MaxIter=[xN,fN]=[xF,fF]=fminsearch(f1503,x0)%用优化工具箱的函数fminsearch求>>xN fN=-xF fF=-x4.6667,y4.3333时,函数f(xyx(x5yyy4)取该例题调用了优化工具箱的函数fminsearch,来检验所编写的算法的精确性。fiminsearch也是利用Nelder-Mead算法来求解变量的目标函数的最优化解的。f f

f(x)g(x)f(x)

N搜索步长可调整,通常记为k(k次迭代中的步长。该算法利用一维的线性搜索1k=0x0的函数值f0f(x0长k1,其中k1ArgMinf(xk1gk1

gk1步骤xkxk1k1gk1

gk14xkxk1,且f(xkf(xk1xk为所求的最小值点,并结束循环;否则,跳到步骤2。算法的实在中编程实现的最速下降算法为:Opt_Steepest。调用格式:[xofo]=Opt_Steepestfgrad,x0,TolX,TolFun,dist0,MaxIter)。其中,f为函数名;gradx0TolFun为函数的误差阈值;dist0为初始步长;MaxIterxofoxo 算法程序Opt_Steepest.mfunction[xo,fo]=用最速下降法求最优化%fo:函数在点xo处的函数值ifnargin<7MaxIter %最大迭代次数默认为ifnargin<dist0 %初始步长默认为ifnargin<TolFun1e- %函数值误差为1e-ifnargin<TolX1e- x=x0;fx0=fx=fx0;dist=dist0;kmax1 warning=fork=1:g=g %求点x处的梯度方dist=dist*2; fx1=feval(f,x-dist*2*g);fork1=1:kmax1fx2=fx1;fx1=feval(f,x-iffx0>fx1+TolFun&fx1<fx2-TolFun%fx0>fx1<den=4*fx1-2*fx0-2*fx2;num=den-fx0+fx2;%二次近dist=x=x-dist*g;fx=feval(f,x); dist=ifk1>=warning=warning+1; warning=ifwarning>=2|(norm(x-x0)<TolX&abs(fx-fx0)<TolFun)

x0=x;fx0=fx;xo=x;fo=fx;ifk==MaxIterfprintf('Justbestin%di15-4】最速下降法求解无约束最优化问题实例。采用最速下降法求如下函数的f(x,y)x(x5y)y(yg(x2x5yx2y4)。在中编写函数ex1504.m来进行求解,具体代码如下所示。f1504inline('x(1)*(x(1)-5-x(2))+x(2)*(x(2)- x0=[14];TolX=1e-4;TolFun=1e-9;MaxIter=100;[xo,fo]=>>xo fo=-x4.6667,y4.3333时,函数f(xyx(x5yyy4)取得最小值-20.3333。此结果与【例15-3】的Nelder-Mead方法所得结果相同。f(x)的最优化解等同于寻找其梯度函数g(x)求得目标函数f(x)g(xg(x)0,从而得到f(x)取最小值时的点x。设函数为f(xkf(x)f(xk)f(x)Tk

[xxk]1[xxk]T2f(x)

[xxkf f(xk)gT[xx]1[x

]TH[xx

f(xk1)f(xk)gT

x]f

)

gTg/

kk kf(x)'0gkHk[xxk]0xk1xkHkgkf(x)xHk2f(x)x15-215-2中可以15-2牛顿法与最速下降法过程比牛顿算法的是找到g(x)的零点所以任何求解向量非线性方程的解法都可以用来15-5】牛顿法求解无约束最优化问题实例。采用牛顿法求如下函数的最小值问f(x,y)x(x5y)y(y原函数为f(xy)x(x5yyy4)g(x)2x5x2y4) 中编写函数ex1505.m来进行求解,具体代码如下所示f1505inline('x(1)*(x(1)-5-x(2))+x(2)*(x(2)-4)','x');%grad=inline('[2*x(1)-5-x(2),-x(1)+2*x(2)-4]','x目标函数的梯度函数x0=[-8;-8];xo=fsolve(grad,x0,options) %用fsolve求解非线性方程g(x)=0>>Optimizationterminated:first-orderoptimalityislessthanxo=yo=-

y4.3333时,函数f(xyx(x5yyy4)步骤1x0,估计最小值区间的下边界l,上边界u,选定最大迭代次数kmax0,退火因子q0(退火速度较快时,因子较大值f。2xx0

x0

f0f(x03:kk0k{生成一个在[-1,1]N×1y,yx大小相同。利用1定理计算x: (1)y

x(ul)*

(y),g(

signy (kkmax) x1x如果ff(x1f(x)0或者在[0,1]上生成的均匀分布的随机数z<p(步长为xexp((kkmaxqf/f(xfxx1,f(x)f(x1如果f(xf0x0x,f0f(x0}用任何一种求局部最优化的算法来寻找f(x)的最小值点。算法的实在中编程实现的模拟退火算法为:Opt_Simu。调用格式:[xo,fo]Opt_Simu(f,x0,l,u,kmax,q,TolFun)。其中,f为函数名;x0为搜索初始值;l为搜索区间上限;ukmaxqxofoxo模拟退火算法的编程实现如下1定理的程序实现见%模拟退火法中的mu^(-1)定理functionxx=(((1+mu).^abs(y)-模拟退火算法主程序为function[xo,fo]=模拟退火算法求函数f(x)的最小值点,且lxf:待求函x0:初值l,u分别为搜索区间的上下kmax:%q退火因子TolFun函数容许误ifnargin<7TolFun=1e-ifnargin<6q=1;ifnargin<5kmax=100;N=length(x0); x=x0;fx %函数在初始点x0处的函数xo=x;fo=fx;forkTi=mu 计算dx=Mu_Inv(2*rand(size(x))-1,mu).*(u-l);%步长dxx1=x+dx; %将x1限定在区间[l,u]x1=(x1<l).*l+(l<=x1).*(x1<=u).*x1+(u<x1).*u;fx1=feval(f,x1);df=fx1-%如果fx1<fx或者概率大于随机数ifdf<0|rand<exp(-Ti*df/(abs(fx)+eps)/TolFun)x=x1;fx=iffx<xo=x;fo=fx1;15-6f(x,y)5sin(xy)x2解:在中编写函数ex1506.m来进行求解,该程序中分别采用了函clearfinline('5*sin(x(1)*x(2))+x(1)^2+x(2)^2','x');l=[-5-5]; u=[5 x0=[1TolFun=1e-9;kmax=800;%%%%用Nelder-Meat法[xo_nd,fo]= [xos,fos]=fminsearch(f,x0)[xou,fou]=fminunc(f,x0)q[xo_sa,fo_sa]15-1取不同初值时,不同算法所得的最优xo[10767,1fo-2xo[10767,1fo-2xo[10767,1fo2xo[10767,1fo-2xo[48115,4fo41xo[41070,4fo29xo[10791,1fo2xo[20738,2fo4xo[10767,1fo2xo[10767,1fo2xo[10765,1fo215-1可知,当取不同初值时,前三种方法有可能得到局部最小值点或最大值点,15-3初始群体生成(以编码形式生成初始群体生成(以编码形式生成所是结否交叉变异

15-3遗传算法流编码:GA在进行搜索之前,先将解空间的解数据表示成遗传空间的遗传型串结构初始群体的生成:随机产生N个初始串结构数据,每个串结构数据称为一个N个构成了—个群体。GA以这N个串结构数据作为初始点开始迭代同生物界一样,GA0.001~0.01之间。变异为新算法的实 调用格式:[xo,fogenetic(fx0,luNp,Nb,PcPmetakmax)其中,fx0luNpPc为交叉概率;Pm为变异概率;eta为学习率;kmaxxofoxo遗传算法 编程包括如下几个程序文件:genetic.m(主程序文件function[xo,fo]=遗传算法求f(x)最小值s.tlxN=length(x0);ifnargin10,kmax100 ifnargin<9|eta>1|eta<=0,eta=1;end%学习率eta,(0<eta<1)ifnargin<8,Pm=0.01;end %变异概率默认值为0.01ifnargin7,Pc %交叉概率默认值为ifnargin<6,Nb=8*ones(1,N);end%每一变量的遗传值(二进制数)ifnargin<5,Np=10;end NNb=sum(Nb);xo=x0(:)';l=l(:)';u=fo=feval(f,xo);X(1,:)=xo;forn=2:Np,X(n,:)=l+rand(size(x0)).*(u-l);end%初始群体随机数组P=gen_encode(X,Nb,l,u); %编码为2进制字串fork=X= %为10进制forn=1:Np,fX(n)=[fxb,nb]=min(fX); iffxb<fo,fo=fxb;xo=X(nb,:);endfX1max(fxb) fXm=iffXm< %%%%%下一forn= %准P= %对下一代编is=shuffle([1:Np]);forn=1:2:Np-1ifrand<P(is(n:n+1),:)=crossover(P(is(n:n+P=functionP=%将群体X的状态编码为二进制数组 N=length(Nb); forn=1:Npb2=form=b1=b2=b2+Xnm=(2^Nb(m)-1)*(X(n,m)-l(m))/(u(m)-l(m)); P(n,b1:b2)=dec2bin(Xnm,Nb(m)); %10进制转换为2functionX=%将二进制数组P为群体X的状态矩Np N= forn=1:Npb2=0;form=b1=b2+b2=b1+Nb(m)-程functionchrms2=Nbblength(Nb);b2=0;form=1:Nbbb1=b2+1;bi=b1+mod(floor(rand*Nb(m)),Nb(m));b2=b2+Nb(m);tmp=chrms2(1,bi:b2);chrms2(1,bi:b2)=chrms2(2,bi:b2);chrms2(2,bi:b2)=tmp;functionP=Nbb=length(Nb);forn=1:size(P,1)b2=form=1:Nbbifrand<Pmb1=b2+bi=b1+mod(floor(rand*Nb(m)),Nb(m));b2=b2+Nb(m);P(n,bi)=

functionis=%打乱次N=length(is);forn=N:-1:2in=ceil(rand*(n-

tmpis(in);is(inis(nis(n)tmp将第n个元素与第in15-7】f(x,y)x416x25xyy416y2解:在中编写函数ex1507.m来进行求解,具体代码如下所示finline('x(1)^4-16*x(1)^2-5*x(1)*x(2)+x(2)^4-16*x(2)^2-5*x(2)','x');l=[-5-5]; u=[5 %上x0=[0Np Nb=[1212]; Pc=0.5; %交叉概率Pm eta= kmax=200; [xo_gen,fo_gen]=xos fos=-xo_gen fo_gen=-由运算结果可知,用优化工具箱的函数fminsearch计算时,当x3.0453,y3.1031时函数取最小值186.4878,用遗传算法求解时,当x=2.9805,y=3.3150时函数取最小值184.2604。15.2约束最优的相应的的优化工具箱的函数将在15.3节介绍。

fh1(x) h2(x) h(x) hM MMminl(x,)f(x)Th(x)f(x)mhmx的偏导等于零gj(x

j(xy20jjjj15-8】拉格朗日乘子法求解约束最优化问题实例。采用拉格朗日乘子法求如下

f(x1x2x1x2,其中x2x22 minl(x)x1x2(x2x22 中编写函数ex1508.m来进行求解,具体代码如下所示%用syms表示出转化后的无约束函数symsxylama%分别求函数关于x、y、lama%令偏导为零,求解x、 %将x表示为lama函 %将y表示为lama函数 %代入dlama得关于lama的一元函数 %求解得lamao %求得取极值处的 xo=-yo=-fo=-惩罚函数法所求解的最优化问题的限制条件可以是没有严格零约束的模糊的或宽松的限制。

f„H1(x) G1„H(x) 0,G(x)

步骤m mminl(x)f(x)

mH2(x)vm

15-9】惩罚函数法求解约束最优化问题实例。采用惩罚函数求解下面的最优化

f(x)x11)24(x21.5)2x11.2)20.4(x20.5)2

G(x)2x1x1x25x26„ x1x2

x24x2

55minl(x)[(x11)24(x21.5)2][(x11.2)20.4(x20.5)2]vmm(Gmvm1

m

(x))

ifGm(x)

,emexp(emGm(x))ifGm(x)首先编写函数function[fc,f,c]=f=((x(1)+1)^2+4*(x(2)-1.5)^2)*((x(1)-1.2)^2+0.4*(x(2)-v=[11111e[1111 %fcfv*((c %新的目标函 优化工具箱的函数fminsearch基于梯度的方法有最速下降法以及优化工具箱的函数fminuncex1509.mf='f1509';x0=[30];TolX=1e-4;TolFun=1e-9;alpha0=1;[xo_Nelder,fo_Nelder]Opt_Nelder(f,x0,TolX,TolFun,MaxIter);%Nelder法[fc_Nelder,fo_Nelder,co_Nelder]f1509(xo_Nelder);%Nelder方法结[xo_s,fo_s]fminsearch(f,x0 [fc_s,fo_s,co_sf1509(xo_s ');%xo_steep=Opt_Steepest(f,grad,x0,TolX,TolFun,alpha0); [fc_steep,fo_steep,co_steep]=f1509(xo_steep); [xo_u,fo_u]=fminunc(f,x0); [fc_u,fo_u,co_u Nelder方法:满足约束条件,结果正xo_Nelder=0.5923fc_Nelder=1.6310fo_Nelder1.6310%最小值co_Nelder=%四项约束值均小于0,满足条基于梯度算法所得结xo_steep=0.2441fc_steepfo_steep2.1463不是最小值co_steep=0.11180,不满足约束条xo_sxo_s=0.5916fc_sfo_s1.6326co_s=%0Warning:Gradientmustbeprovidedforfc_u=fo_u=83.5000%不是最小值co_u=003.50000,15.3 优化工具箱的最优化函上两节中给出了处理最优化问题的一些算法原理及其对应的程序。在这一节中将主要讲述中优化工具箱的的最优化函数的具体使用以及它们的用法比较。oolbox,表表15-2中求最小值的函最优化问题求解二进制整数规划问题,约束条件包含等式和不等解决多目标实现问在一个确定的区间上寻找单变量函数的最小值确定有约束、非线性、多变量函数的最小值求解最小最大值问确定无约束、多变量函数的最小值确定无约束、多变量函数的最小值确定半无限、有约束、多变量、非线性函数的最小值求解线性规划问求解二次规划问表15-3中求解等式最优解的函 \用于矩阵左除,可解线性方求解非线性单变量连续方程的零表15-4求最小二乘法拟合系数最优解函 在最小二乘意义下求解非线性曲线拟合求解有约束线性最小二乘问求解非线性最小二乘求解非负最小二乘问minfx

x1xxfminbnd(fun,x1,x2,options)式中,fun为一元函数,x1,x2分别为区间的上下界。此函数用法简单,此处不举例工具箱中用于求解多变量无约束函数最小值问题的函数有fminsearch和编函数Opt_Nelder在计算上有区别)编写的,该算法不涉及偏导的计算。xfminsearch(fun,xfminsearch(fun,x0,options)[x,fval]fminsearch(...)[x,fval,exitflag]fminsearch(...)[x,fval,exitflag,output]式中,x、x0为向量形式。其中,x为对应的最优解,x0optimsetexitflag为退出标志;exitflag>0x;exitflag0迭代次数超过;exitflag<0output输出解题信息,关的迭代次数、函数值计算次数、在x处的梯度范数和所式中,param1,param2…为优化参数名,value1,value215-5常用优化参数说 正值,如1e-变量误差容正值,如1e-函数值误差正整数,如最大迭代次【例15-10】无约束最优化函数应用实例1。采用 minf(x1,x2)2x34xx28x

x3解:

1 1

xos yos=-用fminunc求解,取初值为[0,0], >>[xom,yom]=fminunc('2*x(1)^3+4*x(1)*x(2)^2-8*x(1)*x(2)+x(2)^3',[00])Warning:Gradientmustbeprovidedfortrust-regionmethod;usingline-searchmethod>InfminuncatOptimizationterminatedattheinitialpoint:therelativemagnitudeofthegradientatx0lessthanxom yom=用fminunc求解,取初值为[0,1],在命令窗口中继续输入>>[xom,yom]=fminunc('2*x(1)^3+4*x(1)*x(2)^2-8*x(1)*x(2)+x(2)^3',[01])Warning:Gradientmustbeprovidedfortrust-regionmethod;usingline-searchmethod>InfminuncatOptimizationterminated:relativeinfinity-normofgradientlessthanxom yom=-可知f(x1x22x34xx28x

x3在x10.7884,x2

1 1 fminsearchfminunc在求

NNnn

f2lsqnonlin可以给出上述问题的非线性最小二乘解,其调xxx即可用lb,ub设定解区间的上下限。options用于设定误差容限、迭代次数、算法等。【例15-11】 无约束最优化函数应用实例2。采用lsqnonlin函数求如下形式的最小 (22kekx1ekx2)2kfunction%%15-11函求最小二乘解,编写.m文件%ex1511.m用lsqnonlin求解最小二乘问clearx00.3 初值[x,resnorm] 调用最优化函数求得x与平方和残Optimizationterminated:normofthecurrentstepislessthanOPTIONS.TolX.x= resnorm 故f(x1,x2) (22kekx1ekx2)2在x10.2578,x20.2578处取最小值 k先引入中求解约束最优化问题的功能强大的函数fmincon。minf

且l剟 u优化工具箱的函数fmincon的具体用法如下所示:[xo,fo]fmincon('ftn',x0,A,[xo,fo]fmincon('ftn',x0,A,b,Aeq,[xo,fo]fmincon('ftn',x0,A,b,Aeq,beq,l,[xo,fo]fmincon('ftn',x0,A,b,Aeq,beq,l,u,'nlcon',p1,x0设置l(i)inf或u(i)inf。'nlcon':用.m文件定义的非线性约束函数。该函数返回两个输出值,一个为不等式约束c(x)0,另一个为等式约束ceq(x)0;如果不适用此类约束,则输入方括号“[]其详细说明,可以在命令窗口中输入“helpoptimset”进行帮助查询。p1,p2f(x)c(x),ceq(x)的和最优化问题有关的fo15-12】1。采用约束最优化函数求解如下形式的最优minf(x)ex(4x22x24xx

1 1.5x1x2x1x2剟

x1x2

写函数fcon1512.m,用来输出非线性约束。function %非线性不等式约束c<=0 ex1512.m%ex1512.m用函数fminconclearallx0=[-11];x=- fval故f(xex(4x22x24xx2x1)在约束条件为1.5x1x2x1x2„0 1 x1x20,x1x2„10x11.2247,x21.22471.895115-13】2。采用约束最优化函数求如下函数的最优化minf(x)x1x2x3。x12x22x3剟0,x12x2 解:实现如下%ex1513.m用fminconclearA=[-1,-2,-2;1,2,2];%A*x<=bx=fval=-故f(xx1x2x3在满足约束条件x12x22x3剟0,x12x2x124,x212,x312处取最小值3.4560e003

72另外还要介绍两个用于求解约束最优化问题的函数,它们分别是fminimaxlsqlinminmaxfn Ax剟b,Aeqxbeq,c(x) 0,ceq(x)0,且l剟x 其具体调用形式与fmincon相同。minCxdx

x?u[xo,fo][xo,fo][xo,fo][xo,fo][xo,fo]优化工具箱的函数linprog用于求解线性规划问题。所谓线性规划问题是指minf(x)fT x?u该函数的调用形式如下(3个[xo,fo]linprog(f,A,b,Aeq,Beq,l,u,x0,options)fmincon的主要区别是其对应的目标函数是线性的,约束条件也是线性的,且其可以不设定初值。该函数在解线性最优化问题时,较之fmincon更有效。 minf(x)5x14x26x1x2x3剟8,x12x2 剟

2,x3?解:在中编写函数ex1514.m来进行求解%ex1514.m解线性规划问f=[- l=[- %%%%用linprog求%%%%用fmincon求Optimizationxol fol=-xoc foc=-故f(x)5x14x22x3在满足一定约束条件下在x11.3333,x2x30处取最小于linprog,不同的是其目标函数为二次函数。即quadprog用于处理如下最优化问题:

1xTHxfT2 x?调用形式如下(4个[xo,fo]最优化问题应用综合实15-15】x、y千克,其C(x,y)x22xy2y2G(x,y)200x300故此最大利润问题等价于目标函数f(x,y)G(x,y在自变量大于零的区间上的最小function 分别用优化工具箱的函数fminunc以及fminsearch求解xo_s=50.000050.0000yo_s=-1.0500e+004xo_m=50.000050.0000yo_m=-1.0500e+004x50,y505010500元。15-16】4m的正方形铁板,在四个角处剪去V(x)(42x)2minf(x)V(x)x(42

温馨提示

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

评论

0/150

提交评论