優化設計實驗報告(...)(1)_第1頁
優化設計實驗報告(...)(1)_第2頁
優化設計實驗報告(...)(1)_第3頁
優化設計實驗報告(...)(1)_第4頁
優化設計實驗報告(...)(1)_第5頁
已閱讀5頁,還剩9頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、機械優化設計實驗報告姓名:歐陽龍學號:2007500817班級:07機設一班一、黃金分割法數學模型,黃金分割法簡介黃金分割法適用于單谷函數求極小值問題,且函數可以不連續。黃金分割法是建立在區間消去法原理根底上的試探方法,即在搜索區間內適當插入兩點、,并計算其函數值。、將區間分成三段。應用函數的單谷性質,通過函數值大小的比擬,刪去其中一段,使搜索區間得以縮短。然后再在保存下來的區間上作同樣的處置,如此迭代下去,使搜索區間無限縮小,從而得到極小點的數值近似解。黃金分割法能使相鄰兩次都具有一樣的縮短率0.618,故黃金分割法又稱作0.618法。3、黃金分割法程序清單#include#include/

2、*目標函數*/float ff(float x)float y;y=x*x+2*x;return(y); main()float a,b,ab,Epsilon;float y1,y2,Alpha1,Alpha2;float Lambda=0.618;printf(please input the arear and Epsilonn);scanf(%f,%f,%f,&a,&b,&Epsilon);Alpha1=b-Lambda*(b-a),Alpha2=a+Lambda*(b-a);printf(%f,%fn,Alpha1,Alpha2);y1=ff(Alpha1);y2=ff(Alpha2)

3、;printf(y1=%f,y2=%fn,y1,y2);doif(y1=y2)a=Alpha1;Alpha1=Alpha2;y1=y2;Alpha2=a+Lambda*(b-a);y2=Alpha2*Alpha2+2*Alpha2;elseb=Alpha2;Alpha2=Alpha1;y2=y1;Alpha1=b-Lambda*(b-a);y1=Alpha1*Alpha1+2*Alpha1;printf(a=%f,b=%f,y1=%f,y2=%fn,a,b,y1,y2);while(!(abs(b-a)/b)Epsilon&abs(y2-y1)/y2)Epsilon);ab=0.5*(a+b)

4、;y1=ff(ab);printf(the result is :%f,y1);getch();4、運行結果:變尺度法數學模型變尺度法簡介根本思想:用簡單矩陣代替二階導數矩陣的逆矩陣用坐標變換簡化目標函數具體如下:當用牛頓法尋求極小點時,其牛頓迭代公式為其中 在迭代中建立變尺度矩陣來替換,即構造一個矩陣序列來逼近海賽逆矩陣序列。每迭代一次,尺度就改變一次,這正是“變尺度的含義。這樣,上式變為 其中是從出發,沿方向 作一維搜索而得到的最正確步長。當單位矩陣時,它就變成最速下降法。這就是變尺度法的根本思想。變尺度法程序清單:/*計算 f(x1,x2)=x12+8*x22-4*x1-2*x1*x2

5、的無約束極值,初始點x0=1,1。tt - 一維搜索初始步長ff - 差分法求梯度時的步長ac - 終止迭代收斂精度ad - 一維搜索收斂精度n - 設計變量的維數xkn - 迭代初始點*/#include#include#include#include#define n 8double ia;double fny(double *x) double x1=x0,x2=x1;double f;f=x1*x1+8*x2*x2-4*x1-2*x1*x2;return f;double * iterate(double *x,double a,double *s)double *x1;int i;x

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

7、1=func(xk,a1,s); if(f1=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(f2f1) break; t=2*t; a0=a1;f0=f1; a1=a2;f1=f2;if(a0a2) a1=a0; f1=f0; a0=a2; f0=f2; a2=a1; f2=f1;return;double lagrange(double *xk,double *ft,double *s) int i;double a3,f3;double b

8、,c,d,aa;finding(a,f,xk,s);for(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(a1,2)/(a0-a1); aa=-b/(2*c); *ft=func(xk,aa,s); if(fabs(aa-a1)f1)

9、 aa=a1;break; if(aaa1) if(*ftf1) a2=aa;f2=*ft; else if(*ftf1) a0=aa;f0=*ft; else if(*ftf1) *ft=f1;aa=a1;return aa;double *gradient(double *xk)double *g,f1,f2,q;int i;g=(double*)malloc(n*sizeof(double); f1=fny(xk); for(i=0;in;i+)q=ff; xki=xki+q; f2=fny(xk); gi=(f2-f1)/q; xki=xki-q; return g;double *

10、bfgs(double *xk)double un,vn,hnn,dxn,dgn,sn;double aa,ib;double *ft,*xk1,*g1,*g2,*xx,*x0=xk;double fi;int i,j,k;ft=(double *)malloc(sizeof(double);xk1=(double *)malloc(n*sizeof(double);for(i=0;in;i+) si=0; for(j=0;jn;j+) hij=0; if(j=i) hij=1; g1=gradient(xk); fi=fny(xk); x0=xk; for(k=0;kn;k+) ib=0;

11、if(ia=1) xx=xk; break; ib=0; for(i=0;in;i+) si=0; for(i=0;in;i+) for(j=0;jn;j+) si+= -hij*g1j; aa=lagrange(xk,ft,s); xk1=iterate(xk,aa,s); g2=gradient(xk1); for(i=0;i=ac)&(fabs(g2i-g1i)=ac) ib=ib+1; if(ib=0) xx=xk1; break; fi=*ft; if(k=n-1) int j; xk=xk1; for(i=0;in;i+) for(j=0;jn;j+) hij=0; if(j=i)

12、 hij=1; g1=g2; k=-1; else int j; double a1=0,a2=0; for(i=0;in;i+) dgi=g2i-g1i; dxi=xk1i-xki; for(i=0;in;i+) int j; ui=0;vi=0; for(j=0;jn;j+) ui=ui+dgj*hji; vi=vi+dgj*hij; for(j=0;jn;j+) a1+=dxj*dgj; a2+=vj*dgj; if(fabs(a1)!=0) a2=1+a2/a1; for(i=0;in;i+) for(j=0;jfi) *ft=fi; xx=xk; xk=x0; return xx;v

13、oid main () int k; double *xx,f; double xkn=1,1; xx=bfgs(xk); f=fny(xx); printf(nnThe Optimal Design Result Is:n); for(k=0;k=0; x1=0; 25-x1的平方-x2的平方=0;*/#include #include 01#define fori for(i=0;i=1;i+)int i;float f(float *p)float y;y=8*p0-pow(p1,2)-16;return(y);int cons(float *q)int n;if(pow(q0,2)+p

14、ow(q1,2)-25=0)&(q1=0) n=1;else n=0;return(n);void paixu(float *p1,float *p2,float *p3)float f1,f2,f3;float L2,M2,H2;f1=f(p1);f2=f(p2);f3=f(p3);fori Hi=p1i;Mi=p2i;Li=p3i;if(f1f2) if(f2f3)fori Mi=p3i;Li=p2i; elsefori Hi=p3i;Mi=p1i;Li=p2i; else if(f2f3) fori Hi=p2i;Mi=p1i;Li=p3i; else fori Hi=p2i;Mi=p3

15、i;Li=p1i;fori p1i=Hi;p2i=Mi;p3i=Li;float r()float rr;do rr=rand();while(rr=0);rr=rr/32767;return(rr);main()float x12=2,1,x22=4,1,x32=3,3;float XC2,XR2,A2,B2;float H=1.3,FH,FR,FC,FL,cha,min,S;int tf,tf1,tf2,j=1;do do paixu(x1,x2,x3); /* fori printf(n X1%d is %f,X2%d is %f,X3%d is %f.,i,x1i,i,x2i,i,x3

16、i); */ fori XCi=(x2i+x3i)/2; /* fori printf(n XC%d is %f.,i,XCi); */ tf1=cons(XC); if(tf1=0) FC=f(XC); FL=f(x3); if(FLFC) fori Ai=x3i;Bi=XCi; else fori Ai=XCi;Bi=x3i; do S=r();x1i=Ai+S*(Bi-Ai);tf2=cons(x1); while(tf2=0); do S=r();x2i=Ai+S*(Bi-Ai);tf2=cons(x2); while(tf2=0); do S=r();x3i=Ai+S*(Bi-Ai);tf2=cons(x3); while(tf2=0); while(tf1=0); fori XRi=XCi+H*(XCi-x1i);

溫馨提示

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

評論

0/150

提交評論