最優(yōu)化方法課程實(shí)驗(yàn)報(bào)告_第1頁
最優(yōu)化方法課程實(shí)驗(yàn)報(bào)告_第2頁
最優(yōu)化方法課程實(shí)驗(yàn)報(bào)告_第3頁
最優(yōu)化方法課程實(shí)驗(yàn)報(bào)告_第4頁
最優(yōu)化方法課程實(shí)驗(yàn)報(bào)告_第5頁
已閱讀5頁,還剩26頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

項(xiàng)目一一維搜索算法(一)[實(shí)驗(yàn)?zāi)康模菥帉懠硬教剿鞣āΨ址?、Newton法的程序。[實(shí)驗(yàn)準(zhǔn)備]掌握一維收搜索中搜索區(qū)間的加步探索法的思想及迭代步驟;掌握對分法的思想及迭代步驟;掌握Newton法的思想及迭代步驟。[實(shí)驗(yàn)內(nèi)容及步驟]編程解決以下問題:用加步探索法確定一維最優(yōu)化問題min中(t)=13—2t+1t>0的搜索區(qū)間,要求選取‘。=°,h0=1,口=2.加步探索法算法的計(jì)算步驟:t£[。,+8)(或t£U[0,t])「+曾甲=甲(t)莎中初力4,中k*h>0(1)選取仞始點(diǎn)0 0 max,計(jì)異0 0?給口出仞如步長h。>0,加步系數(shù)以>L令上=0。⑵比較目標(biāo)函數(shù)值.令tk+1=tk+?,計(jì)算%+1=甲(七+1),若甲*〈氣,轉(zhuǎn)(3),否貝膊敘4)。 * * * * * */c、―■[?穴rh\y人h=ahe人t=t,t=t,k=k+1七卜/o\⑶加大探索步長.令k+1k,同時(shí),令kk k+1 ,轉(zhuǎn)(2)。⑷反向探索.若k=0,轉(zhuǎn)換探索方向,令hk=~hk,t=tk+1,轉(zhuǎn)(2)。否則,停止迭代,a=min{a=min{t,t},b=max{t,t}令程序清單加步探索法算法程序見附錄1實(shí)驗(yàn)結(jié)果運(yùn)行結(jié)果為:rI'D:\ProgramFiles[k86)\IV1icrosoftVisuaIStcidio\MyPr;該間題的根的腰素空間是■:[0^1Pi*essanyl<ei^tocontinue用對分法求解min中(t)=t(t+2),已知初始單谷區(qū)間[a,b]=[-3,5],要求按精度8=0.3,8=0.001分別計(jì)算.對分法迭代的計(jì)算步驟:確定初始搜索區(qū)間[a,b],要求中'(a)<0,中S>0。, 1,八計(jì)算[a,b]的中點(diǎn)c=-(a+b).若甲'(c)<0,則a=c,轉(zhuǎn)(4);若甲'(c)=0,則t*=c,轉(zhuǎn)(5);若甲'(c)>0,則b=c,轉(zhuǎn)(4).1若Ia-b1<8,則t*=f(a+b),轉(zhuǎn)(5);否則轉(zhuǎn)(2).打印t*,結(jié)束對分法的計(jì)算框圖對分法程序見附錄2實(shí)驗(yàn)結(jié)果運(yùn)行結(jié)果為:I'D:\PnogramFiles[x86AMicrcEoftVi&ualStudic\MyProject世解的結(jié)果是:T _Pressanyk=ytocontinue用Newton法求解min中(t)=13—2t+1,已知初始單谷區(qū)間[M]=[0,1],要求精度e=0.01.Newton法的計(jì)算步驟⑴確定初始搜索區(qū)間[a,b],要求平'(a)<0,甲'(b)>0選定10計(jì)算t=t0一甲'(t0)/甲"(t0)若11—101>£,則10=t,轉(zhuǎn)(3);否則轉(zhuǎn)(5).打印',中(t),結(jié)束.Newton法的計(jì)算框圖

程序清單Newton法程序見附錄3實(shí)驗(yàn)結(jié)果運(yùn)行結(jié)果為:項(xiàng)目二一維搜索算法(二)[實(shí)驗(yàn)?zāi)康模菥帉扅S金分割法、拋物線插值法的程序。[實(shí)驗(yàn)準(zhǔn)備]掌握黃金分割法的思想及迭代步驟;掌握拋物線插值法的思想及迭代步驟。[實(shí)驗(yàn)內(nèi)容及步驟]編程解決以下問題:用黃金分割法求解min中(t)=t(t+2)已知初始單谷區(qū)間[a,b]=[—3,5],要求精度8=0.001黃金分割法迭代步驟:確定中(t)的初始搜索區(qū)間[a,b].計(jì)算12=a+0.382(b-a)計(jì)算'=a+0.618(b一a)若11-11<£,則打印t*=七;,結(jié)束;否則轉(zhuǎn)(5).TOC\o"1-5"\h\z1 2 2判別是否滿足中<^:若滿足,則置a=t,t=t,中=中1 2 22 1 2 1然后轉(zhuǎn)(3);否則,置b=t,t=t,中=中,t=以+。(b—a),中=中(t)11 2 1 22 2 2然后轉(zhuǎn)(4).黃金分割法的計(jì)算框圖:程序清單黃金分割法程序見附錄4實(shí)驗(yàn)結(jié)果運(yùn)行結(jié)果為:''D:\ProgramFiles(xBGJA.MicrosoftVrsualStudi-o\MyPrqjecTts^zuiyou\_Debug\ziyuan.exe,功丁迭代歡數(shù)為蚌]迭代皓巢為root=0-B56函數(shù)值近似為:fCroot^=0.115136Pressa_nykeytocontinue.用拋物線插值法求解minf(x)=8x3—2x2—7x+3已知初始單谷區(qū)間M=[°,W=0-001.拋物線插值法的計(jì)算步驟:中(t)v中(t),所以相對t來說t是好點(diǎn),故劃掉區(qū)間[t,t],保留[t,t]為新區(qū)間,0 0 0 2 1 0故置t=t,中(t)=中(t),t=t,甲(t)=甲(t),t保持不變;2 0 2 0 0 0 1甲(t)>平財(cái),所以相對t來說10是好點(diǎn),故劃掉區(qū)間[ti,t],保留[t,t2]為新區(qū)間,故置匕=t,中(t)=中(t「,t°與t2保持不變;程序清單拋物線插值法程序見附錄5實(shí)驗(yàn)結(jié)果運(yùn)行結(jié)果為:項(xiàng)目三常用無約束最優(yōu)化方法(一)[實(shí)驗(yàn)?zāi)康模菥帉懽钏傧陆捣āewton法(修正Newton法)的程序。[實(shí)驗(yàn)準(zhǔn)備]掌握最速下降法的思想及迭代步驟。掌握Newton法的思想及迭代步驟;掌握修正Newton法的思想及迭代步驟。[實(shí)驗(yàn)內(nèi)容及步驟]編程解決以下問題:用最速下降法求minf(X)=x2+25x;,X0=[2,2]tt=0.01最速下降法計(jì)算步驟(1) 取初始點(diǎn)X(0),容許誤差(精度)8>0,令一=0(2) 計(jì)算p(k)=-Vf(X(k))(3) 檢驗(yàn)|p(』|<£?若是迭代終止,取X*=X(k),否則轉(zhuǎn)4。(4) 求最優(yōu)步長人:minf(X(k)+Xp(k))=f(X(k)+1p(k))(一維搜索)令X(k+i)=X(k)+1p(k),令k:=k+1,轉(zhuǎn)20k最速下降法的計(jì)算框圖程序清單最速下降法程序見附錄6實(shí)驗(yàn)結(jié)果運(yùn)行結(jié)果為:用Newton法求TOC\o"1-5"\h\zminf(X)二60一10x—4x+x2+%2一xx

1 2 1 2 12'初始點(diǎn)X0=[0,0]t,£=0.01.Newton法的計(jì)算步驟給定初始點(diǎn)x(0),及精度e>0,令k=0;Vf(X(k)) … …若 ,停止,極小點(diǎn)為x(k),否則轉(zhuǎn)步驟(3);、■曾[V2f(X(k))]TaS(k)=一[H(X(k))]TVf(X(k))計(jì)算 ,令 ;令x(k+D=x(k)+s(k),k=k+1,轉(zhuǎn)步驟⑵。程序清單Newton法程序見附錄7實(shí)驗(yàn)結(jié)果運(yùn)行結(jié)果為:rrcss-ankeytoconiinLie用修正Newton求minf(X)=4(x+1)2+2(x-1)2+x+x+101 2 1 2 ,初始點(diǎn)X0=[0,0]r,8=0.01.修正Newton的計(jì)算步驟給定初始點(diǎn)x(0),及精度8>0,令k=0;若'W(X以))"'8,停止,極小點(diǎn)為x(k),否則轉(zhuǎn)步驟(3);、4曾[?2f(X(k))]-1人5(k)=-[H(X(k))]-1Vf(X(k))計(jì)算 ,令 ;(4)用一維搜索法求偵,使得f(X(k)+a(k)S(k))=minf(X(k)+aS(k)),令O>0X(k+1)=X(k)+a(k)s(k),k=k+1,轉(zhuǎn)步驟(2)。程序清單修正Newton程序見附錄8實(shí)驗(yàn)結(jié)果運(yùn)行結(jié)果為:T"ID^ProgramFiles-x3oro=oftVisuadStud<3\MyPrpjects\zuiyciU\DebLg^1ziyijan.eMe'h—m陣的逆矩陣為=0,125 H0__0.25程嘴矗錨鑫向rra乘,兩矩腓乘結(jié)殿:1.125-0.75二:J數(shù)ninE咨心的二次頂系數(shù);6.Itt7b—次頂系數(shù);-12.375常被攻秀'挫;16芋引了,I犒度"的士=■旨三nHwmu注函數(shù)Etxl.展>70(」*1>*2+2<?21r2*Kl的極小點(diǎn)為,F-9,9125B箜星取值為;xl—L.125以一L鄙芯:坦「1P?eckeytocontintie項(xiàng)目四常用無約束最優(yōu)化方法(二)實(shí)驗(yàn)?zāi)康木帉懝曹椞荻确ā⒆兂叨确ǎ―FP法和BFGS法)程序。實(shí)驗(yàn)準(zhǔn)備掌握共軛方向法的思路及迭代過程;掌握共軛梯度法的思想及迭代步驟;掌握DFP法和BFGS法的思想及迭代步驟。實(shí)驗(yàn)內(nèi)容及步驟編程解決以下問題:1.用共軛梯度法求得min(x1+4xP,取初始點(diǎn)%=[1,中,£=0.01.共輛梯度法算法步驟給定初始點(diǎn)X(o),及精度£>0;若時(shí)(x(0))1<8,停止,極小值點(diǎn)為x(0),否則轉(zhuǎn)步驟(3);取p(0)=—Nf(x(0)),且置k=0;用一維搜索法求七,使得f(x(k)+t^p(k))=minf(x(k)+tp(k)),令,x(k+1)=x(k)+tp(k),轉(zhuǎn)步驟5;

k若|(x(k+1))1<8,停止,極小值點(diǎn)為x(k+1),否則轉(zhuǎn)步驟(6);若k+1=n,令x(0)=x(n),轉(zhuǎn)步驟(3),否則轉(zhuǎn)步驟(7);令p(k+1)=-Vf(x(k+1))+人p(k),人= ,置k=k+1,轉(zhuǎn)步驟(4)。kk ||Vf(x(k))||2程序清單共軛梯度法程序見附錄9實(shí)驗(yàn)結(jié)果運(yùn)行結(jié)果為:V"D:\Pragr3mFiles(x86)\MicrosoftVisualStudio\MyProjects\zuiyou\Debug\ziyuan.exep阿輸入函數(shù)的元數(shù)值n=2請輸入初始值:11El=-0_66GG02#x2=-0-000390,.pl=3_SQQQS4ll-p2=0-000008a.h]=1-4.E00000.1.590339]1=G_G66664.p2=0.083003,fc=0_494238m±=-G.GGGGBfl^x2=0.809933_pl=0_ =-0.000005[a.hJ=[-4.S00000.1.500339]pl=G,6SS66Q^p2=-0.000005^t=0_32SQ1Q最加解去沖=-0-008000『x2=-0-0BBBBB晟弩的函數(shù)值為0-0O0000Pi'esEJanytocontinue.2.用共軛梯度法求minf(X)=2%2+號一,自定初始點(diǎn),£=O.°l程序清單共軛梯度法程序見附錄9實(shí)驗(yàn)結(jié)果運(yùn)行結(jié)果為:si=0_aesseo,^2=a.eseeoB,pi=-e-eaiaBsa,p2=-&.Baaaii[a,508003,1-560000]pl--0.0B0000,p2--0.060011Pt=fl?020000耄佑解為型-0-麗羽如,盜-0?09BS00最終由函數(shù)值為0.羽配如Pessens蝠9tocentinme.用DFP法求minf(X)=4(\一5)2+(七-6)2,初始點(diǎn)X°=[8,9]e=0.01.DFP法的具體迭代步驟如下:給定初始點(diǎn),:'”,迭代精度',維數(shù)n置0—k,單位矩陣I一頊;,計(jì)算可"-..。計(jì)算搜索方向a進(jìn)行一維搜索求",使.赤?'??.?一?叫一*.也山F'ij得迭代新點(diǎn)&EWtF(5) 檢驗(yàn)是否滿足迭代終止條件「MFE"wE若滿足,停止迭代,輸出最優(yōu)解為T星,;否則進(jìn)行下一步。(6) 檢查迭代次數(shù),若k=n,則置”7:",轉(zhuǎn)向步驟(2);若k<n,則進(jìn)行下一步。(7) 計(jì)算:』*「,寸;]■盧上笊「二心、心、Rr:l-h7a','3"K:,qjt然后,置k+1-k,轉(zhuǎn)向步驟(3)。DFP法的計(jì)算框圖程序清單DFP法程序見附錄10實(shí)驗(yàn)結(jié)果

運(yùn)行結(jié)果為:(xl,x2>=4(Xl-5>"2t<X2-6>"2.的極』點(diǎn)為:f=0弟.■得板小度為日變量那伯.為,xl=5x2=6注en"keutnentinli巳一項(xiàng)目五常用約束最優(yōu)化方法[實(shí)驗(yàn)?zāi)康模菥帉懲恻c(diǎn)罰函數(shù)法、外點(diǎn)罰函數(shù)法的程序。[實(shí)驗(yàn)準(zhǔn)備]掌握外點(diǎn)罰函數(shù)法的思想及迭代步驟;掌握內(nèi)點(diǎn)罰函數(shù)法的思想及迭代步驟。[實(shí)驗(yàn)內(nèi)容及步驟]編程解決以下問題:用外點(diǎn)罰函數(shù)法編程計(jì)算minf(X)=-尤+尤,Jg(X)=ln尤>0,

..]々(X)=氣+%-1=0,精度e=10-5.外點(diǎn)法的計(jì)算步驟:給定初始點(diǎn)X(o),初始罰因子人⑴,放大系數(shù)c>1;允許誤差e>0,設(shè)置k=1;以x(k-1)作為搜索初始點(diǎn),求解無約束規(guī)劃問題min f(x)+XP(x),令x(k)為所求極小點(diǎn)。(3)當(dāng)人P(x(k))<e,則停止計(jì)算,得到點(diǎn)x(k);否則,令九k+D=ck(k),返回(2)執(zhí)行。程序清單外點(diǎn)罰函數(shù)法程序見附錄11實(shí)驗(yàn)結(jié)果實(shí)驗(yàn)結(jié)果為

運(yùn)行結(jié)果為:家'、?:】=":上一:二Wd二一:.二一上::一陽外點(diǎn)法求解:minf<X>=-X1+X2yl<K>-lnK2>-0s.t.g2<X>=X1+X2-1=0結(jié)果是:x*=7.0567e-0171f<x*>=lPressanykeytocontinue用內(nèi)點(diǎn)罰函數(shù)法編程計(jì)算min1(x+1)3+x3 1 2x-1>0,s.t.<1x>0.初始點(diǎn)取為X0=[3,4]T,初始障礙因子取u1=10,縮小系數(shù)取C=0-1內(nèi)點(diǎn)罰步驟:(1)給定初始內(nèi)點(diǎn)x(0)eS,允許誤差e>0,障礙參數(shù)Y⑴,縮小系數(shù)bG(0,1),置k=1;(2)以(2)以x(k-1)為初始點(diǎn),求解下列規(guī)劃問題:minf(minf(x)+y(k)B(x)s.t.xeS,令x(k)為所求極小點(diǎn)(3)如果y(k)(3)如果y(k)B(x(k))<e則停止計(jì)算,得到結(jié)果x(k),(4)否則令y(k+i)=by(k)置k=k+1,返回(2)。內(nèi)點(diǎn)罰計(jì)算框圖程序清單內(nèi)點(diǎn)罰函數(shù)法程序見附錄12實(shí)驗(yàn)結(jié)果運(yùn)行結(jié)果為:■"D:\PrcigramFiles&B6}\MicrosoftVisuialSidi^oukDebug\2iyuan-e>e'用內(nèi)具法求斛“inFCH'TKIH顓ql<H>-Xli>-9附錄1#include<>#include<>#defineMAX20480doublefun(doublex)returnx*x*x-2*x+1;}doubleMax_Num(doublea,doubleb)if(a>b)returna;elsereturnb;}doubleMin_Num(doublea,doubleb){if(a<b)returna;elsereturnb;}voidStepAdding_Search(double&a,double&b){doublet[MAX]={0};doubleh[MAX]={0};doublef[MAX]={0};doubleresult=0;doublep=2;t[0]=0;h[0]=1;f[0]=fun(t[0]);for(intk=0;k<MAX-1;k++){t[k+1]=t[k]+h[k];f[k+1]=fun(t[k+1]);if(f[k+1]<f[k]){h[k+1]=p*h[k];result=t[k];t[k]=t[k+1];f[k]=f[k+1];}elseif(k==0){h[k]=-h[k];result=t[k+1];}else{a=Min_Num(result,t[k+1]);b=Max_Num(result,t[k+1]);}}}intmain()doublea=;doubleb=;StepAdding_Search(a,b);cout<<"該問題的根的搜索空間是:["<<a<<'',''<<b<<'']\n”;return0;}附錄2#include<>#include<>#defineepsdoublefun(doublex){returnx*x+2*x;}doublediff_fun(doublex){return2*x+2;}doubledichotomy(doublea,doubleb){doublec=;if((diff_fun(a)<0)&&(diff_fun(b)>0)){while(true){c=(a+b)/2;if(diff_fun(c)<0){a=c;if(fabs((a-b))<eps){return(a+b)/2;}}elseif(diff_fun(c)==0){returnc;}else{b=c;if(fabs((a-b))<eps){return(a+b)/2;}}}}}intmain(){doublea=;doubleb=;doubleresult=dichotomy(a,b);cout<<"求解的結(jié)果是:"<<result<<endl;return0;}附錄3#include<>#include<>#defineepsdoublefun(doublex){returnx*x*x-2*x+1;}doublediff_fun(doublex){return3*x*x-2;}doublediff_2_fun(doublex){return6*x;}doublenewton(doublea,doubleb){doubleresult=(a+b)/2;doublet=;while(true){t=result-(diff_fun(result)/diff_2_fun(result));if(fabs((t-result))<eps){returnresult;}else{result=t;}}}intmain(){doublea=;doubleb=;doublex=newton(a,b);cout<<"求解的結(jié)果是x="<<x<<endl;cout<<"此時(shí)f(x)="<<fun(x)<<endl;return0;}附錄4#include<iostream>#include<>usingnamespacestd;doublefun(doublet){return(t*t+2*t);}voidGoldensection(double(*pfun)(doublet)){intmaxflag=1000,k=1;doublea=-3,b=5,err=,t,t1,t2;do{t1=a+*(b-a);t2=*(b-a);if(t1=t2){a=t2;b=t1;}else{if(t1<t2){a=t2;}else{b=t1;}}k++;}while(fabs(a-b)>err&&k<maxflag);if(k>=maxflag)cout<<endl<<"黃金分割法迭代失敗!迭代次數(shù)為k="<<k<<endl;else{t=(a+b)/2;cout<<endl<<"黃金分割法迭代成功!迭代次數(shù)為k="<<kT<<endl;cout<<"迭代結(jié)果:近似根為root="<<t<<endl;cout<<"函數(shù)值近似為:f(root)="<<fun(t)<<endl;}}intmain(){Goldensection(fun);return0;}附錄5#include<iostream>#include<>usingnamespacestd;doublefun(doublex){return(8*x*x*x-2*x*x-7*x+3);}doublemax(doublea,doubleb){if(a>b)returna;elsereturnb;}doublemin(doublea,doubleb){if(a>b)returnb;elsereturna;}voidParainterpolation(double(*pfun)(doublex)){doublea=0,b=2,err=,x=0,x0=1,f,f0;do{x=((x0*x0-b*b)*fun(a)+(b*b-a*a)*fun(x0)+(a*a-x0*x0)*fun(b))/(2*((x0-b)*fun(a)+(b-a)*fun(x0)+(a-x0)*fun(b)));f0=fun(x0);f=fun(x);if(f=f0){a=min(x,x0);b=max(x,x0);x0=(a+b)/2;}else{if((fun(x)-f0)*(x-x0)>0){b=max(x,x0);x0=min(x,x0);}else{a=min(x,x0);x0=max(x,x0);}}}while(fabs(x-x0)>err);x=(x+x0)/2;cout<<"迭代結(jié)果:"<<endl;cout<<"近似根:"<<x<<endl;cout<<"函數(shù)值近似為:"<<fun(x)<<endl;}intmain(){Parainterpolation(fun);return0;}附錄6#include<>#include<>doublelamda(doublex[2],doublep[2],doublea[2]){doublelam1,lam2;lam1=(pow(a[0],3)*x[0]*x[0]+pow(a[1],3)*x[1]*x[1]);lam2=-(pow(a[0]*x[0],2)+pow(a[1]*x[1],2));doubles;s=-lam2/(2*lam1);returns;}voidmain(){cout<<"最速下降法求解最優(yōu)解程序運(yùn)行結(jié)果"<<endl;cout<<endl;doublelamd,x[3],a[6];doublep[2],g[2],e,y,m,n;inti=0;cout<<"請輸入精度e"<<endl;cin>>e;cout<<"請輸入初始點(diǎn)x[0],x[1]的值:\n"<<endl;cin>>m;cin>>n;x[0]=m;x[1]=n;cout<<"函數(shù)通式為f(x)=a[0]x1*x1+a[1]x2*x2+a[2]x1*x2+a[3]x1+a[4]x2+a[5]"<<endl;cout<<"請依次輸入函數(shù)的系數(shù):a[0]、a[1]、a[2]、a[3]、a[4]、a[5]:"<<endl;for(i=0;i<6;i++)cin>>a[i];p[0]=(2*a[0]*x[0]+a[2]*x[1]+a[3]);p[1]=(2*a[1]*x[1]+a[2]*x[0]+a[4]);g[0]=-p[0];g[1]=-p[1];i=0;cout<<endl;while(sqrt(g[0]*g[0]+g[1]*g[1])>e&&i<=200){lamd=lamda(x,g,a);x[0]=x[0]+lamd*g[0];x[1]=x[1]+lamd*g[1];p[0]=2*a[0]*x[0];p[1]=2*a[1]*x[1];g[0]=-p[0];g[1]=-p[1];i++;cout<<"******************************************"<<endl;cout<<"第"<<i<<”次迭代結(jié)果:"<<endl;cout<<"p的模為:"<<sqrt(g[0]*g[0]+g[1]*g[1])<<endl;cout<<"x的值"<<x[0]<<""<<x[1]<<endl;cout<<"******************************************"<<endl;cout<<endl;}y=(a[0]*x[0]*x[0]+a[1]*x[0]*x[1]+a[2]*x[0]*x[1]+a[3]*x[0]+a[4]*x[1]+a[5]);cout<<"此時(shí)滿足精度要求的p的模為:"<<sqrt(g[0]*g[0]+g[1]*g[1])<<endl;cout<<endl;cout<<"滿足精度的最優(yōu)近似結(jié)果x[1],x[2]分別為:"<<endl;cout<<"x[1]="<<x[0]<<endl;cout<<"x[2]="<<x[1]<<endl;cout<<endl;cout<<"滿足進(jìn)度要求所得的最優(yōu)值為:"<<endl;cout<<"minf(x)="<<y<<endl;}附錄7#include<>#include""極小點(diǎn)為:"<<"f="<<f0<<endl;cout<<"自變量取值為:"<<endl;for(i=0;i<n;i++){cout<<"x"<<i+1<<"="<<x[i]<<endl;}cout<<"迭代次數(shù)為:"<<tap<<endl;}附錄9#include<>#include<>#defineN10#defineepspow(10,-6)doublef(doublex[],doublep[],doublet){doubles;s=pow(x[0]+t*p[0],2)+4*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=;/*初始值*/h=1;/*初始步長*/alpha=2;/*加步系數(shù)*/f0=f(x,p,t0);t1=t0+h;f1=f(x,p,t1);while(1){ if(f1<f0){h=alpha*h;t=t0;t0=t1;f0=f1;k++; }else{ if(k==0) {h=-h;t=t1;}else{ *a=t<t1t:t1;*b=t>t1t:t1;break;}}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);/*調(diào)用進(jìn)退法搜索區(qū)間*/printf("\nx1=%lf,x2=%lf,p1=%lf,p2=%lf”,x[0],x[1],p[0],p[1]);printf("\n[a,b]=[%lf,%lf]”,a,b);beta=(sqrt(5)/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)<eps)break;else{ if(f1<f2){ t=(t1+t2)/2;b=t2;t2=t1;f2=f1;t1=a+b-t2;f1=f(x,p,t1);}else{ a=t1;t1=t2;f1=f2;t2=a+beta*(b-a);f2=f(x,p,t2);}}}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("\n請輸入初始值:\n");for(i=0;i<n;i++)scanf("%lf”,&x[i]);f0=f(x,g,t);g[0]=2*x[0];g[1]=50*x[1];mod1=sqrt(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);/*調(diào)用黃金分割法求t的值*/printf("\np1=%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("\nx1=%lf,x2=%lf,g1=%lf,g2=%lf”,x[0],x[1],g[0],g[1]);*/mod2=sqrt(pow(g[0],2)+pow(g[1],2));/*求梯度的長度*/if(mod2<=eps)break;else {if(k+1==n) {g[0]=2*x[0];g[1]=50*x[1];p[0]=-g[0];p[1]=-g[1];k=0;else{nanda=pow(mod2,2)/pow(mod1,2);printf("\nnanda=%lf,mod=%lf”,nanda,mod2);p[0]=-g[0]+nanda*p[0];p[1]=-g[1]+nanda*p[1];mod1=mod2;k++;}}printf("\n ");}}printf("\n最優(yōu)解為x1=%lf,x2=%lf”,x[0],x[1]);printf("\n最終的函數(shù)值為%lf”,f(x,g,t));}main(){gtd();}附錄10#include<>#include<>#include<>intconstn=2;極小點(diǎn)為:"<<"f="<<f0<<endl;cout<<"取得極小點(diǎn)為自變量取值為:"<<endl;for(i=0;i<n;i++){cout<<"x"<<i+1<<"="<<x[i]<<endl;}}doublefun(doublex[n],doublef_xs[n+n+1+(n-1)*n/2])<<endl;;cout<<"g2(X)=X1+X2-1=0"<<endl;cout<<"結(jié)果是:"<<endl;cout<<"x*="<<endl;for(i=0;i<n;i++)cout<<x[i]<<”";cout<<endl;cout<<"f(x*)="<<fun_original(x)<<endl;}doublefun_original(doublex[n])voidHesse_fun(doublex[n],doubleHesse[n][n]);<<endl;;cout<<"g2(X)=X2>=0"<<endl;cout<<"結(jié)果是:"<<endl;cout<<"x*="<<endl;for(i=0;i<n;i++)cout<<x[i]<<”";cout<<endl;cout<<"f(x*)="<<fun_original(x)<<endl;{g0[0]=pow(x[0]+1,2)-Rk/pow(x[1]-1,2);g0[1]=1-Rk/pow(x[1],2);}voidHesse_fun(doublex[n],doubleHesse[n][n])//求出與Rk對應(yīng)的Hesse矩陣Hesse[0][0]=2*(x[0]+1)+2*Rk/pow(x[1]-1,3);Hesse[0][1]=Hesse[1][0]=0;Hesse[1][1]=2*Rk/pow(x[1],3);}intH(doubleg0[n],doublec){doubles=0;for(inti=0;i<n;i++){s+=pow(g0[i],2);}if(sqrt(s)<c)return1;elsereturn0;}voidinv(doublea[n][n],doublec[n][n])//求Hesse矩陣的逆矩陣{doublem[n

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論