資源描述:
《最速下降法與共軛梯度法實(shí)驗(yàn)》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、工程數(shù)值算法實(shí)驗(yàn)報(bào)告班級(jí)姓名學(xué)號(hào)課程名稱時(shí)間地點(diǎn)一、實(shí)驗(yàn)名稱:實(shí)驗(yàn)一、最速下降法與共軛梯度法實(shí)驗(yàn)二、實(shí)驗(yàn)?zāi)康模?.理解最速下降法與共軛梯度法的基本原理;2.最速下降法是一種局部極值搜尋方法,任一點(diǎn)的負(fù)梯度方向是函數(shù)值在該點(diǎn)下降最快的方向;3.共軛梯度法適合求解二次函數(shù)最小值問題。三、實(shí)驗(yàn)內(nèi)容及要求:例1求解,其中,需求選取初始點(diǎn),終止誤差為e=0.1。采用最速下降法求解例2用最速下降法求解無約束非線性規(guī)劃問題:其中,初始點(diǎn),終止誤差e=0.1.采用共軛梯度法。四、插值法的實(shí)驗(yàn)步驟:步驟1:如何選擇搜索方向步驟2:在確定搜索方向上,采用適合的方法進(jìn)行一維搜
2、索五、插值法的實(shí)驗(yàn)結(jié)果:例1結(jié)果:=1.9304=0.9744例2結(jié)果:=-1=1六、程序附錄5例1定義函數(shù)functionx=fsxsteep(f,e,a,b)%fsxsteep函數(shù)最速下降法%x=fsxsteep(f,e,a,b)為輸入函數(shù)f為函數(shù)e為允許誤差(a,b)為初始點(diǎn);%fsxTJPU2008.6.15x1=a;x2=b;Q=fsxhesse(f,x1,x2);x0=[x1x2]';fx1=diff(f,'x1');%對x1求偏導(dǎo)數(shù)fx2=diff(f,'x2');%對x2求偏導(dǎo)數(shù)g=[fx1fx2]';%梯度g1=subs(g);%把符號(hào)
3、變量轉(zhuǎn)為數(shù)值d=-g1;while(abs(norm(g1))>=e)t=(-d)'*d/((-d)'*Q*d);t=(-d)'*d/((-d)'*Q*d);%求搜索方向x0=x0-t*g1;%搜索到的點(diǎn)v=x0;a=[10]*x0;b=[01]*x0;x1=a;x2=b;g1=subs(g);d=-g1;end;x=v;functionx=fsxhesse(f,a,b)%fsxhesse函數(shù)求函數(shù)的hesse矩陣;%本程序僅是簡單的求二次函數(shù)的hesse矩陣??;%x=fsxhesse(f)為輸入函數(shù)f為二次函數(shù)x1,x2為自變量;%fsxTJPU200
4、8.6.15x1=a;x2=b;fx=diff(f,'x1');%求f對x1偏導(dǎo)數(shù)fy=diff(f,'x2');%求f對x2偏導(dǎo)數(shù)fxx=diff(fx,'x1');%求二階偏導(dǎo)數(shù)對x1再對x1fxy=diff(fx,'x2');%求二階偏導(dǎo)數(shù)對x1再對x2fyx=diff(fy,'x1');%求二階偏導(dǎo)數(shù)對x2再對x1fyy=diff(fy,'x2');%求二階偏導(dǎo)數(shù)對x2再對x2fxx=subs(fxx);%將符號(hào)變量轉(zhuǎn)化為數(shù)值fxy=subs(fxy);fyx=subs(fyx);fyy=subs(fyy);x=[fxx,fxy;fyx,fyy]
5、;%求hesse矩陣運(yùn)行函數(shù)symsx1x2;X=[x1,x2];fx=(X(1)-2).^4+(X(1)-2*X(2)).^2;5z=fsxsteep(fx,0.1,0,3)例2定義函數(shù)%conjugategradientmethods%method:FR,PRP,HS,DY,CD,WYL,LS%精確線搜索,梯度終止準(zhǔn)則function[m,k,d,a,X,g1,fv]=conjgradme(G,b,c,X,e,method)ifnargin<6error('輸入?yún)?shù)必須為6');endn=length(G);ifn==2formatlonge%rat
6、symsx1x2f=1/2*[x1,x2]*G*[x1;x2]+b'*[x1;x2]+c;g=[diff(f,x1);diff(f,x2)];g1=subs(subs(g,x1,X(1,1)),x2,X(2,1));d=-g1;a=-(d'*g1)/(d'*G*d);a=-((X(:,1)'*G*d+b'*d)/(d'*G*d));a=g1(:,1)'*g1(:,1)/(d(:,1)'*G*d(:,1));X(:,2)=X(:,1)+a*d;g1=[g1subs(subs(g,x1,X(1,2)),x2,X(2,2))];m1=norm(g1(:,1))
7、;m=norm(g1(:,2));i=2;k=zeros(1);switchmethodcase'FR'whilem>=ek(i-1)=(m/m1)^2;d(:,i)=-g1(:,i)+k(i-1)*d(:,i-1);a(i)=-(d(:,i)'*g1(:,i))/(d(:,i)'*G*d(:,i));%a1(i)=-((X(:,i)'*G*d(:,i)+b'*d(:,i))/(d(:,i)'*G*d(:,i)));a(i)=g1(:,i)'*g1(:,i)/(d(:,i)'*G*d(:,i));X(:,i+1)=X(:,i)+a(i)*d(:,i);g
8、1=[g1subs(subs(g,x1,X(1,i+1)),x2,X(2,i+1