機(jī)械優(yōu)化上機(jī)實驗_第1頁
機(jī)械優(yōu)化上機(jī)實驗_第2頁
機(jī)械優(yōu)化上機(jī)實驗_第3頁
機(jī)械優(yōu)化上機(jī)實驗_第4頁
機(jī)械優(yōu)化上機(jī)實驗_第5頁
已閱讀5頁,還剩14頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、機(jī)械優(yōu)化設(shè)計上機(jī)報告 學(xué) 院: 專 業(yè): 班級學(xué)號: 姓 名: 指導(dǎo)老師:目錄緒論11主要內(nèi)容22一維優(yōu)化方法(黃金分割法)22.1方法簡介22.1.1進(jìn)退法基本原理22.1.2 黃金分割法基本原理22.1.3黃金分割法優(yōu)點32.2進(jìn)退法及黃金分割法程序框圖32.3數(shù)值實例42.4黃金分割法c語言程序42.5運(yùn)行結(jié)果63無約束優(yōu)化方法(鮑威爾法)73.1方法簡介73.1.1 鮑威爾法基本原理73.2鮑威爾法程序框圖73.3數(shù)值實例83.4鮑威爾法c語言程序83.5運(yùn)行結(jié)果124有約束優(yōu)化方法(懲罰函數(shù)法)134.1方法簡介134.1.1 懲罰函數(shù)法基本原理134.2懲罰函數(shù)法程序框圖134.3

2、數(shù)值實例134.4懲罰函數(shù)法c語言程序144.5運(yùn)行結(jié)果15結(jié)束語16參考文獻(xiàn)17緒論隨著科學(xué)發(fā)展的需要,機(jī)械產(chǎn)品設(shè)計質(zhì)量的不斷提高,設(shè)計周期的白益縮短,要求設(shè)計者考慮的因素也愈來愈多,其計算方法的復(fù)雜性和精確性都是一般傳統(tǒng)設(shè)計難以完成的。面對這種技術(shù)發(fā)展的現(xiàn)狀,設(shè)計者便開始求助于新的理論和新的設(shè)計方法。機(jī)械優(yōu)化設(shè)計就是在這種情況下,發(fā)展起來的一種現(xiàn)代設(shè)計方法。優(yōu)化設(shè)計將最優(yōu)化原理和計算機(jī)技術(shù)應(yīng)用于設(shè)計領(lǐng)域,為工程設(shè)計提供一種重要的科學(xué)設(shè)計方法。利用這種新方法,就可以尋找出最佳設(shè)計方案,從而大大提高設(shè)計效率和質(zhì)量。優(yōu)化設(shè)計是以建立數(shù)學(xué)模型進(jìn)行設(shè)計的。優(yōu)化設(shè)計引用了一些新的概念和術(shù)語,如前所述的

3、設(shè)計變量、目標(biāo)函數(shù)、約束條件等。機(jī)械優(yōu)化設(shè)計將機(jī)械設(shè)計的具體要求構(gòu)造成數(shù)學(xué)模型,將機(jī)械設(shè)計問題轉(zhuǎn)化為數(shù)學(xué)問題,構(gòu)成一個完整的數(shù)學(xué)規(guī)劃命題,逐步求解這個規(guī)劃命題,使其最佳地滿足設(shè)計要求,從而獲得可行方案中的最優(yōu)設(shè)計方案。優(yōu)化設(shè)計改變了傳統(tǒng)的設(shè)計方式。傳統(tǒng)設(shè)計方法是被動地重復(fù)分析產(chǎn)品的性能,而不是主動設(shè)計產(chǎn)品的參數(shù)。作為一項設(shè)計不僅要求方案可行、合理,而且應(yīng)該是某些指標(biāo)達(dá)到最優(yōu)的理想方案。并從大量的可行設(shè)計方案中找出種最優(yōu)化的設(shè)計方案,從而實現(xiàn)最優(yōu)化的設(shè)計。優(yōu)化設(shè)計可以滿足多方面的性能要求。產(chǎn)品要求總體結(jié)構(gòu)尺寸小,傳動效率高,生產(chǎn)成本低等,這些要求用傳統(tǒng)設(shè)計方法設(shè)計是無法解決的。實踐證明,最優(yōu)化設(shè)

4、計是保證產(chǎn)品具有優(yōu)良的性能,減輕自重或體積,降低工程造價的一種有效設(shè)計方法。機(jī)械優(yōu)化設(shè)計是適應(yīng)生產(chǎn)現(xiàn)代化要求發(fā)展起來的,是一門嶄新的學(xué)科。它是在現(xiàn)代機(jī)械設(shè)計理論的基礎(chǔ)上提出的一種更科學(xué)的設(shè)計方法,它可使機(jī)械產(chǎn)品的設(shè)計質(zhì)量達(dá)到更高的要求。因此,在加強(qiáng)現(xiàn)代機(jī)械設(shè)計理論研究的同時,還要進(jìn)一步加強(qiáng)最優(yōu)設(shè)計數(shù)學(xué)模型的研究,以便在近代數(shù)學(xué)、力學(xué)和物理學(xué)的新成就基礎(chǔ)上,使其更能反映客觀實際。同時機(jī)械優(yōu)化設(shè)計的研究還必須與工程實踐、數(shù)學(xué)力學(xué)理論、計算技術(shù)和電子計算機(jī)的應(yīng)用等緊密聯(lián)系起來,才能具有更廣闊的發(fā)展前景。機(jī)械優(yōu)化設(shè)計主要有一維搜索方法(進(jìn)退法、黃金分割法、二次插值法等)、無約束優(yōu)化方法(最速下降法、牛

5、頓型方法、共軛梯度法、變尺度法、鮑威爾方法等)、約束優(yōu)化方法(懲罰函數(shù)法等)。1 主要內(nèi)容我編制、調(diào)試了一維優(yōu)化法(黃金分割法)、無約束優(yōu)化方法(鮑威爾方法)、約束優(yōu)化方法(懲罰函數(shù)法)三種優(yōu)化方法的程序,并通過了標(biāo)準(zhǔn)數(shù)據(jù)考評。2 一維優(yōu)化方法(黃金分割法)2.1 方法簡介2.1.1 進(jìn)退法基本原理黃金分割法適用于a,b區(qū)間上的任何單股函數(shù)求極小值問題,對函數(shù)除要求“單谷”外不做其他要求,甚至可以不連續(xù)。因此,這種方法的適應(yīng)面非常廣。黃金分割法也是建立在區(qū)間消去法原理基礎(chǔ)上的試探方法,即在搜索區(qū)間a,b內(nèi)適當(dāng)插入兩點a1,a2,并計算其函數(shù)值。a1,a2將區(qū)間分成三段,應(yīng)用函數(shù)的單谷性質(zhì),通過

6、函數(shù)值大小的比較,刪去其中一段,是搜索區(qū)間得以縮小。然后再在保留下來的區(qū)間上作同樣的處理,如此迭代下去,是搜索區(qū)間無限縮小,從而得到極小點的數(shù)值近似解。2.1.2 黃金分割法基本原理黃金分割法是用于一元函數(shù)f(x)在給定初始區(qū)間a,b內(nèi)搜索極小點*的一種方法。它是優(yōu)化計算中的經(jīng)典算法,以算法簡單、收斂速度均勻、效果較好而著稱,是許多優(yōu)化算法的基礎(chǔ),但它只適用于一維區(qū)間上的凸函數(shù)6,即只在單峰區(qū)間內(nèi)才能進(jìn)行一維尋優(yōu),其收斂效率較低。其基本原理是:依照“去劣存優(yōu)”原則、對稱原則、以及等比收縮原則來逐步縮小搜索區(qū)間7。具體步驟是:1在區(qū)間a,b內(nèi)取點:a1 ,a2 把a(bǔ),b分為三

7、段。2如果f(a1)>f(a2),令a=a1,a1=a2,a2=a+r*(b-a);如果f(a1)<f(a2) ,令b=a2,a2=a1,a1=b-r*(b-a),如果(b-a)/b和(y1-y2)/y2都大于收斂精度重新開始。因為a,b為單峰區(qū)間,這樣每次可將搜索區(qū)間縮小0.618倍或0.382倍,處理后的區(qū)間都將包含極小點的區(qū)間縮小,然后在保留下來的區(qū)間上作同樣的處理,如此迭代下去,將使搜索區(qū)a,b逐步縮小,直到滿足預(yù)先給定的精度時,即獲得一維優(yōu)化問題的近似最優(yōu)解。2.1.3 黃金分割法優(yōu)點 黃金分割法方法簡單,容易編程,對函數(shù)無要求,收斂穩(wěn)定,收斂慢。2.2 進(jìn)退法

8、及黃金分割法程序框圖 圖2-1 進(jìn)退法程序框圖圖2-2 黃金分割法程序框圖2.3 數(shù)值實例 min F(x)=x2-2*x+5最優(yōu)解x*=1,F(x*)=4.2.4 黃金分割法c語言程序#include <stdio.h>#include <math.h> #define e 0.001 #define tt 0.01float f(double x) float y=pow(x,2)-2*x+5;return(y); finding(float *p1,float*p2) float x1=0,x2,x3,t,f1,f2,f3,h=tt; int n=0; x2=x1

9、+h; f1=f(x1); f2=f(x2); if(f2>f1) h=-h;t=x2;x2=x1;x1=t; do x3=x2+h;h=2*h;f3=f(x3);n=n+1; while(f3<f2); if(x1>x3) t=x1;x1=x3;x3=t; *p1=x1;*p2=x3; return(n); gold(float *p) float a,b,x1,x2,f1,f2; int n=0; finding(&a,&b); do x1=a+0.382*(b-a); x2=a+0.618*(b-a); f1=f(x1); f2=f(x2); n=n+1

10、; if(f1>f2) a=x1; else b=x2; while(b-a)>e); *p=(x1+x2)/2; return(n); main() float a,b,x,min; int n1,n2; n1=finding(&a,&b); n2=gold(&x); min=f(x); printf("a=%5.4f,b=%5.4f",a,b); printf("x=%5.4f,f(x)=%5.4f",x,min); 2.5 運(yùn)行結(jié)果 圖2-3在誤差允許的范圍內(nèi),計算機(jī)計算的結(jié)果與實際最優(yōu)解相差不大,因此該程序符合

11、要求。 3 無約束優(yōu)化方法(鮑威爾法)3.1 方法簡介3.1.1 鮑威爾法基本原理 鮑威爾發(fā)是直接利用函數(shù)值來構(gòu)造共軛方向的一種共軛方向法,這種方法是在研究具有正定矩陣的二次函數(shù)的極小化問題形成的。其基本思想是在不用導(dǎo)數(shù)的前提下,在迭代中逐次構(gòu)造G的共軛方向。3.2 鮑威爾法程序框圖 圖3-1 鮑威爾法程序框圖3.3 數(shù)值實例 minF(x)=4*(-5)2+(-7) 2 最優(yōu)解x*=(5,7) F(x*)=03.4 鮑威爾法c語言程序#include <iostream.h> #include <stdio.h>#include <stdlib.h>#in

12、clude <math.h>#include <malloc.h> #include <conio.h> #define n1 2 #define tt 0.005 #define ad 0.0000001 /定義常量 /tt 初始迭代步長 /ad 收斂精度 float ia; float fny(float *x) float f; f=4*pow(x0-5),2)+pow(x1-7),2); /目標(biāo)函數(shù) return(f); float *iterate(float *x,float a, float *s) float *x1; x1=(float *

13、)malloc(n1 * sizeof(float); for (int i=0;i<n1;i+) x1i=xi+a*si; return(x1); float func(float *x,float a,float *s) float *x1;x1=iterate(x,a,s); float f=fny(x1); return(f); void finding(float a3,float f3,float *xk,float *s) float t=tt; float a1,f1; a0=0; f0=func(xk,a0,s); for (int i=0;i+) a1=a0+t; f

14、1=func(xk,a1,s); if (f1<f0) break; if (fabs(f1-f0)>=ad) t=-t;a0=a1; f0=f1; else if (ia=1) return; t=t/2; ia=1; for (i=0;i+) a2=a1+t;f2=func(xk,a2,s); if (f2>f1) break; t=2*t; a0=a1; f0=f1; a1=a2; f1=f2; if (a0>a2) a1=a0; f1=f0; a0=a2;f0=f2;a2=a1; f2=f1; return; /second insert float lagra

15、nge(float *xk,float *ft,float *s) float a3,f3; float b,c,d,aa; finding (a,f,xk,s); for (int i=0;i+) if (ia=1) aa=a1; *ft=f1; break; d=(pow(a0,2)-pow(a2,2)*(a0-a1)-(pow(a0,2)-pow(a1,2)*(a0-a2); if(fabs(d)=0) break; c=(f0-f2)*(a0-a1)-(f0-f1)*(a0-a2)/d; if(fabs(c)=0) break; b=(f0-f1)-c*(pow(a0,2)-pow(a

16、1,2)/(a0-a1); aa=-b/(2*c); *ft=func(xk,aa,s); if (fabs(aa-a1)<=ad) if (*ft>f1) aa=a1; break; if (aa>a1) if (*ft>f1) a2=aa;f2=*ft; else if (*ft<f1) a0=a1;a1=aa; f0=f1; f1=*ft; else if (*ft=f1) a2=aa; a0=a1;f2=*ft; f0=f1; a1=(a0+a2)/2; f1=func(xk,a1,s); else if (*ft>f1) a0=aa; f0=*ft

17、; else if (*ft<f1) a2=a1; a1=aa; f2=f1; f1=*ft; else if (*ft=f1) a0=aa;a2=a1; f0=*ft; f2=f1; a1=(a0+a2)/2;f1=func(xk,a1,s); if (*ft>f1) aa=a1; *ft=f1; return (aa); float *powell(float *xk) float hn1n1,sn1=0,0,ffn1+1=0,0,0; float f1,f3,aa; float dkn1,*x0,xk1n1; int m=0,i,j; for (i=0;i<n1;i+)

18、 for(j=0;j<n1;j+) hij=0; if (j=i) hij=1; for (int k=0;k+) ff0=fny(xk);x0=xk; for (i=0;i<n1;i+) for (j=0;j<n1;j+) sj=hij; float aa=lagrange(xk,&ffi+1,s); xk=iterate(xk,aa,s); for (i=0;i<n1;i+) float a,b; dki=xki-x0i; xk1i=2*xki-x0i; float max=fabs(ff1-ff0); for (i=1;i<n1;i+) if (fa

19、bs(ffi+1-ffi)>max) max=fabs(ffi+1-ffi);m=i; f3=fny(xk1); if (f3<ff0)&&(ff0+f3-2*ff2)*pow(ff0-ffn1-max),2)<0.5*max*pow(ff0-f3),2) aa=lagrange(xk,&f1,dk); xk=iterate(xk,aa,dk); for (i=m;i<n1-1;i+) for (j=0;j<n1;j+) hij=hi+1j; for (j=0;j<n1;j+) hn1-1j=dkj; else if(ffn1>

20、=f3) xk=xk1; float xq=0; for (i=0;i<n1;i+) xq+=pow(xki-x0i),2); if (xq<=ad) break; return(xk); void main() float xkn1=0,0; float *xx; xx=(float *)malloc(n1 *sizeof(float); xx=powell(xk); float ff=fny(xx); cout<<"優(yōu)化的結(jié)果為:"<<endl; printf("nnThe Optimal Design Result Is:

21、n"); for (int i=0;i<n1;i+) printf("nt x%d *=%f",i+1,xxi); printf("nt f*=%f",ff); getch(); 3.5 運(yùn)行結(jié)果 圖3-2 在誤差允許的范圍內(nèi),計算機(jī)計算的結(jié)果與實際最優(yōu)解相差不大,因此該程序符合要求。4 有約束優(yōu)化方法(懲罰函數(shù)法)4.1 方法簡介4.1.1 懲罰函數(shù)法基本原理內(nèi)點法的特點是將構(gòu)造的新的無約束目標(biāo)函數(shù)懲罰函數(shù)定義在可行域內(nèi),并在可行域內(nèi)求懲罰函數(shù)的極值點,即求解無約束問題時的探索點總是在可行域內(nèi)部,這樣,在求解內(nèi)點懲罰函數(shù)的序列無約束優(yōu)化

22、問題的過程中,所求得的系列無約束優(yōu)化問題的解總是可行解,從而在可行域內(nèi)部逐步逼近原約束優(yōu)化問題的最優(yōu)解。內(nèi)點法是求解不等式約束最優(yōu)化問題的一種十分有效方法,但不能處理等式約束。因為構(gòu)造的內(nèi)點懲罰函數(shù)是定義在可行域內(nèi)的函數(shù),而等式約束優(yōu)化問題不存在可行域空間,因此,內(nèi)點法不能用來求解等式約束優(yōu)化問題。 4.2 懲罰函數(shù)法程序框圖圖4-1 懲罰函數(shù)法程序框圖4.3 數(shù)值實例 minF(x)=(-4)2+(-2) 2s.t. g(x)=1-0最優(yōu)解x*=(1,0) F(X*)=134.4 懲罰函數(shù)法c語言程序#include <stdio.h>#include "math.h" #define e1 0.01 #define e2 0.01 #define n 100 double fun1(double x,int m) double f1; f1=pow(x0-4),2)+pow(x1-2),2); return f1 double fun2(double x,int m,double r) double f2; f2=pow(x0-4),2)+pow(x1-1),2)-r*log(x1-1); return f2; int main(int argc, char* argv) in

溫馨提示

  • 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論