matlab教程-matlab6.0初級優(yōu)化問題_第1頁
matlab教程-matlab6.0初級優(yōu)化問題_第2頁
matlab教程-matlab6.0初級優(yōu)化問題_第3頁
matlab教程-matlab6.0初級優(yōu)化問題_第4頁
matlab教程-matlab6.0初級優(yōu)化問題_第5頁
已閱讀5頁,還剩23頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領

文檔簡介

5章優(yōu)化問線性規(guī)劃問題是目標函數(shù)和約束條件均為線性函數(shù)的問題,6.0解

f

xRnsub.to:AxAeqxf、x、b、beq、lb、ub為向量,A、Aeq 6.0版中線性規(guī)劃問(LinearProgramming)已用函數(shù)linprog 5.x版中的lp函數(shù)。當然,由于版本的向下兼容性,一般說來,低版本中的函數(shù)在6.0版中仍可使用。函 格 x= %求 f'

Axbx= %等式約束Aeqxbeq束AxbA=[],b=[]x= %x的范圍lbxub式約束AeqxbeqAeq=[],beq=[

x= %x= options[x,fval]=linprog(…) %返回目標函數(shù)最優(yōu)值,即fval=f'*x。[x,lambda,exitflag]=linprog(…) %lambda為解x的Lagrange乘子。[x,lambda,fval,exitflag]=linprog(…) %exitflag為終止迭代的錯誤[x,fval,lambda,exitflag,output]= %output 若exitflag>0表示函數(shù)收斂于解x,exitflag=0表示超過函數(shù)估值或迭lambda=upper表示上界ub,lambda=ineqlin表示不等式約束,lambda=eqlin表示等式約束,lambda0元素表示對應的約束是有效約束;output=iterations表示迭代次數(shù),output=algorithm表示使用的運算規(guī)則,output=cgiterations表示PCG迭代次數(shù)。例5- 求下面的優(yōu)化問

5x14x2

3x12x24x33x12x20x1,0x2,0>>f=[-5;-4;->>A [1- >>b=[20;42;>>lb=>>[x,fval,exitflag,output,lambda]=x= fval %-exitflag= outputiterations: %cgiterations:algorithm:'lipsol' lambda=ineqlin:[3x1double]eqlin:[0x1double]upper:[3x1double]lower:[3x1>>lambda.ineqlinans=>>lambda.lowerans=231foptions0options(2)-x的精度控制(1e-4)。options(3)-F的精度控制(1e-4)。options(4)-約束的結(jié)束標準(默認值為1e-6)。options(6)-0BFCG1

options(7)-01options(8)-(Lambdaoptions(9)-1。options(15)-用于目標—達到問題中的特殊目標。options(17)-優(yōu)化過程中變量的最大有限差分梯度值。options(18)-步長設置(1或更小)。Foptions已經(jīng)被optimset和optimget代替查函數(shù)optimset和optimget單變量函數(shù)求最小值的標準形式為x

在5.x中使用fmin函數(shù)求其最小值函 格 x= %返回自變量x在區(qū)間

x2取最小值時x值,fun為目標函數(shù)的表達式字符串 自定義函數(shù)的函x=fminbnd(fun,x1,x2,options) %options為指定優(yōu)化參數(shù)選項[x,fval]=fminbnd(…) %fval為目標函數(shù)的最小值[x,fval,exitflag]=fminbnd(…) %xitflag為終止迭代的條件[x,fval,exitflag,output]=fminbnd(…) %output為優(yōu)化信息說明exitflag>0xexitflag=0,表示超過函數(shù)估計值或迭代的最大數(shù)字,exitflag<0表示函數(shù)不收斂于x;若參數(shù)output=iterations表示迭代次數(shù),output=funccount表示函數(shù)賦值次數(shù),output=algorithm表示所使用的算法。例5- 計算下面函數(shù)在區(qū)間(0,1)內(nèi)的最小值f(x)x3cosxxlog解:[x,fval,exitflag,output]=fminbnd('(x^3+cos(x)+x*log(x))/exp(x)',0,1)x=fvalexitflag1outputiterations:funcCount:algorithm:'goldensectionsearch,parabolic例5- 在[0,5]上求下面函數(shù)的最小值f(x)(x3)3解:先自定義函數(shù):在編輯器中建立M文件為functionf=myfun(x)f=(x-3).^2-1;myfun.m>>x3多元函數(shù)最小值的標準形式為 x其中:x為向量,如 在5.x中使用fmins求其最小值命 利用函數(shù)fminsearch求無約束多元函數(shù)最小函 格 x= fun串 自定義函數(shù)的函數(shù)柄x=fminsearch(fun,x0,options) %options查optimset[x,fval]=fminsearch(…) [x,fval,exitflag] exitflag[x,fval,exitflag,output] %output注意:fminsearchNelder-Mead1例5- x214y 最小值1 X 或 編輯器中建立函數(shù)文 myfun.m>>X=fminsearch [0,0])或>> X 命 利用函數(shù)fminunc求多變量無約束函數(shù)最小函 x=fminunc(fun,x0) %返回給定初始點x0的最小函數(shù)值點x=fminunc(fun,x0,options) %options為指定優(yōu)化參數(shù)[x,fval]=fminunc(…) %fval最優(yōu)點x處的函數(shù)值[x,fval,exitflag]= %exitflag[x,fval,exitflag,output] %output[x,fval,exitflag,output,grad] grad為函數(shù)在解x

[x,fval,exitflag,output,grad,hessian]= %目標函數(shù)在解注意:2fminuncfminsearch更有效,但當所選函數(shù)高度不連續(xù)時,使用fminsearch效果較好。1例5- 求f(x)3x21

22>>2>>x0=[1>>x1.0e-008- fval1.3953e-exitflag1outputgrad

iterations:funcCount:stepsize:1.2353orderopt:1.6772e-007algorithm:'medium-scale:Quasi-Newtonline1.0e-006-hessian >>fun=inline('3*x(1)^2+2*x(1)*x(2)+x(2)^2')fun=Inlinefun(x)=>>x0=[1>>x=fminunc(fun,x0)x=1.0e-008- x

C(x)Ceq(x)0AxbAeqxbeq其中:x、b、beq、lb、ub是向量,A、Aeq為矩陣,C(x)、Ceq(x)是返回向在5.x中,它的求解由函數(shù)constr實現(xiàn)函 格 x=x=x=x=x=fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)[x,fval]=fmincon(…)[x,fval,exitflag]=[x,fval,exitflag,output]=fmincon(…)[x,fval,exitflag,output,lambda]=fmincon(…)[x,fval,exitflag,output,lambda,grad]=fmincon(…)[x,fval,exitflag,output,lambda,grad,hessian]=fmincon(…)參數(shù)說明:funx0A、b滿足線性不等式約束AxbA=[],b=[beq=[

Aeq、beq滿足等式約束Aeqxbeq,若沒有,則取Aeq=[],lb、ub滿足lbxublb=[],ub=[];nonlcon的作用是通過接受的向量x來計算非線性不等約束Cx和等式約束Ceqx)0xCCeq定函數(shù)柄來使用,如:>>x=fmincon(@myfun,x0,A,b,Aeq,beq,lb,ub,@mycon),先建立非線性約束函數(shù),并保存為mycon.m:function[C,Ceq]=C= %x處的非線性不等約束Cx0Ceq= %x處的非線性等式約束Ceqx)0lambdaLagrangeoutputgradxhessianxHessiab例5- 求下面問題在初始點(0,1)處的最優(yōu) 1x22x1 (x11)2x22x13x26 (x11)2x22x13x2先 編輯器中建立非線性約束函數(shù)文件 [c,ceq]=mycon(x)ceq=[ %M >>x0=[0>>A=[-2 %>>Aeq= %>>beq=[>>lb=[ %x>>ub=[x fval-exitflag= outputiterations:funcCount:stepsize:algorithm:'medium-scale:SQP,Quasi-Newton,line-search'orderopt:[]iterations:[]lambda=

lower:[2x1 %xlambda.lowerupper:[2x1 %x0eqlin:[0x1 %0eqnonlin:[0x1double] ineqlin:2.5081e-008 ineqnonlin:6.1938e-008 grad= 1.0e-006*-0hessian %Hessian -- 例5- 求下面問題在初始點x=(10,10,10)處的最優(yōu)解 f(x) x1x22x3

x12x22x3x12x22x3>>fun='->>>>A=[-1-2-2;12>>>>x fval-二次規(guī)劃問題(quadraticprogramming)

1xHxfxAxAeqxbeqlbxub其中,H、A、Aeq為矩陣,f、b、beq、lb、ub、x為向量5.x版中的qp函數(shù)已被6.0版中的函數(shù)qurog取代函 格 x= %其中H,f,A,b為標準形中的參數(shù),x為目x=qu %Aeq,beq滿足等約束條Aeqxbeqx= lb,ub分別為解x同

xqurog(H,f,A,b,Aeq,beq,lb,ub,x0)%x0x=qurog(H,f,A,b,Aeq,beq,lb,ub,x0,options)%options[x,fval]=qurog(…)%fval為目標函數(shù)最優(yōu)[x,fval,exitflag]=qurog(…)%exitflag與線性規(guī)劃中參數(shù)意義相[x,fval,exitflag,output]=qurog(…)%output與線性規(guī)劃中參數(shù)[x,fval,exitflag,output,lambda]=qurog(…)%lambda例5- 求解下面二次規(guī)劃問

2 x1x2x12x22x1x20 0f(x1xHxfx則H 1,f2,xx1 2

中實現(xiàn)如下>>H=[1-1;-12]>>f=[-2;->>A=[11;-12;2>>b=[2;2;>>lb=>>[x,fval,exitflag,output,lambda]=qurog(H,f,A,b,[],[x= fval %-exitflag= outputiterations:algorithm:'medium-scale:active-set'orderopt:[]iterations:[]lambda=lower:[2x1double]upper:[2x1double]eqlin:[0x1double]ineqlin:[3x1>>lambda.ineqlinans=0>>lambda.lowerans=00說 第1、2個約束條件有效,其余無效例5-9 f(x1,x2)=x1x2+3

x1

x2 中實現(xiàn)如下>>Aeq=[1>>[x,fval,exitflag,output,lambda]=qurog(H,f,[],[xfval-exitflag1outputorderopt:iterations:cgiterations:algorithm:[1x58lambdaeqlin:1.0000ineqlin:[]lower:[upper:[ fx C(x)Ceq(x)0AxbAeqxbeqK1(x,w1)K2(x,w2)…Kn(x,wn)w1,w2,,wn2的向量。MTALAB5.xseminf函數(shù)格式x=x=x=x=x=fseminf(fun,x0,ntheta,seminfcon,A,b,Aeq,beq,lb,ub,options)[x,fval]=fseminf(…)[x,fval,exitflag]=[x,fval,exitflag,output]=fseminf(…)[x,fval,exitflag,output,lambda]=fseminf(…)參數(shù)說明:x0funA、b由線性不等式約束AxbA=[],b=[];Aeq、beq由線性等式約束AeqxbeqAeq=[],beq=[

Lb、ubx的范圍lbxuboptionsnthetaseminfcon用來確定非線性約束向量C和Ceq以及半無限約束的向K1,K2,…,Kn,通過指定函數(shù)柄來使用,如:x=先建立非線性約束和半無限約束函數(shù)文件,并保存為function[C,Ceq,K1,K2,…,Kntheta,S]=%Sw% S= %Sntheta2w1= %w2= %…wntheta= %K1= %xw1K2= %xw2…Kntheta=…%xwnthetaC=… %在x處計算非線性不等式約束值Ceq=… %在x處計算非線性等式約束值如果沒有約束,則相應的值取為“[],如Ceq=[]fvalx處的目標函數(shù)最小值;exitflag為終止迭代的條件;output為輸出的優(yōu)化信息;lambdaxLagrange乘子。例5- 求下面一維情形的最優(yōu)化問x

f(x)(x10.5)2(x20.5)2(x3K1(x,w1)sin(w1x1)cos(w1x2)1(w150)2sin(w1x3)x3K2(x,w2)sin(w2x2)cos(w2x1)1(w250)2sin(w2x3)x31w11w2K1(x,w1)sin(w1x1)cos(w1x2)1(w150)2sin(w1x3)x31K2(x,w2)sin(w2x2)cos(w2x1)1(w250)2sin(w2x3)x31function[C,Ceq,K1,K2,S]=mycon(X,S)% S= 0; %w1=w2=% %C=[];Ceq=[%plot(w1,K1,'-',w2,K2,':'),title('Semi-infinite然后 命令窗口或編輯器中建立M文件fun='sum((x-x0=[0.5;0.2;0.3]; %Startingguess[x,fval]=fseminf(fun,x0,2,@mycon)xfval>>[C,Ceq,K1,K2]mycon %ans=-ans=-5-例5- x

f(x)(x10.2)2(x20.2)2(x3K1(x,w)sin(w1x1)cos(w2x2)1(w150)2sin(w1x3)x3sin(w2x2)cos(w1x1)1(w250)2sin(w2x3)x31w11w2x0=[0.25,0.25,0.25]function[C,Ceq,K1,S]=mycon(X,S)% s=[22];%w1x=w1y=[wx,wy]=% %C=[];Ceq=[%m=surf(wx,wy,K1,'edgecolor','none','facecolor','interp');camlightheadlighttitle('Semi-infiniteconstraint')然后 命令窗口下鍵入 令>>fun='sum((x->>x0=[0.25,0.25, 結(jié)果為(如圖x fval

5->>[c,ceq,K1] %ans=-x

C(x)Ceq(x)0AxbAeqxbeqlbxub其中:x、b、beq、lb、ub是向量,A、Aeq為矩陣,C(x)、Ceq(x)F(x)在5.x中,它的求解由函數(shù)minmax實現(xiàn)函 格 x=x=x=x=x=x=fminimax(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)[x,fval,maxfval]=fminimax(…)[x,fval,maxfval,exitflag]=fminimax(…)[x,fval,maxfval,exitflag,output]=fminimax(…)[x,fval,maxfval,exitflag,output,lambda]=fminimax(…)參數(shù)說明:funx0Ab滿足線性不等約束AxbA=,b=[;lb、ub滿足lbxublb=[],ub=[];nonlconx來計算非線性不等約束Cx0等式約束Ceqx)0xCCeq先建立非線性約束函數(shù),并保存為mycon.m:function[C,Ceq]=C= %x處的非線性不等約束Cx0Ceq= %x處的非線性等式約束Ceqx)0optionsfval為最優(yōu)點處的目標函數(shù)值;maxfvalx處的最大值;exitflag為終止迭代的條件;lambdaLagrangeoutput例5- 求下列函數(shù)最大值的最小化問[f1(x),f2(x),f3(x),f4(x),f5(x)12 其中f1(x2x2x212

22f2(x)x222f3(x)x13x2 f5(x)x1x2myfun.m:functionfmyfun(x)f(1)=2*x(1)^2+x(2)^2-48*x(1)-40*x(2)+304;f(2)=-x(1)^2-f(3)=x(1)+3*x(2)-f(4)=-x(1)-f(5)=x(1)+x(2)-x0=[0.1; %[x,fval]=xfval - - - -例5-13 目標函數(shù)為:[|f1(x)|,|f2(x)|,|f3(x)|,|f4(x)|,|f5(x)|]解:先建立目標函數(shù)文件(與上例相同M>>x0=[0.1; %>>options %>>[x,fval]=fminimax(@myfun,x0,[],[],[],[],[],[],[xfval - - - - [f1(x),f2(x),m gj(x) x(x1x2,xn),在同一約束下,當目標函數(shù)處于狀態(tài)時,不存在最優(yōu)解x使所有目標函數(shù)同時達到最優(yōu)。此時使用有效解,即如果不存在xS,使得fi(x)fi(x*),i=1,2,…m,x* 中,多目標問題的標準形式 x, F(x)weightC(x)0AxbAeqx其中:x、b、beq、lb、ub是向量;A、Aeq為矩陣;C(x)、Ceq(x)F(x)是返回向量的函數(shù);F(x)、C(x)、Ceq(x)可以是非線性函數(shù);weight為權(quán)值系數(shù)向為一個松弛因子標量;(x)為多目標規(guī)劃中的目標函數(shù)向量。在5.x中,它的最優(yōu)解由attgoal函數(shù)實現(xiàn)函 格 x=x=x=x=x=x=fgoalattain(fun,x0,goal,weight,A,b,Aeq,beq,lb,ub,nonlcon,options)[x,fval]=fgoalattain(…)[x,fval,attainfactor]=[x,fval,attainfactor,exitflag]=fgoalattain(…)[x,fval,attainfactor,exitflag,output]=fgoalattain(…)[x,fval,attainfactor,exitflag,output,lambda]=fgoalattain(…)x0funfun

goalweightA、b滿足線性不等式約束AxbA=[],b=[]Aeq、beq滿足線性等式約束AeqxbeqAeq=[,beq;lb、ublbxub;nonlconx來計算非線性不等約束Cx0等式約束Ceqx)0xCCeq )建立非線性約束函數(shù),并保存為mycon.m:function [C,Ceq]=C= %計算x處的非線性不等式約束Cx0Ceq= %x處的非線性等式約束Ceqx)0optionsfvalx處的值;attainfactorx處的目標規(guī)劃因子;exitflag為終止迭代的條件;outputlambda為解x處的Lagrange乘子例5-14 Axy 0

0A

10

B

22

C01 01x(ABKC)xBuyCx

4Kij

(i,j1,functionF=F=sort(eig(A+B*K*C)); %估計目標函數(shù)值A=[-0.500;0-210;01-B=[10;-22;0C=[100;00K01-1;1- %goal=[-5-3-1]; %為閉合環(huán)路的特征值(極點)設置目標值向weight %lb=- %ub= %options=optimset('Display','iter'); %設置顯示參數(shù):顯示每次迭代的輸 Step- 1 1- -Hessian - -Hessianmodified -1- - -Hessian - -4.25e-Hessian - -Hessianmodified - -Hessian -1 - Hessianmodified - -1.22e-HessianmodifiedOptimizationterminatedSearchdirectionlessthan2*options.TolXandumconstraintviolationislessthanoptions.TolConActive1249K- -- -fval---attainfactor-x

1Cxd AxAeqxbeqlbxub其中:C、A、Aeq為矩陣;d、b、beq、lb、ub、x是向量。在5.x中,約束線性最小二乘用函數(shù)conls求解。 x=lsqlin(C,d,A,b) %求在約束條件Axb下,方程Cx=d的最小二乘解x。x= %Aeq、beq滿足等式約束Aeqxbeq若沒有不等式約束,則設A=[],b=[]。x= %lb、ub滿足lbxub,若沒有Aeq,beq=[x= x0xlb=[,ub=[]x= options數(shù)件

[x,resnorm]=lsqlin(…) %resnorm=norm(C*x-d)^2,即2-范數(shù)。[x,resnorm,residual]=lsqlin(…) [x,resnorm,residual,exitflag]= %exitflag為終止迭代的[x,resnorm,residual,exitflag,output]= %output[x,resnorm,residual,exitflag,output,lambda]= %lambdaxLagrange例5-15 Axblbxx 0.0578;0.3528;0.8131;0.0098; d=Ab=[0.5251;0.2026;lb=-0.1*ones(4,1);ub=2*ones(4,1);[x,resnorm,residual,exitflag,output,lambda]=lsqlin(C,d,A,b,[],[x--resnormresidual-exitflag %xoutputiterations:algorithm:'medium-scale:active-set'orderopt:[]iterations:[]lambda=lower:[4x1double]upper:[4x1double]eqlin:[0x1double]ineqlin:[3x1lambda.ineqlin非線性數(shù)據(jù)(曲線), 1F(x,xdata)ydata21(F(x,xdatai)ydatai 2在5.x中,使用函數(shù)curvefit解決這類問題。 格 x=x=x=lsqcurvefit(fun,x0,xdata,ydata,lb,ub,options)[x,resnorm]=lsqcurvefit(…)[x,resnorm,residual]=lsqcurvefit(…)[x,resnorm,residual,exitflag]=lsqcurvefit(…)[x,resnorm,residual,exitflag,output]=lsqcurvefit(…)[x,resnorm,residual,exitflag,output,lambda]=lsqcurvefit(…)[x,resnorm,residual,exitflag,output,lambda,jacobian]=lsqcurvefit(…)x0為初始解向量;xdata,ydataydata=F(x,xdata)的數(shù)據(jù);lb、ub為解向量的下界和上界lbxublb=[],ub=[

options 為擬合函數(shù),其定義方式為: 其中myfun已定義 functionF=F= %xfunresnorm=sum((fun(x,xdata)-ydata).^2)xresidual=fun(x,xdata)-ydataxexitflagoutputlambdaxLagrangejacobianxfunjacobian例5- 求解如下最小二乘非線性擬合問xdataydatan 2 n

即目標函數(shù)為x

1(F(x,xdatai)22x0=[0.3,0.4,0.1]functionF=myfun(x,xdata)F=x(1)*xdata.^2+x(2)*sin(xdata)+xdata和>>xdata=[3.67.79.34.18.62.81.37.910.0>>ydata=[16.5150.6263.124.7208.59.92.7163.9325.0>>x0=[10,10, %>>[x,resnorm]=OptimizationterminatedRelativefunctionvaluechangingbylessthanOPTIONS.TolFunx= resnorm非線性最小二乘(非線性數(shù)據(jù)擬合)x

f(x)f1(x)2f2(x)2fm(x)2其中:L在5.x中,用函數(shù)leastsq解決這類問題,在6.0版中使用函f1(x)f2(x)設F(x) fm(x) 則目標函數(shù)可表達為 1F(x)21fi 2其中:x為向量,F(xiàn)(x)函數(shù)格式x=lsqnonlin(fun,x0)%x0為初始解向量;fun為fi(x,i=1,2,…,m,x=lsqnonlin(fun,x0,lb,ub)%lb、ub定義x的下界和上界:lbxubx=lsqnonlin(fun,x0,lb,ub,options) lb=[],ub=[]。[x,resnorm]lsqnonlin(…)%resnorm=sum(fun(x).^2)x

[x,resnorm,residual]lsqnonlin(…)%residual=fun(x)xfun[x,resnorm,residual,exitflag]=lsqnonlin(…)%exitflag為終止迭代[x,resnorm,residual,exitflag,output]lsqnonlin(…)%output[x,resnorm,residual,exitflag,output,lambda] %lambdaLagrage %funxJacobian例5- 求下面非線性最小二乘問題(22kekx1ekx2)2初始解向量x0=[0.3,0.4]式而不是平方和形式,因此,myfun函數(shù)應由fi(x)建立:fk(x)22kekx1ekx2 F=myfun(x)k=1:10;

F=2+2*k-exp(k*x(1))-x0=[0.3[x,resnorm]=OptimizationterminatedNormofthe

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論