最速下降法 C語言

最速下降法 C語言

ID:39498527

大?。?85.01 KB

頁數(shù):11頁

時(shí)間:2019-07-04

最速下降法 C語言_第1頁
最速下降法 C語言_第2頁
最速下降法 C語言_第3頁
最速下降法 C語言_第4頁
最速下降法 C語言_第5頁
資源描述:

《最速下降法 C語言》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。

1、1.最速下降法#include"stdio.h"#include"math.h"doublefun1(doublex1,doublex2)/*定義函數(shù)fun1為目標(biāo)函數(shù)*/{doubley;y=x1*x1-2*x1*x2+4*x2*x2+x1-3*x2;returny;}voidmain(){doublet,x1=1,x2=1,e=0.01,g[2],y,m;intk=1;/*定義起始點(diǎn)為x1=0,x2=1,并定義精度為e=0.01*/g[0]=2*x1-2*x2+1;/*目標(biāo)函數(shù)對x1求偏導(dǎo)*/g[1]=(-2)*x1+8*x2-3;/*目標(biāo)函數(shù)對x2求偏導(dǎo)*/

2、m=(sqrt(g[0]*g[0]+g[1]*g[1]));/*對g[0]*g[0]+g[1]*g[1]求開方,將值賦給m*/while(m>e&&k<=200)/*判斷,當(dāng)m>e時(shí)進(jìn)行以下循環(huán)*/{t=((2*g[1]-2*g[0])*x1+(2*g[0]-8*g[1])*x2-g[0]+3*g[1])/(4*g[0]*g[1]-2*g[0]*g[0]-8*g[1]*g[1]);/*根據(jù)梯度法(最速下降法),利用梯度和海賽矩陣*/x1=x1-g[0]*t;/*求步長t。根據(jù)步長和梯度方向求出新的x1,x2*/x2=x2-g[1]*t;printf("迭代次數(shù)%d

3、",k);printf("搜索方向-%f,-%f,負(fù)梯度的模%f,步長%f",g[0],g[1],m,t);printf("x的值%f,%f",x1,x2);g[0]=2*x1-2*x2+1;g[1]=(-2)*x1+8*x2-3;m=(sqrt(g[0]*g[0]+g[1]*g[1]));/*計(jì)算新的m*/printf("新的負(fù)梯度的模%f",m);k++;}y=fun1(x1,x2);/*當(dāng)m不滿足m>e的時(shí)候退出循環(huán),并計(jì)算fun1,*/printf("分別輸出x1,x2%f,%f",x1,x2);/*將值賦給y,并輸出。*/printf

4、("極小值y%f",y);}2.FR共軛梯度法#include"stdio.h"#include"math.h"doublefun1(doublex1,doublex2)/*定義函數(shù)fun1為目標(biāo)函數(shù)*/{doubley;y=x1*x1-2*x1*x2+4*x2*x2+x1-3*x2;returny;}doublefun2(doubleg[],doubled[])/*定義函數(shù)fun2為求步長的函數(shù)*/{doublebuchang;buchang=-(g[0]*d[0]+g[1]*d[1])/(d[0]*(2*d[0]-2*d[1])+d[1]*((-2)*d[0]

5、+8*d[1]));returnbuchang;}voidmain(){doublet,beta,x1=1,x2=1,d[2],g[4],y,m,e=0.01;/*定義起始點(diǎn)為x1=0,x2=1,并定義精度為e=0.01*/intk=1;g[0]=2*x1-2*x2+1;/*目標(biāo)函數(shù)對x1求偏導(dǎo)*/g[1]=(-2)*x1+8*x2-3;/*目標(biāo)函數(shù)對x2求偏導(dǎo),求梯度*/m=(sqrt(g[0]*g[0]+g[1]*g[1]));/*對g[0]*g[0]+g[1]*g[1]求開方,將值賦給m*/while(m>e&&k<=200)/*判斷,當(dāng)m>e時(shí)進(jìn)行以下循環(huán)

6、*/{if(k==1){d[0]=-g[0];d[1]=-g[1];beta=0;}/*計(jì)算因子beta*/else{beta=(g[0]*g[0]+g[1]*g[1])/(g[2]*g[2]+g[3]*g[3]);/*計(jì)算因子beta*/d[0]=-g[0]+beta*d[0];d[1]=-g[1]+beta*d[1];}t=fun2(g,d);/*計(jì)算步長*/x1=x1+d[0]*t;/*根據(jù)步長和搜索方向求出新的x1,x2*/x2=x2+d[1]*t;printf("迭代次數(shù)為%d",k);printf("梯度%f,%f,梯度的模%f",g[0],g

7、[1],m);printf("搜索方向%f,%f,計(jì)算因子%f,步長%f",d[0],d[1],beta,t);printf("x的值%f,%f",x1,x2);g[2]=g[0];g[3]=g[1];g[0]=2*x1-2*x2+1;/*根據(jù)得到的x1,x2求出新的梯度,并將值*/g[1]=(-2)*x1+8*x2-3;/*賦給g[0],g[1],*/m=double(sqrt(g[0]*g[0]+g[1]*g[1]));/*計(jì)算新的m*/printf("新的負(fù)梯度的模%f",m);k++;}y=fun1(x1,x2);/*當(dāng)m不滿足m>e的時(shí)候退出

8、循環(huán),并計(jì)

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動畫的文件,查看預(yù)覽時(shí)可能會顯示錯亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負(fù)責(zé)整理代發(fā)布。如果您對本文檔版權(quán)有爭議請及時(shí)聯(lián)系客服。
3. 下載前請仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動等原因無法下載或下載錯誤,付費(fèi)完成后未能成功下載的用戶請聯(lián)系客服處理。