機(jī)械優(yōu)化設(shè)計(jì)實(shí)驗(yàn)報(bào)告(浙江理工大學(xué))_第1頁(yè)
機(jī)械優(yōu)化設(shè)計(jì)實(shí)驗(yàn)報(bào)告(浙江理工大學(xué))_第2頁(yè)
機(jī)械優(yōu)化設(shè)計(jì)實(shí)驗(yàn)報(bào)告(浙江理工大學(xué))_第3頁(yè)
機(jī)械優(yōu)化設(shè)計(jì)實(shí)驗(yàn)報(bào)告(浙江理工大學(xué))_第4頁(yè)
機(jī)械優(yōu)化設(shè)計(jì)實(shí)驗(yàn)報(bào)告(浙江理工大學(xué))_第5頁(yè)
已閱讀5頁(yè),還剩14頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上機(jī)械優(yōu)化設(shè)計(jì)實(shí)驗(yàn)報(bào)告班級(jí):XXXX姓名:XX 學(xué)號(hào):XXXXXXXXXXX一、 外推法1、 實(shí)驗(yàn)原理常用的一維優(yōu)化方法都是通過逐步縮小極值點(diǎn)所在的搜索區(qū)間來求最優(yōu)解的。一般情況下,我們并不知道一元函數(shù)f(X)極大值點(diǎn)所處的大概位置,所以也就不知道極值點(diǎn)所在的具體區(qū)域。由于搜索區(qū)間范圍的確定及大小直接影響著優(yōu)化方法的收斂速度及計(jì)算精度。因此,一維優(yōu)化的第一步應(yīng)首先確定一個(gè)初始搜索區(qū)間,并且在該區(qū)間內(nèi)函數(shù)有唯一的極小值存在。該區(qū)間越小越好,并且僅存在唯一極小值點(diǎn)。所確定的單股區(qū)間應(yīng)具有如下性質(zhì):如果在1,3區(qū)間內(nèi)任取一點(diǎn)2,,1<2<3或3<2<1

2、,則必有f(1)>f(2)<f(3)。由此可知,單股區(qū)間有一個(gè)共同特點(diǎn):函數(shù)值的變化規(guī)律呈現(xiàn)“大-小-大”或“高-低-高”的趨勢(shì),在極小值點(diǎn)的左側(cè),函數(shù)值呈嚴(yán)格下降趨勢(shì),在極小值點(diǎn)右側(cè),函數(shù)值呈嚴(yán)格上升趨勢(shì),這正是單股區(qū)間依據(jù)。2、 實(shí)驗(yàn)工具C-Free3.5軟件3、 程序調(diào)試#include<stdio.h>#include<math.h>#define f(x) 3*x*x-8*x+9 /定義函數(shù)int main()double a0,a1,a2,a3,f1,f2,f3,h;printf(“a0=”,a0); /單谷區(qū)間起始點(diǎn)scanf(“%lf”,&a

3、mp;a0);printf(“h=”,h); /起始的步長(zhǎng)scanf(“%lf”,&h);a1=a0;a2=a1+h;f1=f(a0);f2=f(a2);if(f1>f2) /判斷函數(shù)值的大小,確定下降方向 a3=a2+h; f3=f(a3);else h=-h; a3=a1; f3=f1; a1=a2; f1=f2; a2=a3; f2=f3; a3=a2+h; f3=f(a3);while(f3<=f2) /當(dāng)不滿足上述比較時(shí),說明下降方向反向,繼續(xù)進(jìn)行判斷 h=2*h; a1=a2; f1=f2; a2=a3; f2=f3; a3=a2+h; f3=f(a3);pri

4、ntf(“a1=%lf,a3=%lfn”,a1,a3);printf(“a1,a3=%lf,%lfn”,a1,a3); /輸出區(qū)間4、 調(diào)試結(jié)果5、 總結(jié)與討論1) 當(dāng)寫成void main時(shí)會(huì)出現(xiàn)如下警告改成int main警告消失。二、 黃金分割法1、 實(shí)驗(yàn)原理在外推法確定了單股區(qū)間1,3的基礎(chǔ)上去其中對(duì)稱兩點(diǎn)2,4,且滿足2=3-3-14=1+(3-1)式中,位01的縮小系數(shù)。計(jì)算點(diǎn)2,4的函數(shù)值,記f2=f(2),f4=f(4),并比較他們的大小,可能存在如下三種情況:(1)f2<f4:此時(shí)必有極小值點(diǎn)1,4,應(yīng)舍去區(qū)間4,3,保留的區(qū)間長(zhǎng)度為l,縮小后的新區(qū)間為1,4;(2)f

5、2>f4:此時(shí)必有極小值點(diǎn)2,3,應(yīng)舍去區(qū)間1,2,保留的區(qū)間長(zhǎng)度為l,縮小后的新區(qū)間為2,3;(3)f2=f4:此時(shí)必有極小值點(diǎn)2,4,應(yīng)舍去區(qū)間1,2或4,3。經(jīng)過比較取舍后,縮小后所得的新區(qū)建長(zhǎng)度均為l,將區(qū)間端點(diǎn)重新命名為1,3,就可以進(jìn)行新一輪的比較,如此循環(huán)。2、 實(shí)驗(yàn)工具C-Free 3.5軟件3、 程序調(diào)試#include<stdio.h>#include<math.h>#define f(x) 3*x*x-8*x+9#define v 0.618 /黃金分割點(diǎn)int main() float a0,a1,a2,a3,a4,f0,f1,f2,f3,

6、f4,b; /b收斂精度 puts("單谷區(qū)間 a1="); scanf("%f",&a1); puts("單谷區(qū)間 a3="); scanf("%f",&a3); puts("收斂精度 b="); scanf("%.4f",b); a2=a3-v*(a3-a1); f2=f(a2); a4=a1+v*(a3-a1); f4=f(a4); do /do-while循環(huán),知道滿足條件退出循環(huán) if(f2>f4) /判斷函數(shù)值大小,縮小比較區(qū)間 a1=a2;

7、 a2=a4; f2=f4; a4=a1+v*(a3-a1); f4=f(a4); else a3=a4; a4=a2; f4=f2; a2=a3-v*(a3-a1); f2=f(a2); while(abs(a3-a1)>b); a0=(a3+a1)/2; f0=f(a0); printf("a0=%lfn",a0); /輸出結(jié)果 printf("f0=%lfn",f0);4、 調(diào)試結(jié)果5、 總結(jié)與討論1) 要選擇合適的循環(huán)嵌套語句,實(shí)現(xiàn)循環(huán)的同時(shí)判斷;2) 在執(zhí)行puts("單谷區(qū)間 a1="); scanf("%

8、f",&a1); puts("單谷區(qū)間 a3="); scanf("%f",&a3); puts("收斂精度 b="); scanf("%.4f",b);語句時(shí),注意在最后一個(gè)scanf語句約束輸入的位數(shù),如在前面輸入約束,puts("單谷區(qū)間 a1="); scanf("%.4f",&a1); puts("單谷區(qū)間 a3="); scanf("%.4f",&a3); puts("收斂

9、精度 b="); scanf("%.4f",b);如會(huì)出現(xiàn)程序如下錯(cuò)誤:如不輸入約束,函數(shù)由于float的精度位數(shù)太高,會(huì)陷入死循環(huán),導(dǎo)致程序崩潰。如圖所示:三、 鮑威爾法1、 實(shí)驗(yàn)原理鮑威爾法多維無約束優(yōu)化算法 是在無約束優(yōu)化算法之一,首先選取一組共軛方向,從某個(gè)初始點(diǎn)出發(fā),求目標(biāo)函數(shù)在這些方向上的極小值點(diǎn),然后以該點(diǎn)為新的出發(fā)點(diǎn),重復(fù)這一過程直到獲得滿意解,其優(yōu)點(diǎn)是不必計(jì)算目標(biāo)函數(shù)的梯度就可以在有限步內(nèi)找到極值點(diǎn)。 鮑威爾法是以共軛方向?yàn)榛A(chǔ)的收斂較快的直接法之一,是一種十分有效的算法。在無約束方法中許多算法都是以共軛方向作為搜索方向,它們具有許多特點(diǎn)。根據(jù)構(gòu)

10、造共軛方向的原理不同,可以形成不同的共軛方向法。2、 實(shí)驗(yàn)工具C-Free 3.5 軟件3、 程序調(diào)試#include <stdio.h>#include <stdlib.h>#include <math.h>double objf(double x)/定義目標(biāo)函數(shù)double ff;ff=10*(x0+x1-5)*(x0+x1-5)+(x0-x1)*(x0-x1);return(ff); /返回函數(shù)值void jtf(double x0 ,double h0,double s ,int n,double a ,double b )int i; double

11、 *x3,h,f1,f2,f3; for (i=0;i<3;i+) xi=(double *)malloc(n*sizeof(double); h=h0; for(i=0;i<n;i+)*(x0+i)=x0i; f1=objf(x0); for(i=0;i<n;i+)*(x1+i)=*(x0+i)+h*si; f2=objf(x1); if(f2>=f1) h= -h0; for (i=0;i<n;i+)*(x2+i)=*(x0+i); f3=f1; for(i=0;i<n;i+) *(x0+i)= *(x1+i);*(x1+i)= *(x2+i); f1=

12、f2; f2=f3;for(;)h=2. *h;for(i=0;i<n;i+) *(x2+i)=* (x1+i) +h*si;f3= objf(x2);if(f2<f3) break;else for(i=0;i<n;i+) *(x0+i)= *(x1+i);*(x1+i)= *(x2+i); f1=f2; f2=f3; if(h<0. )for(i=0;i<n;i+) ai=*(x2+i); bi=*(x0+i); else for(i=0;i<n;i+) ai=*(x0+i); bi=*(x2+i); for(i=0;i<3;i+) free(xi

13、);double gold(double a,double b,double eps,int n,double xx)int i;double f1,f2,*x2,ff,q,w;for(i=0;i<2;i+)xi=(double*)malloc (n*sizeof(double);for(i=0;i<n;i+)*(x0+i)=ai+0.618*(bi-ai);*(x1+i)=ai+0.382*(bi-ai);f1=objf(x0);f2=objf(x1);doif(f1>f2)for(i=0;i<n;i+)bi=*(x0+i);*(x0+i)=*(x1+i);f1=f2

14、;for(i=0;i<n;i+)*(x1+i)=ai+0.382*(bi-ai);f2=objf(x1);elsefor(i=0;i<n;i+)ai=*(x1+i);*(x1+i)=*(x0+i);f2=f1;for(i=0;i<n;i+)*(x0+i)=ai+0.618*(bi-ai);f1=objf(x0);q=0;for(i=0;i<n;i+)q=q+(bi-ai)*(bi-ai);w=sqrt(q);while(w>eps);for(i=0;i<n;i+)xxi=0.5*(ai+bi);ff=objf(xx);for(i=0;i<2;i+)fr

15、ee(xi);return(ff);double oneoptim(double x0,double s,double h0,double epsg,int n,double x) double *a,*b,ff; a=(double *)malloc(n*sizeof(double); b=(double *)malloc(n*sizeof(double); jtf(x0,h0,s,n,a,b); ff=gold(a,b,epsg,n,x); free(a); free(b); return(ff);double powell(double p,double h0,double eps,do

16、uble epsg,int n,double x) int i,j,m; double *xx4,*ss,*s; double f,f0,f1,f2,f3,fx,dlt,df,sdx,q,d; ss=(double *)malloc(n*(n+1)*sizeof(double); s=(double *)malloc(n*sizeof(double); for (i=0;i<n;i+) for (j=0;j<=n;j+) *(ss+i*(n+1)+j)=0; *(ss+i*(n+1)+i)=1; for (i=0;i<4;i+) xxi=(double *)malloc(n*

17、sizeof(double); for (i=0;i<n;i+) *(xx0+i)=pi; for(;) for (i=0;i<n;i+) *(xx1+i)=*(xx0+i); xi=*(xx1+i); f0=f1=objf(x); dlt=-1; for (j=0;j<n;j+) for (i=0;i<n;i+) *(xx0+i)=xi; *(s+i)=*(ss+i*(n+1)+j); f=oneoptim(xx0,s,h0,epsg,n,x); df=f0-f; if(df>dlt) dlt=df; m=j; sdx=0.; for (i=0;i<n;i

18、+) sdx=sdx+fabs(xi-(*(xx1+i); if(sdx<eps) free(ss); free(s); for (i=0;i<4;i+) free(xxi); return(f); for (i=0;i<n;i+) *(xx2+i)=xi; f2=f; for (i=0;i<n;i+) *(xx3+i)=2.*(*(xx2+i)-(*(xx1+i); xi=*(xx3+i); fx=objf(x); f3=fx; q=(f1-2*f2+f3)*(f1-f2-dlt)*(f1-f2-dlt); d=0.5*dlt*(f1-f3)*(f1-f3); if(

19、f3<f1)|(q<d) if(f2<=f3) for (i=0;i<n;i+) *(xx0+i)=*(xx2+i); else for (i=0;i<n;i+) *(xx0+i)=*(xx3+i); else for (i=0;i<n;i+) *(ss+(i+1)*(n+1)=xi-(*(xx1+i); *(s+i)=*(ss+(i+1)*(n+1); f=oneoptim(xx0,s,h0,epsg,n,x); for(i=0;i<n;i+) *(xx0+i)=xi; for (j=m+1;j<=n;j+) for (i=0;i<n;i

20、+) *(ss+i*(n+1)+j-1)=*(ss+i*(n+1)+j); int main() /主函數(shù) double p=1,1; double ff,x2; ff=powell(p,0.3,0.001,0.0001,2,x); printf("輸出最優(yōu)點(diǎn)及其目標(biāo)函數(shù)值:n"); printf("x0=%.4f,x1=%.4f,ff=%.4fn",x0,x1,ff);4、 調(diào)試結(jié)果5、 總結(jié)與討論1) 鮑威爾法用C語言來編寫存在很大的難度,由于C語言沒有專屬的矩陣運(yùn)算和求導(dǎo)運(yùn)算算法,所以又給編寫鮑威爾法增加了很大難度,需要先定義矩陣的運(yùn)算函數(shù)和求導(dǎo)的運(yùn)算函數(shù)。因此,鮑威爾法編寫的難點(diǎn)集中在了函數(shù)的編寫,其主函數(shù)并不難。2) 有程序框圖可得鮑威爾法的基本算法結(jié)構(gòu)如下:dodo循環(huán)體While(判別式);If(判別式) 表達(dá)式1elseif(判別式) 表達(dá)式2else 語句while(判別式);機(jī)械優(yōu)化設(shè)計(jì)問題1、 問題描述現(xiàn)有一單級(jí)漸開線直齒圓柱齒輪

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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)論