資源描述:
《共軛梯度法-機械優(yōu)化設計.doc》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫。
1、實驗報告實驗課程名稱機械優(yōu)化設計實驗項目名稱共軛梯度法年級專業(yè)學生姓名學號實驗時間:2012年11月2日8學生所在學院:專業(yè):班級:姓名學號實驗組實驗時間指導教師成績實驗項目名稱共軛梯度法求函數(shù)極小值1、實驗目的及要求:實驗目的:掌握機械優(yōu)化設計方法并能夠理論聯(lián)系實際地加以應用,任務是將課程所學的知識應用于實踐,通過實際編寫調(diào)試及運行程序加深理論知識的掌握并提高解決優(yōu)化問題的能力。根據(jù)實驗指導書的要求應能夠獨立的編寫優(yōu)化程序并在計算機上運行,學會判斷結(jié)果及程序的正確性,學會建立機械優(yōu)化設計的數(shù)學模型,合理選用優(yōu)化方法,獨立的解決機械優(yōu)化設計的實際問題。實驗(或算
2、法)原理:共軛梯度法是共軛方向法中的一種,該方法中每一個共軛向量都是依賴與迭代點處的負梯度而構(gòu)造出來。它通過梯度來尋找極小點。先通過一維搜索確定搜索區(qū)間,然后再通過共軛梯度法運用c語言編程求解。實驗硬件及軟件平臺:vs20108實驗步驟:1.確定所需求解的函數(shù)y=pow(x[0]+t*p[0],2)+25*pow(x[1]+t*p[1],2)2.確定搜索區(qū)間3.畫出程序框圖4.用c語言在vs2010上寫出源代碼5.運行程序6.檢驗試驗結(jié)果,分析結(jié)果實驗內(nèi)容(包括實驗具體內(nèi)容、算法分析、源代碼等等):本實驗通過c語言編程,運用共軛梯度法求解函數(shù)y極小值;程序框圖8
3、源程序#include#include#defineN10#defineepspow(10,-6)doublef(doublex[],doublep[],doublet){doubles;s=pow(x[0]+t*p[0],2)+25*pow(x[1]+t*p[1],2);returns;}voidsb(double*a,double*b,doublex[],doublep[]){doublet0,t1,t,h,alpha,f0,f1;intk=0;t0=2.5;/*初始值*/h=1;/*初始步長*/alpha=2;/*加步系數(shù)
4、*/f0=f(x,p,t0);t1=t0+h;f1=f(x,p,t1);while(1){if(f1t1?t:t1;break;8}}t1=t0+h;f1=f(x,p,t1);}}doublehjfg(doublex[],doublep[]){doublebeta,t1,t2,t;doublef1,f2;doublea=0,b=0;double*c,*d;c=&a,d=&b;sb(c,d,x,p
5、);printf("x1=%lf,x2=%lf,p1=%lf,p2=%lf",x[0],x[1],p[0],p[1]);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);t1=a+b-t2;f1=f(x,p,t1);while(1){if(fabs(t1-t2)6、}else{a=t1;t1=t2;f1=f2;t2=a+beta*(b-a);f2=f(x,p,t2);8}}}t=(t1+t2)/2;returnt;}voidgtd(){doublex[N],g[N],p[N],t=0,f0,mod1=0,mod2=0,nanda=0;inti,k,n;printf("請輸入函數(shù)的元數(shù)值n=");scanf("%d",&n);printf("請輸入初始值");for(i=0;i7、t(pow(g[0],2)+pow(g[1],2));if(mod1>eps){p[0]=-g[0];p[1]=-g[1];k=0;while(1){t=hjfg(x,p);printf("p1=%lf,p2=%lf,t=%lf",p[0],p[1],t);x[0]=x[0]+t*p[0];x[1]=x[1]+t*p[1];g[0]=2*x[0];g[1]=50*x[1];/*printf("x1=%lf,x2=%lf,g1=%lf,g2=%lf",x[0],x[1],g[0],g[1]);*/mod2=sqrt(pow(g[0],2)+pow(g[1]
8、,2));if(mod2