大連理工大學(xué)_第1頁(yè)
大連理工大學(xué)_第2頁(yè)
大連理工大學(xué)_第3頁(yè)
大連理工大學(xué)_第4頁(yè)
大連理工大學(xué)_第5頁(yè)
已閱讀5頁(yè),還剩3頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、1.1 程序(Java)public class Wolfe_Powell public static double getFx ( double x ) double x1= x0;double x2 = x1;double Fx= 100 * (x2-x1*x1)* (x2-x1*x1) + (1-x1)* (1-x1); return Fx;public static double getDeltFx ( double x ) double x1= x0; double x2 = x1; double deltFx = new double2;deltFx 0 = -400*(x2 -

2、x1* x1) *x1- 2*(1- x1);deltFx 1 = 200*(x2- x1 * x1);return deltFx ;public static double getDeltFx_Sk ( double deltFx , double Sk ) double a = 0 ;for ( int i = 0 ; i Sk.length ; i+ ) a = a + deltFx i * Sk i ;return a ;public static double getL ( double x, double s ) double x1= x0; double x2 = x1;doub

3、le c1 =0.1 , c2 =0.5 ,a =0 , b=1e8 ,L= 1;double Fx0 , Fx1 , deltFx1_Sk ,deltFx0_Sk ,temp ,temp2;double deltFx0 , deltFx1 ;Fx0 = getFx(x) ;deltFx0 = getDeltFx (x) ;deltFx0_Sk = getDeltFx_Sk( deltFx0 , s);temp = c2 * getDeltFx_Sk( deltFx0 , s);for ( int i=0;i= temp2 & deltFx1_Sk = temp) break ;else if

4、( (Fx0 - Fx1 ) temp2 ) b = L ;L = (L +a) /2 ;else if ( deltFx1_Sk = 2*L ? (2*L):( L + b ) / 2;System.out.println( L= + L);System.out.println(計(jì)算次數(shù)+ i );return L;public static void main(String args) (Wolfe_Powell temp =new Wolfe_Powell();double X = -1 ,1 ;double sk = 1 ,1 ;temp.getL( X ,sk);1.2實(shí)驗(yàn)結(jié)果步長(zhǎng)

5、L = 0.00390625 x =-0.9992,1.0324 計(jì)算次數(shù) 82.1 程序(Java)public class GongE public static double getFx ( double x ) double x1= x0;double x2 = x1;double Fx= x1*x1 - 2*x1*x2 + 2*x2*x2 +x3*x3 - x2*x3 +2 * x1 +3*x2 -x3 ;return Fx;public static double getDeltFx ( double x ) double x1= x0;double x2 = x1;double

6、deltFx = new doublex.length;deltFx 0 = 2*x1 - 2*x2+2 ;deltFx 1 = -2*x1 +4*x2 - x3 +3;deltFx 2 = 2*x3 -x2 -1 ;return deltFx ;public static double getX ( double x ) double g0,g1;double s0= new doublex.length;double s1=new doublex.length;double g0_L,g1_L,L ,temp;double x0 =x ;int k =0 ;g0 = getDeltFx (

7、 x0 ) ;for ( int j = 0 ; j x.length ; j+ ) s0j = -g0j;for (int i = 0 ;i2; i +,k+)g0 = getDeltFx ( x0 );g0_L = getDeltFx_Sk ( s0 , s0 );L =getL(x0,s0);/例題一中的方法取得步長(zhǎng)Lfor(int j=0;jx.length ; j+)x0j= x0j+s0j*L ;g1 = getDeltFx(x0) ;g1_L = getDeltFx_Sk ( g1 , g1 );if ( Math.sqrt( g1_L )= 1e-2 ) break ;else

8、temp = g1_L/ g0_L ;for(int j=0;jx.length ; j+)s0j = -g1j + temp * s0j;return x0;public static void main(String args) GongE temp =new GongE();double x = 1,1 ;double result = temp.getX(x);for ( int i = 0 ; i x.length ; i+ ) System.out.println ( result + i + = + result i );2.2實(shí)驗(yàn)結(jié)果最優(yōu)點(diǎn)x*=-4,-3,-1最優(yōu)解f*=-8

9、3.1公用程序(Java)public static double getFx ( double x ) 取得 Fx 值double x1= x0; double x2 = x1;double Fx = x1 + 2 * x2 * x2 + Math.exp ( x1 * x1 + x2 * x2 ); return Fx ;public static double getDeltFx ( double x ) 取得 Fx 的梯度值double x1= x0; double x2 = x1;double deltFx = new double 2 ;deltFx 0 = 1 + 2 * x1

10、* Math.exp ( x1 * x1 + x2 * x2 ); deltFx 1 = 4 * x2 + 2 * x2 * Math.exp ( x1 * x1 + x2 * x2 ); return deltFx ;3.2.1最速下降法程序(Java)public class FastWay public static double getX ( double x ) double deltF0 = new double2; double L =0;for ( int i = 0 ; i 1e1 ; i+ ) deltF0 = getDeltFx(x);for(int j=0 ;j del

11、tF0.length ;j+) 取得負(fù)梯度 deltF0j = - deltF0j;L = getL ( x , deltF0 ) ; /調(diào)用習(xí)題1的不精確搜索取得步長(zhǎng)L if ( Math.sqrt ( getDeltFx_Sk ( deltF0 , deltF0 ) ) = 1e-3 ) System.out.println (最終計(jì)算次數(shù)+ i ); System.out.println(x1= + x0+ x2= + x1);break ;x0 = x0+ L * deltF0 0 ;x1= x1+ L * deltF0 1 ;return x;public static void m

12、ain ( String args ) FastWay temp = new FastWay ();double x0 = 2,2 ; temp.getX(x0);3.2.2最速下降法結(jié)果最優(yōu)點(diǎn)X*=-0.4194 0 最優(yōu)解f*=0.7729計(jì)算次數(shù)count=103.3.1牛頓法程序(Java)public static double getDeltFx ( double x ) double x1 = x 0 ;double x2 = x 1 ;double one = new double 2 ;double exp =Math.exp( Math.pow(x1,2)+Math.pow

13、(x2,2);one 0 = 1+ 2*x1*exp ;one1 = 4* x2 +2*x2*exp;double two = new double22 ;two00 = 2*exp *(1+2*Math.pow(x1,2);two11 = 2*exp *(1+2*Math.pow(x2,2) +4 ;double deltFx = new double 2 ;for (int i = 0 ; i 2 ; i+ ) deltFx0 = one 0 /two00;deltFx1 = one 1 /two11;return deltFx;public static void main ( Stri

14、ng args ) double x = 1,0;double DeltFx = new double 2 ;for(int i =0 ;i 1e3;i+)DeltFx = getDeltFx(x);x0 = x0- DeltFx0;x1 = x1- DeltFx1;if( Math.sqrt( getDeltFx_Sk(DeltFx,DeltFx ) ) = 1e-4) System.out.println(計(jì)算次數(shù)為+ i);break ;System.out.println( x1= +x0 + x2= + x1 +n);System.out.println( Fx= +getFx(x)

15、;3.3.2牛頓法結(jié)果最優(yōu)點(diǎn)X*= -0.4194,0 最優(yōu)解f*= 0.7729 計(jì)算次數(shù)count=53.4.1 BFGS 法程序(matlab)function x,val,k = bfgs(fun,gfun,x0)maxk=1000; sigma=0.4; rho=0.55 ; epsion=1e-5;k=0 ; n =length(x0);Bk=eye(n); %Bk=feval(Hess,x0);while (kmaxk)gk=feval(gfun,x0);if(norm(gk)epsion),break;end;dk=-Bkgk;m=0;mk=0;while(m20)newf=f

16、eval(fun,x0+rhoAm*dk)oldf=feval(fun,x0)if(newf0)Bk=Bk-(Bk*sk*sk*Bk)/(sk*Bk*sk)+(yk*yk)/(yk*sk);end;k=k+1; x0=x;endval=feval(fun,x0);3.4.2 BFGS法結(jié)果最優(yōu)點(diǎn)X*=-0.4194 0 最優(yōu)解f*=0.7729 計(jì)算次數(shù)count=44.1有效集法(matlab)4.1.1主程序functionx , Lagrange , exitflag , output= TwoProg (H,c,Ae,be,Ai,bi,x0)n=length(x0); x=x0; ni

17、=length(bi); ne=length(be); Lagrange =zeros(ne+ni,1); index=ones(ni,1);for(i=1:ni)if(Ai(i,:)*xbi(i)+1e-9),index(i)=0;endend%算法主程序k=0;while(k0),Temp=Ae ; endfor(j=1:ni)if(index(j)0),Temp=Temp;Ai(j,:);endendgk=H*x+c;m1,n1=size(Temp);dk,Lagrange =SubPro (H,gk , Temp,zeros(m1,1);if(norm(dk)ne)y,jk=min(L

18、agrange (ne+1:length(Lagrange );endif(y=0)exitflag=0;elseexitflag=1;for(i=1:ni)if(index(i)&(ne+sum(index(1:i)=jk) index(i)=0;break;endendendk=k+1;elseexitflag=1;%求步長(zhǎng)alpha=1.0;tm=1.0;for(i=1:ni)if(index (i)=0)&(Ai(i,:)*dk0)tm1=(bi(i)-Ai(i,:)*x)/(Ai(i,:)*dk);if(tm1tm)tm=tm1;ti=i;endendendalpha=min(alp

19、ha,tm);x=x+alpha*dk;if(tm0)rb=Ae*ginvH*c+be;Lagrange =pinv(Ae*ginvH*Ae)*rb;x=ginvH*(Ae*Lagrange -c);elsex=-ginvH*c;Lagrange =0;end4.1.4運(yùn)行函數(shù)H=2 -2;-2 4;c=-2 -6;Ae= ;be=;Ai=1 -2;-0.5 -0.5;1 0;0 1;bi=-2 -1 0 0;x0=0 1 ;x,lambda,exitflag,output=qpact(H,c,Ae,be,Ai,bi,x0)4.2有效集法結(jié)果內(nèi)部點(diǎn)初始點(diǎn)x0=00最優(yōu)點(diǎn)X*=0.81.2最優(yōu)解

20、f*=-7.2迭代次數(shù)=10邊界點(diǎn)初始點(diǎn)x0=11最優(yōu)點(diǎn)X*=0.81.2最優(yōu)解f*=-7.2迭代次數(shù)=2檢驗(yàn)點(diǎn)初始點(diǎn)x0=01最優(yōu)點(diǎn)X*=0.81.2最優(yōu)解f*=-7.2迭代次數(shù)=75.1乘子法程序(matlab)5.1.1chengZi程序-乘子法主程序functionx,mu,Lagrange ,output=chengZi(fun,hf,gf,dfun,dhf,dgf,x0)sigma=2.0;count=0;innerCount=0;eta=2.0;0 =0.8;%PHR算法中的實(shí)參數(shù)0 x=x0;he=feval(hf,x);gi=feval(gf,x);n=length(x);l

21、=length(he);m=length(gi);%選取乘子向量的初始值mu=0.1*ones(l,1);Lagrange =0.1*ones(m,1);btak=10;btaold=10;%用來(lái)檢驗(yàn)終止條件的兩個(gè)值while(btak1e-6&count1e-6if(count=2&btak 伊btaold) sigma=eta*sigma;end%更新乘子向量for(i=1:l),mu(i)=mu(i)-sigma*he(i);end for(i=1:m)Lagrange (i)=max(0.0,Lagrange (i)-sigma*gi(i);endendcount=count+1;bt

22、aold=btak;x0=x;endf=feval(fun,x)output.inner_iter=innerCount;output.iter=count;output.bta=btak;output.fval=f;fl程序-目標(biāo)函數(shù)function f=f1(x)f=4*x(1)-x(2)A2-12;hl程序-等式約束function he=h1(x) he=25-x(1)A2-x(2)A2;gl程序-不等式約束function gi=g1(x)gi=10*x(1)-x(1)A2+10*x(2)-x(2)A2-34;dfl程序-目標(biāo)函數(shù)的梯度文件function g=df1(x) g=4 ,-2.0*x(2);dhe程序-等式約束(向量)函數(shù)的Jacobi矩陣(轉(zhuǎn)置) function dhe=dh1(x)dhe=-2*x (1) ,-2.0*x ;dgi程序-不等式約束(向量)函數(shù)的Jacobi矩陣(轉(zhuǎn)置) function dgi=dg1(x) dgi=10-2*x(1),10-2*x(2);0,1;1,0;LagrTiDu程序-增廣拉格朗日函數(shù)的

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論