Matlab 7最優(yōu)化問題求解_第1頁
Matlab 7最優(yōu)化問題求解_第2頁
Matlab 7最優(yōu)化問題求解_第3頁
Matlab 7最優(yōu)化問題求解_第4頁
Matlab 7最優(yōu)化問題求解_第5頁
已閱讀5頁,還剩11頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、Matlab 最優(yōu)化問題求解1. 無約束最優(yōu)化問題無約束最優(yōu)化問題一般描述為:minfx其中x=x1,x2xnT,該數(shù)學(xué)表示的含義是求一組x,使得目標(biāo)函數(shù)f(x)最小.這種問題也稱為最小化問題.Matlab中提供了3個(gè)求最小值的函數(shù),調(diào)用格式為:·x,fval=fminbnd(fname,x1,x2,options):求一元函數(shù)在(x1,x2)區(qū)間中的極小值點(diǎn)x和極小值fval;·x,fval=fminsearch(fname,x0,options):基于單純形算法求多元函數(shù)的極小值點(diǎn)x和極小值fval;·x,fval=fminunc(fname,x0,optio

2、ns):基于擬牛頓法求多元函數(shù)的極小值點(diǎn)x和極小值fval.這里討論的是局域極值問題,fname是定義函數(shù)m文件的文件名,fminbnd的輸入變量x1,x2分別是研究區(qū)間的左右邊界;fminsearch和fminunc的輸入變量x0是一個(gè)向量,表示極值點(diǎn)的初值.options為優(yōu)化參數(shù),可以通過optimset函數(shù)來設(shè)置,當(dāng)目標(biāo)函數(shù)的階數(shù)大于2時(shí),使用fminunc比fminsearch更有效;但是目標(biāo)函數(shù)高度不連續(xù)時(shí),使用fminsearch函數(shù)效果更好.Matlab中沒有專門求最大值的函數(shù),只要-f(x)在(a,b)上的最小值就是f(x)在(a,b)上最大值的相反數(shù).因此用fminbnd(

3、-f,x1,x2)返回函數(shù)f(x)在(x1,x2)上的最大值的相反數(shù).-例如:求函數(shù)fx=x3-2x-5在區(qū)間0,5內(nèi)的極小值和極小值點(diǎn).function fx=mymin(x)fx=x.3-2*x-5;x,fval=fminbnd(mymin,0,5)x = 0.8165fval = -6.0887因此極小值點(diǎn)為x=0.8165,極小值為-6.0887-例如:設(shè)fx,y,z=x+y24x+z2y+2z求函數(shù)f(x,y,z)在(0.5,0.5,0.5)附近的最小值.function f=fxyz(p)x=p(1);y=p(2);z=p(3);f=x+y2/4/x+z2/y+2/z;U,min=

4、fminsearch(mymin,0.5,0.5,0.5)U = 0.5000 1.0000 1.0000min =4.0000-2. 有約束最優(yōu)化問題求解有約束最優(yōu)化問題一般描述為:minx s.t, G(X)0fx其中x=x1,x2xnT,該數(shù)學(xué)表示的含義是求一組x,使得目標(biāo)函數(shù)f(x)最小,且滿足約束條件G(x)小于或等于0.這種問題也稱為最小化問題.2.1 約束條件分類·線性不等式約束:Axb·線性等式約束:Aeqx=beq·非線性不等式約束:Cx0·非線性等式約束:Ceqx=0·x的上界和下界:LbndxUbndMatlab提供了fm

5、incon函數(shù),用于求解各種約束下的最優(yōu)解問題,調(diào)用格式為:x,fval=fmincon(fname,x0,A,b,Aeq,beq,Lbnd,Ubnd,Nonf ,options)X,fname,fval,x0和options含義與求最小值函數(shù)相同,其余參數(shù)為約束條件,參數(shù)NonF為非線性約束函數(shù)的M文件名,如果該約束不存在則用空矩陣表示.-例如:求解有約束最優(yōu)化問題x s.t.minfx=0.4x2+x12+x22-x1x2+130x13x1+0.5x20.40.5x1+x20.5x10,x20function f=fop(x)f=0.4*x(2)+x(1)2+x(2)2-x(1)*x(2)

6、+1/30*x(1)3;AA = -1.0000 -0.5000 -0.5000 -1.0000bb = -0.4000 -0.5000lblb = 0 0x0x0 = 0.5000 0.5000x,f=fmincon(fop,x0,A,b,lb,options)x = 0.3400 0.3300f =0.2456 注意線性不等式約束全部是小于號,如果出現(xiàn)大于號要將不等式兩端取相反數(shù)轉(zhuǎn)換成小于號再列寫A,b矩陣.-3. 線性規(guī)劃問題求解線性規(guī)劃問題的標(biāo)準(zhǔn)形式是:minx s.t.AxbAeqx=beqLbndxUbndfxMatlab中求解線性規(guī)劃問題的函數(shù)是linprog,調(diào)用格式為:x,f

7、val=linprog(f,A,b,Aeq,beq,Lbnd,Ubnd)其中x是最優(yōu)解,fval是目標(biāo)函數(shù)的最優(yōu)值.函數(shù)中各項(xiàng)參數(shù)是線性規(guī)劃問題標(biāo)準(zhǔn)形式中的對應(yīng)項(xiàng),x,b,beq,Lbnd,Ubnd是向量,Aeq,A是矩陣,f為目標(biāo)函數(shù)的系數(shù)向量.-例如:求解線性規(guī)劃問題x s.t.minfx=2x1+x23x1+x234x1+3x26x10,x20f=2;1;A=-3,-1;-4,-3;-1,-2;b=-3;-6;-2;lb=0;0;options=optimset('Display','off');x,f=linprog(f,A,b,lb,)Optimiza

8、tion terminated.x = 0.6000 1.2000f = 2.4000-4. 詳細(xì)介紹用matlab優(yōu)化工具箱解無約束優(yōu)化問題4.1 matlab工具箱主要函數(shù)類型模型基本函數(shù)一元函數(shù)極小minFxs.t.x1<x<x2X=fminbnd(fname,x1,x2)無約束最小minF(X)X=fminsearch(fname,X0)線性規(guī)劃mincTXs.t.AXbX=linprog(c,A,b,Aeq,beq,vlb,vub)二次規(guī)劃min12xTHx+cTxs.t.AxbX=quadprog(H,c,A,b)約束最小(非線性規(guī)劃)minFXs.t.Gx0X=fmi

9、ncon(fname,X0)達(dá)到目標(biāo)問題minrs.t.Fx-wrgoalX=fgoalattain(fname,x,goal,w)極小極大問題minmaxFixs.t. Gx0X=fminimax(FG,x0)4.2 控制參數(shù)options的設(shè)置控制參數(shù)options包含了優(yōu)化程序中控制精度要求、輸出形式、算法選擇、迭代次數(shù)等.Options中常用的幾個(gè)參數(shù)的含義如下:·Display:顯示水平.取值為off時(shí)不顯示輸出;取值為iter時(shí)顯示每次迭代的信息;取值為final時(shí),顯示最終結(jié)果,默認(rèn)值為final.·MaxFunEvals:允許進(jìn)行函數(shù)評價(jià)的最大次數(shù),取值為正

10、整數(shù).·MaxIter:允許進(jìn)行迭代的最大次數(shù),取值為正整數(shù)控制參數(shù)options可以由optimset函數(shù)創(chuàng)建或修改:·options=optimset(optimfun)創(chuàng)建一個(gè)含有所有參數(shù)名,并與優(yōu)化函數(shù)optimfun相關(guān)的默認(rèn)值的選項(xiàng)結(jié)構(gòu)options.·options=optimset(param1,value1,param2,value2)創(chuàng)建一個(gè)名稱為options的優(yōu)化選項(xiàng)參數(shù),其中指定的參數(shù)具有指定值,所有未指定的參數(shù)取默認(rèn)值.·options=optimset(oldops,param1,value1,param2,value2)創(chuàng)

11、建一個(gè)名稱為oldops的參數(shù)的拷貝,用指定的參數(shù)值修改ildops中的相應(yīng)參數(shù).4.3 用matlab工具箱求解無約束優(yōu)化問題4.3.1 一元函數(shù)的無約束優(yōu)化問題解一元函數(shù)的無約束優(yōu)化問題:minfx x1xx2使用的函數(shù)是fminbnd,其常用格式:·x=fminbnd(fname,x1,x2)·x=fminbnd(fname,x1,x2,options)·x,fval=fminbnd(fname,x1,x2,options)·x,fval,exitflag=fminbnd(fname,x1,x2,options)·x,fval,exitf

12、lag,output=fminbnd(fname,x1,x2,options)Fminbnd算法基于黃金分割法和二次插值法,要求目標(biāo)函數(shù)必須是連續(xù)函數(shù),并可能給出局部最優(yōu)解.-例如:求函數(shù)f=2e-xsinx在0<x<8區(qū)間內(nèi)的最大值和最小值.function fx=fun(x)fx=2*exp(-x).*sin(x);xmin,ymin=fminbnd(fun,0,8)xmin = 3.9270ymin = -0.0279function fx=fun(x)fx=-2*exp(-x).*sin(x);x,fval=fminbnd(fun,0,8);xmax=x;ymax=abs(

13、fval);xmaxxmax = 0.7854ymaxymax =0.6448-4.3.2 多元函數(shù)的無約束優(yōu)化問題多元函數(shù)無約束最小化問題的標(biāo)準(zhǔn)型為:minFX其中X為n維變元向量.可以使用fminunc函數(shù)或fminsearch函數(shù).調(diào)用格式為:·x=fminunc(fun,x0)/x=fminsearch(fun,x0)·x=fminunc(fun,x0,options)/x=fminsearch(fun,x0,options)·x,fval=fminunc(fun,x0,options)/x,fval=fminsearch(fun,x0,options)&

14、#183;x,fval,exitflag=fminunc(fun,x0,options)/x,fval,exitflag=fminsearch(fun,x0,options)·x,fval,exitflag,output=fminunc(fun,x0,options)/x,fval,exitflag,output=fminsearch(fun,x0,options)注意:fminsearch以單純的形法尋最優(yōu)值,fminunc的算法受options參數(shù)控制:·fminunc為無約束優(yōu)化提供了大型優(yōu)化算法和中型優(yōu)化算法,由options的LargeScale控制:LargeS

15、cale=on(默認(rèn)),使用大型算法LargeScale=off,使用中型算法·fminunc為中型優(yōu)化算法的搜索方向提供了4種算法,由options的HessUpdate控制:HessUpdate=bfgs(默認(rèn)),擬牛頓法的BFGS公式HessUpdate=dfp,擬牛頓法的DFP公式HessUpdate=steepdesc,最速下降法·fminunc為中型優(yōu)化算法的步長一維搜索提供了2種算法,由options的LineSearchType控制:LineSearchType=quadcubic(缺省值),混合的二次和三次多項(xiàng)式插值LineSearchType=cubic

16、poly,三次多項(xiàng)式插值-例如:求minfx=4x12+2x22+4x1x2+2x2+1ex1編寫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)+1);編寫m文件:x0=-1,1;x=fminunc('fun1',x0);y=fun1(x);執(zhí)行結(jié)果:xx = 0.5000 -1.0000yy = 3.6609e-015-例如:Rosenock函數(shù)fx1,x2=100x2-x122+1-x12,用不同算法算出其數(shù)值最優(yōu)解,初值選為x0=-1.2,2.為直觀表示Rosenbrock函數(shù)的圖像

17、,制作如下指令m文件輸出Rosenbrock函數(shù)的圖像.x,y=meshgrid(-2:0.1:2,-1:0.1:3);z=100*(y-x.2).2+(1-x).2;surf(x,y,z)制作Rosenbrock函數(shù)的等高線圖,編寫如下M文件contour(x,y,z,20)hold onplot(-1.2,2,'o');text(-1.2,2,'start point');plot(1,1,'o');text(1,1,'solution')(1)使用fminsearch函數(shù)編寫m文件如下:f='100*(x(2)-x(

18、1)2)2+(1-x(1)2'x,fval,exitflag,output=fminsearch(f,-1.2 2)執(zhí)行結(jié)果:fun2f =100*(x(2)-x(1)2)2+(1-x(1)2x = 1.0000 1.0000fval = 1.9151e-010exitflag = 1output = iterations: 108 funcCount: 202 algorithm: 'Nelder-Mead simplex direct search' message: 1x196 char(2)使用fminunc函數(shù)用3種搜索方向(BFGS,DFP和最速下降法)及兩

19、種步長搜索(混合二、三次插值和三次插值)先建立函數(shù)文件:function f=fun2(x)f=100*(x(2)-x(1)2)2+(1-x(1)2;編寫主函數(shù)文件:%fminunc函數(shù)缺省選項(xiàng)oldoptions=optimset('fminunc');%采用中型優(yōu)化算法options=optimset(oldoptions,'LargeScale','off');%DFP法、混合二、三次插值options11=optimset(options,'HessUpdate','dfp');x11,fval11,exi

20、tflag11,output11=fminunc('fun2',-1.2 2,options11);%DFP·法、三次插值options12=optimset(options,'HessUpdate','dfp','lineSearchType','cubicpoly');x12,fval12,exitflag12,output12=fminunc('fun2',-1.2 2,options12);%BFGS法、混合二、三次插值options13=optimset(options,'

21、;HessUpdate','bfgs');x13,fval13,exitflag13,output13=fminunc('fun2',-1.2 2,options13);%BFGS法、三次插值options14=optimset(options,'HessUpdate','bfgs','LineSearchType','cubicpoly');x14,fval14,exitflag14,output14=fminunc('fun2',-1.2 2,options14);%最速

22、下降法、混合二、三次插值options15=optimset(options,'HessUpdate','steepdesc');x15,fval15,exitflag15,output15=fminunc('fun2',-1.2 2,options15);%最速下降法、混合二、三次插值迭代次數(shù)8000options16=optimset(options,'HessUpdate','steepdesc','MaxIter',8000,'MaxFunEvals',8000);x16,f

23、val16,exitflag16,output16=fminunc('fun2',-1.2 2,options16);%最速下降法、混合二、三次插值迭代次數(shù)9000options17=optimset(options,'HessUpdate','steepdesc','MaxIter',9000,'MaxFunEvals',9000);x17,fval17,exitflag17,output17=fminunc('fun2',-1.2 2,options17)調(diào)用結(jié)果:x11 = -0.7476 0

24、.5334fval11 = 3.1189exitflag11 = 0output11 = iterations: 60 funcCount: 201 stepsize: 11.4698 firstorderopt: 11.1142 algorithm: 'medium-scale: Quasi-Newton line search' message: 1x143 charx12 = -0.7476 0.5334fval12 = 3.1189exitflag12 = 0output12 = iterations: 60 funcCount: 201 stepsize: 11.46

25、98 firstorderopt: 11.1142 algorithm: 'medium-scale: Quasi-Newton line search' message: 1x143 charx13 = 1.0000 1.0000fval13 = 2.0352e-011exitflag13 = 1output13 = iterations: 39 funcCount: 144 stepsize: 1 firstorderopt: 4.6220e-007 algorithm: 'medium-scale: Quasi-Newton line search' me

26、ssage: 1x440 charx14 = 1.0000 1.0000fval14 = 2.0352e-011exitflag14 = 1output14 = iterations: 39 funcCount: 144 stepsize: 1 firstorderopt: 4.6220e-007 algorithm: 'medium-scale: Quasi-Newton line search' message: 1x440 charx15 = 1.1169 1.2482fval15 = 0.0137exitflag15 = 0output15 = iterations:

27、17 funcCount: 201 stepsize: 0.0018 firstorderopt: 0.1287 algorithm: 'medium-scale: Quasi-Newton line search' message: 1x143 charx16 = 1.0796 1.1660fval16 = 0.0064exitflag16 = 0output16 = iterations: 667 funcCount: 8001 stepsize: 0.0018 firstorderopt: 0.0900 algorithm: 'medium-scale: Quas

28、i-Newton line search' message: 1x144 charx17 = 1.0757 1.1572fval17 = 0.0057exitflag17 = 0output17 = iterations: 750 funcCount: 9000 stepsize: 0.0017 firstorderopt: 0.0826 algorithm: 'medium-scale: Quasi-Newton line search' message: 1x144 char由上述結(jié)果可以得到:Rosenbrock 函數(shù)不同算法的計(jì)算結(jié)果搜索方向步長搜索最優(yōu)解點(diǎn)最優(yōu)

29、值迭代次數(shù)BFGS混合二、三次插值(1.0000,1.0000)2.0352e-011144三次插值(1.0000,1.0000)2.0352e-011144DFP混合二、三次插值(-0.7446,0.5334)3.1189201三次插值(-0.7476,0.5334)3.1189201最速下降法混合二、三次插值(1.1169,1.2482)0.0137201(1.0796,1.1660)0.00648001(1.0757,1.1572)0.00579000-5. 詳解matlab工具箱解非線性規(guī)劃5.1 二次規(guī)劃二次規(guī)劃的標(biāo)準(zhǔn)型為:minZ=12xTHx+cTxs.t. AxbAeqX=be

30、qvlbXvubmatlab中提供了quadprog函數(shù)求解二次規(guī)劃問題.其調(diào)用格式為:·x=quadprog(H,C,A,b)·x=quadprog(H,C,A,b,Aeq,beq)·x=quadprog(H,C,A,b,Aeq,beq,vlb,vub)·x=quadprog(H,C,A,b,Aeq,beq,vlb,vub,X0)·x= quadprog(H,C,A,b,Aeq,beq,vlb,vub,X0,options)·x,fval= quadprog(H,C,A,b,Aeq,beq,vlb,vub,X0,options)&#

31、183;x,fval,exitflag= quadprog(H,C,A,b,Aeq,beq,vlb,vub,X0,options)·x,fval,exitflag,output= quadprog(H,C,A,b,Aeq,beq,vlb,vub,X0,options)-例如:求minx1,x2=-2x1-6x2+x12-2x1x2+2x22H=1,-1;-1,2;c=-2;-6;A=1,1;-1,2;b=2;2;vlb=0;0;x,z=quadprog(H,c,A,b,vlb,)Optimization terminated.x = 0.6667 1.3333z = -8.2222-

32、5.2 非線性規(guī)劃的解法非線性規(guī)劃的標(biāo)準(zhǔn)型為:minF(X)s.t. AXbAeqX=beqGX0CeqX=0vlbXvubX為n維變元向量,G(X)和Ceq(X)都是非線性函數(shù)組成的向量,其他變量的含義與線性規(guī)劃和二次規(guī)劃相同.用matlab解決問題的步驟為:-1- 建立M文件fun.m定義目標(biāo)函數(shù)F(X) Function f=fun(X) F=F(X)-2- 若約束條件中有非線性約束:G(X)0或CeqX=0,需要建立M文件nonlcon.m定義函數(shù)G(X)和CeqX. Function G,Ceq=nonlcon(X) G= ; Ceq= ;-3- 建立主程序,非線性規(guī)劃求解的函數(shù)是f

33、mincon,命令的基本格式如下:X=fmincon(fun,X0,A,b,Aeq,beq,vlb,vub,nonlcon,options)紅色的部分如果沒有則使用空矩陣替代.Fmincon函數(shù)提供了大型優(yōu)化算法,默認(rèn)值在fun函數(shù)中提供了梯度(options參數(shù)的GradObj設(shè)置on),并且只有上下界存在或只有等式約束,fmincon將選擇大型算法,既有等式約束也有梯度約束時(shí)使用中型算法.Fmincon可能會給出局部最優(yōu)解,其與X0的值有關(guān)系.-例如:求minf=-x1-2x2+12x12+12x22s.t. 2x1+3x26x1+4x25x1,x20先建立函數(shù)文件:function f=fun4(x)f=-x(1)-2*x(2)+(1/2)*x(1)2+(1/2)*x(2)2;x0=1;1;A=2,3;1,4;b=6;5

溫馨提示

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

評論

0/150

提交評論