優(yōu)化設(shè)計(jì)實(shí)驗(yàn)_第1頁
優(yōu)化設(shè)計(jì)實(shí)驗(yàn)_第2頁
優(yōu)化設(shè)計(jì)實(shí)驗(yàn)_第3頁
優(yōu)化設(shè)計(jì)實(shí)驗(yàn)_第4頁
優(yōu)化設(shè)計(jì)實(shí)驗(yàn)_第5頁
已閱讀5頁,還剩11頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

實(shí)驗(yàn)一 一維搜索方法本實(shí)驗(yàn)求函數(shù)f(x)=(x-3)2以及f(x)=-(x-3)2的搜索區(qū)間[a,b]。并用黃金分割法和插值法分別求最優(yōu)解。一、簡(jiǎn)述進(jìn)退法的基本原理-對(duì)f(x)任選一個(gè)初始點(diǎn)al及初始步長(zhǎng)h,通過比較這兩點(diǎn)函數(shù)值的大小,確定第三點(diǎn)位置,比較這三點(diǎn)的函數(shù)值大小,確定是否為“高一低一高”形態(tài)。選定初始點(diǎn)a,初始步長(zhǎng)h=hO,計(jì)算yl=f(a1),y2=f(a1+h)。比較yl和y2。如y1〉y2,向右前進(jìn);加大步長(zhǎng)h=2h,轉(zhuǎn)(3)向前;如y1〈y2,向左后退;h=一h0,將al與a2,yl與y2的值互換。轉(zhuǎn)(3)向后探測(cè);如yl=y2,極小點(diǎn)在al和al+h之間。產(chǎn)生新的探測(cè)點(diǎn)a3=al+h,y3=f(a3);⑷比較函數(shù)值y2與y3:(b)如y2〉y3,加大步長(zhǎng)h=2h,al=a2,a2=a3,轉(zhuǎn)(3)繼續(xù)探測(cè)。(a)如y2〈y3,則初始區(qū)間得到:間為[a,b]。二、進(jìn)退法的程序#include"stdafx.h"/*文件包含*/#include"math.h"#include"stdio.h"doublef(doublex){return(x-3)*(x-3);}/*f(x)程序段*/voidfind_ab(doublex0,doubleh0,double*a,double*b){doubleh,xl,yl,x2,y2,x3,y3;/*聲明部分,定義變量h,xl,yl,x2,y2,x3,y3為雙浮點(diǎn)型*/h=h0;xl=x0;yl=f(xl);x2=xl+h;y2=f(x2);訐(y2>=y1)/*判斷yl與y2的大小*/{h=-h0;/*執(zhí)行后退,步長(zhǎng)為負(fù)*/x3=x1;y3=y1;x1=x2;/*實(shí)現(xiàn)xl與x2對(duì)換yl與y2對(duì)換*/yl=y2;x2=x3;y2=y3;}for(;;)/*當(dāng)y2<y3時(shí),退出循環(huán)體*/{h=h*2.0;x3=x2+h;y3=f(x3);訐(y2<y3)break;x1=x2;yl=y2;x2=x3;y2=y3;/*實(shí)現(xiàn)xl與x2對(duì)換yl與y2對(duì)換*/}訐(h>0)/*為正時(shí)執(zhí)行*/{*a=x1;*b=x3;}else/*為負(fù)時(shí)執(zhí)行*/{*a=x3;*b=x1;進(jìn)退法的運(yùn)行結(jié)果四、簡(jiǎn)述黃金分割法的基本原理通過對(duì)分割點(diǎn)函數(shù)值進(jìn)行比較來逐次縮短區(qū)間,在初始期間內(nèi)取兩點(diǎn)XI和X2,X1VX2且在區(qū)間內(nèi)處對(duì)稱位置,兩點(diǎn)的對(duì)稱函數(shù)值為Y1=f(x1),y2=f(x2)比較y1與y2的大小,有下面兩種情況1、 若有y1vy2,極小點(diǎn)必在區(qū)間【a,x2】?jī)?nèi),此時(shí)令b?x2,新的區(qū)間為【a,x2】;2、 若有yl〉=y2,極小點(diǎn)必在【xl,b】?jī)?nèi),此時(shí)令a?xl,縮短后的新區(qū)間為【x1,b】.經(jīng)過對(duì)兩內(nèi)點(diǎn)函數(shù)值的比較,區(qū)間縮短一次??s短后的新區(qū)間是原區(qū)間的一部分,即舍去陰影線部分,留下其左面或右面部分,其間保留著原兩內(nèi)點(diǎn)x1與x2當(dāng)中的一個(gè),則新的區(qū)間中只有一個(gè)內(nèi)點(diǎn)。為了進(jìn)行下一次的縮短區(qū)間,在新的區(qū)間中再以對(duì)稱原則補(bǔ)增一個(gè)內(nèi)點(diǎn),重復(fù)上述函數(shù)值的比較,如此反復(fù)分割,使區(qū)間逐次地加以縮短五、黃金分割法的程序voidsearch_gold(doublea,doubleb,doublee,double*x,double*y){doublexl,x2,yl,y2;/*聲明部分,定義變量h,xl,yl,x2,y2為雙浮點(diǎn)型*/do{xl=a+0.382*(b-a);yl=f(xl);/*取x1與x2點(diǎn)*/x2=a+0.618*(b-a);y2=f(x2);訐(y1vy2)/*判斷yl與y2的大小*/{b=x2;x2=x1;y2=y1;xl=a+0.382*(b-a);yl=f(xl);/*新的區(qū)間為【a,x2】*/}else{a=x1;x1=x2;y1=y2;x2=a+0.618*(b-a);y2=f(x2);/*縮短后的新區(qū)間為【xl,b】*/while(b-a>e);/*判斷精度,不滿足條件退出*/*x=0.5*(a+b);*y=f(*x);}voidsearch_insert(doublea,doubleb,doublee,double*xpt,double*fpt)/*子程序段*/{doublexl,x2,fl,f2,x3,f3,xp,fp,xp0,cl,c2;/*聲明部分,定義變量xl,x2,fl,f2,x3,f3,xp,fp,xp0,cl,c2為雙浮點(diǎn)型*/intk=1;x1=a;x3=b;x2=0.5*(a+b);f1=f(x1);f2=f(x2);f3=f(x3);xp0=0;for(;;){訐(c2==0.0){*xpt=x2;*fpt=f2;break;}xp=0.5*(x1+x3-c1/c2);fp=f(xp);訐((xp-x1)*(x3-xp)<=0.0){ }訐(k!=1)訐(fabs(xp0-xp)v=e){ }訐(xp>x2)訐(f2vfp){}else{}else訐(f2vfp){xl=xp;fl=fp;}else{x3=x2;f3=f2;x2=xp;f2=fp;}xpO=xp;k++;}}intmain(intargc,char*argv[])/*主函數(shù)*/{doublea,b;intxO,hO;printf(-請(qǐng)輸入:初始步長(zhǎng)hO,起始點(diǎn)xO\n");scanf("%f,%f",&hO,&x0);find_ab(xO,hO,&a,&b);printf("%f,%f\n",a,b);doublex,y;search_gold(a,b,0.l,&x,&y);printf("%f,%f",x,y);/*輸出結(jié)果*/}六、黃金分割法的運(yùn)行結(jié)果七、簡(jiǎn)述二次插值法的基本原理由于初始區(qū)間較大,只用一回二次插值計(jì)算所得的X*p作為原函數(shù)的X*的近似解常常達(dá)不到預(yù)期的精度要求,為此需要再作區(qū)間的縮短,進(jìn)行多次的插值計(jì)算,使X*p得點(diǎn)列不斷逼近原函數(shù)的極小點(diǎn)X*.第一次區(qū)間縮短的方法:計(jì)算X*p點(diǎn)的函數(shù)值f(x*p),記作f*p,比較f*p與f2,取其中較小者所對(duì)應(yīng)的點(diǎn)作為新的x2,以此點(diǎn)左右兩鄰點(diǎn)分別取作新的x1和x2,于是獲得了縮短后的新區(qū)間【xl,x3】根據(jù)x*p相對(duì)于x2的位置和函數(shù)值f*p與f2的比較,區(qū)間縮短分以下四種情況。x*p〉x2,f2〈f*p.以【xl,x*p】為新區(qū)間,即令x3~x*p,x1x2不變x*p〉x2,f2〉=f*p以【x2,x3】為新區(qū)間,即令xl~x2,x2~x*p,x3不變x*pWx2,f2三f*p.以【x1,x2】為新區(qū)間,即令x3?x2,x2jx*p,xl不變。x*pWx2,f2,<f*p.以【x*p,x3】為新區(qū)間,即令xljx*,x2,x3不變。經(jīng)過多次反復(fù)循環(huán),區(qū)間長(zhǎng)度即可逐次減至足夠小的程度。由于在極值點(diǎn)附近的領(lǐng)域內(nèi)目標(biāo)函數(shù)呈現(xiàn)很強(qiáng)的正定二次函數(shù)性態(tài),故插值函數(shù)的最優(yōu)點(diǎn)x*p就及其接近目標(biāo)函數(shù)的最優(yōu)點(diǎn)。八、二次插值法的程序#include"stdafx.h"/*文件包含*/#include"math.h"#include"stdio.h"doublef(doublex){return(x-3)*(x-3);}voidfind_ab(doublex0,doubleh0,double*a,double*b){doubleh,xl,yl,x2,y2,x3,y3;/*聲明部分,定義變量h,xl,yl,x2,y2,x3,y3為雙浮點(diǎn)型*/h=h0;xl=x0;yl=f(xl);/*計(jì)算x*p點(diǎn)的函數(shù)值f(x*p),記作f*p,比較f*p與f2,取其中較小者所對(duì)應(yīng)的點(diǎn)作為新的x2,以此點(diǎn)左右兩鄰點(diǎn)分別取作新的x1和x2,于是獲得了縮短后的新區(qū)間【xl,x3】*/x2=xl+h;y2=f(x2);訐(y2>=y1){h=-h0;x3=x1;y3=y1;x1=x2;y1=y2;x2=x3;y2=y3;}for(;;){h*=2.0;x3=x2+h;y3=f(x3);訐(y2<y3)break;x1=x2;y1=y2;x2=x3;y2=y3;}訐(h>0){*a=x1;*b=x3;}else{*a=x3;*b=x1;}}voidsearch_insert(doublea,doubleb,doublee,double*xpt,double*fpt){doublexl,x2,fl,f2,x3,f3,xp,fp,xp0,cl,c2;/*聲明部分,定義變量xl,x2,fl,f2,x3,f3,xp,fp,xp0,cl,c2為雙浮點(diǎn)型*/intk=1;x1=a;x3=b;x2=0.5*(a+b);f1=f(x1);f2=f(x2);f3=f(x3);xp0=0;for(;;){c1=(f3-f1)/(x3-x1);C2=((f2-f1)/(x2-x1)-c1)/(x2-x3);訐(c2==0.0){*xpt=x2;*fpt=f2;break;}xp=0.5*(x1+x3-c1/c2);fp=f(xp);訐((xp-x1)*(x3-xp)v=0.0){*xpt=x2;*fpt=f2;break;}

f(k!=l)f(fabs(xp0-xp)v=e){*xpt=xp;*fpt=fp;break;}f(xp>x2)f(f2vfp){② x3=xp;f3=fp;/*x*p〉x2,f2〈f*p.【xl,x*p】為新區(qū)間,即令x3~x*p,xlx2不變*/xl=x2;fl=f2;x2=xp;f2=fp;/*x*p〉x2,f2〉=f*p*/*/以【x2,x3】為新區(qū)間,即令xl~x2,x2~x*p,x3不變*/*/}elsef(f2<fp){Xl=xp;fl=fp;/*③x*pWx2,f22f*p.以【x1,x2】為新區(qū)間,即令x3?x2,x2*p,xl不變。*/*/}else{f2,<f*p.以【x*p,x3】為新區(qū)間,即令xl?x*,x2,x3不

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論