資源描述:
《共軛梯度法,機械優(yōu)化設(shè)計》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫。
1、實驗報告實驗課程名稱機械優(yōu)化設(shè)計實驗項目名稱共輒梯度法年級專業(yè)學(xué)生姓名學(xué)號實驗時間:2012年LL月2日姓名學(xué)號實驗組實驗時間指導(dǎo)教師成績實驗項目名稱共覘梯度法求函數(shù)極小值1、實驗?zāi)康募耙螅簩嶒災(zāi)康模赫莆諜C械優(yōu)化設(shè)計方法并能夠理論聯(lián)系實際地加以應(yīng)用,任務(wù)是將課程所學(xué)的知識應(yīng)用于實踐,通過實際編寫調(diào)試及運行程序加深理論知識的掌握并提高解決優(yōu)化問題的能力。根據(jù)實驗指導(dǎo)書的要求應(yīng)能夠獨立的編寫優(yōu)化程序并在計算機上運行,學(xué)會判斷結(jié)果及稈序的正確性,學(xué)會建立機械優(yōu)化設(shè)訃的數(shù)學(xué)模型,合理選用優(yōu)化方法,獨立的解決機械優(yōu)化設(shè)計的實際問題。實驗(或算法)原理:共軌梯度法是共
2、軌方向法中的一種,該方法中每一個共軌向量都是依賴與迭代點處的負梯度而構(gòu)造出來。它通過梯度來尋找極小點。先通過一維搜索確定搜索區(qū)間,然后再通過共覘梯度法運用C語言編程求解。實驗硬件及軟件平臺:VS2010實驗步驟: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?運行程序6.檢驗試驗結(jié)果,分析結(jié)果實驗內(nèi)容(包括實驗具體內(nèi)容、算法分析、源代碼等等):本實驗通過c語言編程,運用共軌梯度法求解函數(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){