資源描述:
《共軛梯度法,機(jī)械優(yōu)化設(shè)計》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫。
1、實(shí)驗(yàn)報告實(shí)驗(yàn)課程名稱機(jī)械優(yōu)化設(shè)計實(shí)驗(yàn)項(xiàng)目名稱共輒梯度法年級專業(yè)學(xué)生姓名學(xué)號實(shí)驗(yàn)時間:2012年LL月2日姓名學(xué)號實(shí)驗(yàn)組實(shí)驗(yàn)時間指導(dǎo)教師成績實(shí)驗(yàn)項(xiàng)目名稱共覘梯度法求函數(shù)極小值1、實(shí)驗(yàn)?zāi)康募耙螅簩?shí)驗(yàn)?zāi)康模赫莆諜C(jī)械優(yōu)化設(shè)計方法并能夠理論聯(lián)系實(shí)際地加以應(yīng)用,任務(wù)是將課程所學(xué)的知識應(yīng)用于實(shí)踐,通過實(shí)際編寫調(diào)試及運(yùn)行程序加深理論知識的掌握并提高解決優(yōu)化問題的能力。根據(jù)實(shí)驗(yàn)指導(dǎo)書的要求應(yīng)能夠獨(dú)立的編寫優(yōu)化程序并在計算機(jī)上運(yùn)行,學(xué)會判斷結(jié)果及稈序的正確性,學(xué)會建立機(jī)械優(yōu)化設(shè)訃的數(shù)學(xué)模型,合理選用優(yōu)化方法,獨(dú)立的解決機(jī)械優(yōu)化設(shè)計的實(shí)際問題。實(shí)驗(yàn)(或算法)原理:共軌梯度法是共
2、軌方向法中的一種,該方法中每一個共軌向量都是依賴與迭代點(diǎn)處的負(fù)梯度而構(gòu)造出來。它通過梯度來尋找極小點(diǎn)。先通過一維搜索確定搜索區(qū)間,然后再通過共覘梯度法運(yùn)用C語言編程求解。實(shí)驗(yàn)硬件及軟件平臺:VS2010實(shí)驗(yàn)步驟:1.確定所需求解的函數(shù)y=pow(x[0]+t*p[0],2)+25*pow(x[l]+t*p[l],2)2.確定搜索區(qū)間3?畫出程序框圖4?用c語言在vs2010上寫岀源代碼5?運(yùn)行程序6.檢驗(yàn)試驗(yàn)結(jié)果,分析結(jié)果實(shí)驗(yàn)內(nèi)容(包括實(shí)驗(yàn)具體內(nèi)容、算法分析、源代碼等等):本實(shí)驗(yàn)通過c語言編程,運(yùn)用共軌梯度法求解函數(shù)y極小值;程序框圖圖共規(guī)梯度法程序框圖源程
3、序#include〈stdio.h>#include〈math?h>ttdefineN10#defineepspow(10,-6)doublef(doublex[],doublep[],doublet){doubles;s二pow(x[0]+t*p[0],2)+25*pow(x[l]+t*p[l],2);rctunis;}voidsb(double*a,double*b,doublex[],doublep[]){doubletO,tl,t,h,alpha,fO,fl;intk=0;tO二2.5;/*初始值*/h=l;/*初始步長*/alpha二2;/*加步系
4、數(shù)*/fO=f(x,p,tO);tl二tO+h;fl=f(x,p,tl);while(1){if(fl5、l=%lf,x2=%lf,pl=%lf,p2=%lf,z,x[0],x[l],p[0],p[l]);printf(〃[a,b]=[%lf,%lf]“,a,b);system("pause");beta=(sqrt(5)-1.0)/2;t2=a+beta*(b~a);f2=f(x,p,t2);tl=a+b-t2;fl=f(x,p,11);wh訂e(l){if(fabs(tl~t2)6、2;flt2f2f2;a+beta*(b-a);f(x,p,t2);}}t=(tl+t2)/2;returnt;}voidgtd(){doublex[N],g[N],p[N],t=0,fO,modl=0,mod2=0,nanda=0;inti,k,n;printfC請輸入函數(shù)的元數(shù)值n=〃);scanf("%d〃,&n);printf(,z請輸入初始值rT);for(i二0;i7、g[l],2));if(modl>eps){p[0]=-g[0];p[l]=-g[l];k=0;while(1){t=hjfg(x,p);printf(z,pl=%lf,p2=%lf,t=%lf/z,p[0],p[l],t);x[0]=x[0]+t*p[0];x[l]=x[l]+t*p[l];g[0]二2*x[0];g[l]二50*x[l];Aprintf(,zxl=%lf,x2=%lf,gl=%lf,g2=%lf〃,x[0],x[l],g[0],g[l]);*/mod2=sqrt(pow(g[0],2)+pow(g[l],2));if(mod2<=
8、eps)break;else{if(k+1二二n){