機(jī)械優(yōu)化設(shè)計(jì)實(shí)驗(yàn)指導(dǎo)書(shū)_第1頁(yè)
機(jī)械優(yōu)化設(shè)計(jì)實(shí)驗(yàn)指導(dǎo)書(shū)_第2頁(yè)
機(jī)械優(yōu)化設(shè)計(jì)實(shí)驗(yàn)指導(dǎo)書(shū)_第3頁(yè)
機(jī)械優(yōu)化設(shè)計(jì)實(shí)驗(yàn)指導(dǎo)書(shū)_第4頁(yè)
機(jī)械優(yōu)化設(shè)計(jì)實(shí)驗(yàn)指導(dǎo)書(shū)_第5頁(yè)
已閱讀5頁(yè),還剩6頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、實(shí)驗(yàn)一一維搜索方法本實(shí)驗(yàn)求函數(shù) f(x)=(x-3)2 以及f(x)=-(x-3)2的搜索區(qū)間a, b。并用黃金分割法和插值法分別求最優(yōu)解。進(jìn)退法:#include #include /* 函數(shù) f(x)=(x-3)2 */double f(double x) return (x-3)*(x-3);/* 求搜索區(qū)間a,b的函數(shù), x0-初始點(diǎn); h0-初始步長(zhǎng) */void find_ab(double x0,double h0,double *a,double *b) double h,x1,y1,x2,y2,x3,y3; h=h0; x1=x0; y1=f(x1); x2=x1+h; y2

2、=f(x2); if (y2=y1) * * for (;) h*=2.0; x3=x2+h; y3=f(x3); if (y20) * else */*黃金分割法 a,b-搜索區(qū)間a,b; e-精度 x,y-最優(yōu)解X*,F*/void search_gold(double a,double b,double e, double *x,double *y) double x1,x2,y1,y2; x1=*; y1=f(x1); x2=*; y2=f(x2); do if (y1e); */*二次插值法a,b-搜索區(qū)間a,b; e-精度xpt,ypt-最優(yōu)解X*,F*/void search_i

3、nsert(double a, double b, double e, double *xpt, double *fpt)double x1,x2,f1,f2,x3,f3,xp,fp,xp0,c1,c2;int k=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); if (c2=0.0) *, break; xp=0.5*(x1+x3-c1/c2); fp=f(xp); if (xp-x1)*(x3-

4、xp)=0.0) * break; if (k!=1) if (fabs(xp0-xp)x2) if (f2fp) * else * else if (f2fp) x1=xp; f1=fp; else * xp0=xp; k+;實(shí)驗(yàn)二無(wú)約束優(yōu)化方法-鮑威爾方法本實(shí)驗(yàn)用鮑威爾方法求函數(shù) f(x)=(x1-5)2+(x2-6)2 的最優(yōu)解。#include #include #include const MAXN = 10;double xkkMAXN,xkMAXN,skMAXN;int N;double F(double *x) return 4*pow(x0-5,2.0)+pow(x1-6,2

5、.0);double f(double x)for (int i=0; iN; i+) xkki=xki+x*ski;return F(xkk);/*無(wú)約束坐標(biāo)輪換法x0-初始點(diǎn)e1-一維搜索精度e2-求解精度*/double nc_trans(double *x0,double e1,double e2)int i,j,k=1;double a,b,ax,ay,d;for (;) for (j=0; jN; j+) xkj=x0j; for (i=0; iN; i+) for (j=0; jN; j+) if (j=i) skj=1; else skj=0; find_ab(0,1,&a,&

6、b); search_gold(a,b,e2,&ax,&ay); for (j=0; jN; j+) xkj=xkkj; d=0; for (j=0; jN; j+) d+=(x0j-xkkj)*(x0j-xkkj); d=sqrt(d); printf(k=%d;,k); for (j=0; jN; j+) printf(,x%d=%lf;,j+1,xkkj); printf(d=%lfn,d); if (d=e1) break; for (j=0; jN; j+) x0j=xkkj; k+;for (j=0; jN; j+) x0j=xkkj;return F(xkk);/*鮑威爾法x0-

7、初始點(diǎn)e1-一維搜索精度e2-求解精度*/double nc_powell(double *x0,double e1,double e2)int i,j,k=1,m;double a,b,ax,ay,d;double ssMAXNMAXN,s1MAXN, ffMAXN,xMAXN,xnMAXN, xn1MAXN,f0,f1,f2,f3;for (i=0; iN; i+) for (j=0; jN; j+) if (j=i) ssij=1; else ssij=0;for (;) for (j=0; jN; j+) xkj=x0j; for (i=0; iN; i+) for (j=0; jN;

8、 j+) skj=ssij; find_ab(0,1,&a,&b); search_gold(a,b,e2,&ax,&ay); for (j=0; jN; j+) xkj=xkkj; ffi=F(xk); for (j=0; jN; j+) xnj = xkkj; for (j=0; jN; j+) skj=xkkj-x0j; s1j=skj; find_ab(0,1,&a,&b); search_gold(a,b,e2,&ax,&ay); for (j=0; jN; j+) xj=xkkj; d=0; for (j=0; jN; j+) d+=(xj-x0j)*(xj-x0j); d=sqr

9、t(d); printf(k=%d;,k); for (j=0; jN; j+) printf(x%d=%lf;,j+1,x0j); printf(d=%lfn,d); if (d=e1) for (j=0; jN; j+) x0j=xj; break; f0=F(x0); d=f0-ff0; m=0; for (j=1; jN; j+) if (dffj-1-ffj) m=j; d=ffj-1-ffj; for (j=0; j=d) if (f2f3) for (j=0; jN; j+) x0j=xnj; else for (j=0; jN; j+) x0j=xn1j; else for (

10、i=m+1; iN; i+) for (j=0; jN; j+) ssi-1j=ssij; for (j=0; jN; j+) ssN-1j=s1j; for (j=0; jN; j+) x0j=xj; k+;for (j=0; jN; j+) x0j=xkkj;return F(xkk);實(shí)驗(yàn)三無(wú)約束優(yōu)化方法-DFP方法本實(shí)驗(yàn)用DFP方法求函數(shù) f(x)=(x1-5)2+(x2-6)2 的最優(yōu)解。/* DFP法-求梯度*/double DF(double *x,double *df)df0=8*(x0-5); df1=2*(x1-6);return (sqrt(df0*df0+df1*df1

11、);/* DFP法-求構(gòu)造矩陣Ak+1*/void computer_A(double AMAXN, double *cc, double *yy)double BMAXNMAXN,CMAXNMAXN, DMAXNMAXN,EMAXNMAXN;double a,b,c; int i,j,k;for (i=0; iN; i+) for (j=0; jN; j+) Bij=cci*ccj;for (i=0; iN; i+) for (j=0; jN; j+) Dij=yyi*yyj;for (i=0; iN; i+) for (j=0; jN; j+) Eij=0; for (k=0; kN; k

12、+) Eij+=Aik*Dkj;for (i=0; iN; i+) for (j=0; jN; j+) Cij=0; for (k=0; kN; k+) Cij+=Eik*Akj;a=0; for (i=0; iN; i+) a+=cci*cci;b=0;for (i=0; iN; i+) c=0; for (j=0; jN; j+) c+=yyj*Aji; b+=c*yyi;for (i=0; iN; i+) for (j=0; jN; j+) Aij+=Bij/a-Cij/b;/*DFP法x0-初始點(diǎn)e1-一維搜索精度e2-求解精度*/double nc_dfp(double *x0,do

13、uble e1,double e2)int i,j,k;double a,b,ax,ay,d;double AMAXNMAXN,gkMAXN, g0MAXN, ccMAXN,yyMAXN;d=DF(x0,g0);if (d=e1) return F(x0);for (;) for (i=0; iN; i+) for (j=0; jN; j+) if (j=i) Aij=1; else Aij=0; for (i=0; iN; i+) xki=x0i; for (k=0; kN; k+) for (j=0; jN; j+) skj=0;for (i=0; iN; i+) skj+=-Aji*g0

14、i; find_ab(0,1,&a,&b); search_gold(a,b,e2,&ax,&ay); printf(=%lf=,ax); for (j=0; jN; j+) xkj=xkkj; d=DF(xk,gk); for (j=0; jN; j+) printf(x%d=%lf;,j+1,xkj); printf(d=%lfn,d); if (d=e1) for (i=0; iN; i+) x0i=xki;return F(x0); for (i=0; iN; i+) cci=xki-x0i; yyi=gki-g0i; computer_A(A,cc,yy); for (i=0; iN

15、; i+) x0i=xki; g0i=gki; 實(shí)驗(yàn)四約束優(yōu)化方法-約束隨機(jī)方向法 本實(shí)驗(yàn)用隨機(jī)方向法求目標(biāo)函數(shù)的最優(yōu)解。數(shù)學(xué)模型:F(x)=(x1-8)2+(x2-8)2 g1(x)=x1 g2(x)=x2-1 g3(x)=11-x1-x2 #include #include #include #include #define sqr(x) (x)*(x) #define N 10int nt;double funt(double *x,double *g,int *b)int i;g0=x0; g1=x1-1; g2=11-x0-x1;*b=1;for (i=0; int; i+) if

16、(gi0) *b=0; break;return sqr(x0-8)+sqr(x1-8);void find_sk(int nmax,double sk)double sm,c;int i;sm = 0;for (i = 0; i nmax; i+) c =(double)(rand()+1.0)/RAND_MAX; c = 2*c-1; sm += c*c; ski = c;sm = sqrt(sm);for (i = 0; inmax; i+) ski = ski/sm;void main()double a,a0,f0,f,e,skN,xkN,x0N,gN; int b1,b2,b,mt

17、,M,i,k; nt=3; M=50; a0=0.4,e=0.01;x00=2; x01=3; mt=2;f0 = funt(x0,g,&b); for(i=0; imt; i+) xki=x0i;if(!b) return;k=0;srand( (unsigned)time( NULL ) );for(;) if(a0=e) break;if(k=M) a0=0.5*a0; k=0;find_sk(mt,sk); a=a0;for (i = 0; imt; i+) xki = x0i+a*ski;f=funt(xk,g,&b1); b=0;if(!(b1 & ff0) a=-a0; for

18、(i = 0; imt; i+) xki = x0i+a*ski; f=funt(xk,g,&b2); if(b2 & ff0) b=1; else b=1;if(!b) k+; continue;k=0; f0=f;for(i=0; imt; i+) x0i=xki;for(;) for (i = 0; imt; i+) xki = x0i+a*ski; f=funt(xk,g,&b1); if(b1 & ff0) f0=f; for(i=0; imt; i+) x0i=xki; else break;printf(%sn, * 最優(yōu)結(jié)果 *);for (i = 0; imt; i+) pr

19、intf(x*%d = %lfn,i+1,x0i);printf(f* = %lfn,f0);/* * 最優(yōu)結(jié)果 * x*1 = 5.511014 x*2 = 5.488826 f* =12.501044*/實(shí)驗(yàn)五約束優(yōu)化方法-復(fù)合型法 本實(shí)驗(yàn)用復(fù)合型法求目標(biāo)函數(shù)的最優(yōu)解。數(shù)學(xué)模型:F(x)=(x1-8)2+(x2-8)2 g1(x)=x1 g2(x)=x2-1 g3(x)=11-x1-x2 #include #include #include #include #define sqr(x) (x)*(x) #define N 10int nt;double funt(double *x,do

20、uble *g,int *b)int i;g0=x0; g1=x1-1; g2=11-x0-x1;*b=1;for (i=0; int; i+) if (gi0) *b=0; break;return sqr(x0-8)+sqr(x1-8);/* 排序-按函數(shù)值從小到大 */void sort(double pxNN,double *pf,int K,int mt)int i,j,k;double t;for(i=0; iK-1; i+) for(j=i+1; jK; j+) if(pfjpfi) t=pfi; pfi=pfj; pfj=t;for(k=0; kmt; k+) t=pxik;

21、pxik=pxjk; pxjk=t;void main()int i,j,mt,b;double a,f,f0,fr,d,e,c,gN,x0N,xrN;int H,K;/*H-壞點(diǎn),K-復(fù)合形頂點(diǎn)數(shù)*/double pxNN,pfN;/*復(fù)合形頂點(diǎn)及相應(yīng)的函數(shù)值*/double XLN=2,2,XHN=10,10;/*給定變量的下限和上限*/ nt=3; /*不等式個(gè)數(shù)*/ mt=2; /*變量個(gè)數(shù)*/ e=0.001; K=3;srand( (unsigned)time( NULL ) );for(i=0; iK; i+) /*產(chǎn)生初始復(fù)合形 */ do for (j = 0; j mt; j+) c =(double)(rand(

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論