機械優(yōu)化設計黃金分割法-外推法_第1頁
機械優(yōu)化設計黃金分割法-外推法_第2頁
機械優(yōu)化設計黃金分割法-外推法_第3頁
機械優(yōu)化設計黃金分割法-外推法_第4頁
機械優(yōu)化設計黃金分割法-外推法_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、鄭州大學機械優(yōu)化設計部分程序1.外推法2.黃金分割法3.二次插值法4.坐標輪換法5.隨機方向法6.四桿機構優(yōu)化設計1.外推法源程序:#include#include#define R 0.01double fun(double x) double m;m=x*x-10*x+36;return m;void main()double h0=R,y1,y2,y3,x1,x2,x3,h;x1=0;h=h0;x2=h;y1=fun(x1);y2=fun(x2);if(y2y1)h=-h;x3=x1;y3=y1;x1=x2;y1=y2;x2=x3;y2=y3;x3=x2+h;y3=fun(x3);whi

2、le(y3y2)h*=2.0;x1=x2;y1=y2;x2=x3;y2=y3;x3=x2+h;y3=fun(x3);printf(fun(%f)=%f,fun(%f)=%f,fun(%f)=%fn,x1,y1,x2,y2,x3,y3);運行過程及結果:fun(2.560000)=16.953600,fun(5.120000)=11.014400,fun(10.240000)=38.4576002.黃金分割法源程序:#include#include#define f(x) x*x*x*x-5*x*x*x+4*x*x-6*x+60 double hj(double *a,double *b,dou

3、ble e,int *n) double x1,x2,s; if(fabs(*b-*a)/(*b)f(x2) *a=x1; else *b=x2; *n=*n+1; s=hj(a,b,e,n); return s; void main() double s,a,b,e,m; int n=0; printf(輸入a,b值和精度e值n);scanf(%lf %lf %lf,&a,&b,&e); s=hj(&a,&b,e,&n); m=(a+b)/2; printf(a=%lf,b=%lf,s=%lf,m=%lf,n=%dn,a,b,s,m,n); 運行過程及結果:輸入a,b值和精度e值-350.0

4、001a=3.279466,b=3.279793,s=22.659008,m=3.279629,n=213.二次插值法源程序:#include#includeint main(void) double a1,a2,a3,ap,y1,y2,y3,yp,c1,c2,m; double j3; int i,h=1; void finding(double a3); finding(j); a1=j0; a2=j1; a3=j2; m=0.001; double f(double x); y1=f(a1); y2=f(a2); y3=f(a3); for(i=1;1=1;i+) c1=(y3-y1)/

5、(a3-a1); c2=(y2-y1)/(a2-a1)-c1)/(a2-a3); ap=0.5*(a1+a3-c1/c2); yp=f(ap); if(fabs(y2-yp)/y2)0) if(y2=yp) a1=a2;y1=y2; a2=ap;y2=yp; else a3=ap;y3=yp; else if(y2=yp) a3=a2;y3=y2; a2=ap;y2=yp; elsea1=ap;y1=yp; double x,y; if(y2y0) h=-h; a2=a0;y2=y0; do a0=a1;a1=a2; y0=y1;y1=y2; a2=a1+h;y2=f(a2); h=2*h;

6、while(y2=1;i+) a2=a1+h;y2=f(a2); if(y2=y1) break; h=2*h; a0=a1;y0=y1; a1=a2;y1=y2; return;運行過程及結果:a*=5.000000y*=11.0000004.坐標輪換法源程序:#include #include #include float fun1(float x,float a,float b) float y; y=x+a*b; return y; float fun2(float x,float y) float z; z=4*(x-5)*(x-5)+(y-6)*(y-6); return z; m

7、ain() float d1003,x1003,xx3,ax1003; float a1,a2,a3,h,t,y1,y2,y3,e,a,b,l,fi; int i,k; printf(輸入初始點坐標n); scanf(%f%f,&x01,&x02); e=0.000001; l=0.618; x21=x01; x22=x02; k=0; k-; do x01=x21; x02=x22; k+; for(i=1;iy1) h=-h; a3=a1; y3=y1; a1=a2; a2=a3; y1=y2; y2=y3; a3=a2+h; xi1=fun1(xi-11,di1,a3); xi2=fun

8、1(xi-12,di2,a3); y3=fun2(xi1,xi2); doa1=a2; y1=y2; a2=a3; y2=y3; a3=a2+h; xi1=fun1(xi-11,di1,a3); xi2=fun1(xi-12,di2,a3); y3=fun2(xi1,xi2); while(y3a3;) t=a3; a3=a1; a1=t; t=y1; y3=y1; y1=t; a=a1; b=a3; a1=b-l*(b-a); a2=a+l*(b-a); xi1=fun1(xi-11,di1,a1); xi2=fun1(xi-12,di2,a1); y1=fun2(xi1,xi2); xi1

9、=fun1(xi-11,di1,a2); xi2=fun1(xi-12,di2,a2); y2=fun2(xi1,xi2); if(be;) if(y1=y2) a=a1; a1=a2; y1=y2; a2=a+l*(b-a); xi1=fun1(xi-11,di1,a2); xi2=fun1(xi-12,di2,a2); y2=fun2(xi1,xi2); elseb=a2; a2=a1; y2=y1; a1=b-l*(b-a); xi1=fun1(xi-11,di1,a1); xi2=fun1(xi-12,di2,a1); y1=fun2(xi1,xi2); elsefor(;fabs(b

10、-a)/b)=e|fabs(y2-y1)/y2)=e;)if(y1=y2)a=a1; a1=a2; y1=y2; a2=a+l*(b-a); xi1=fun1(xi-11,di1,a2); xi2=fun1(xi-12,di2,a2); y2=fun2(xi1,xi2); elseb=a2; a2=a1; y2=y1; a1=b-l*(b-a); xi1=fun1(xi-11,di1,a1); xi2=fun1(xi-12,di2,a1); y1=fun2(xi1,xi2); axki=0.5*(a+b); xi1=fun1(xi-11,di1,axki); xi2=fun1(xi-12,di

11、2,axki); while(sqrt(pow(x21-x01),2)+pow(x22-x02),2)=1e-6); xx1=x21; xx2=x22; fi=fun2(xx1,xx2);printf(最優(yōu)解為nx1*=%fnx2*=%fnf*=%fnk=%dn,xx1,xx2,fi,k); 運行過程及結果:輸入初始點坐標89最優(yōu)解為x1*=5.000000x2*=6.000000f*=0.000000k=25.隨機方向法源程序:#include#include#includefloat f(float x,float y) float z; z=(x-2)*(x-2)+(y-1)*(y-1)

12、; return z;float g1(float x,float y) float z; z=x*x-y; return z;float g2(float x,float y) float z; z=x+y-2; return z; void main() int i,j;float k=8,c=0.000001,a0=-3,b0=3,a1=-3,b1=3; float x10,x010,xl10,e10,r10,d10,h,fl,f0,fx; while(g1(x00,x01)0|g2(x00,x01)0) x00=a0+(rand()/32767.00)*(b0-a0); x01=a1+

13、(rand()/32767.00)*(b1-a1); fl=f(x00,x01);f0=f(x00,x01); while(1) h=0.01; j=1; r0=-1+(rand()/32767.00)*(1-(-1); r1=-1+(rand()/32767.00)*(1-(-1); e0=r0/sqrt(r0*r0+r1*r1); e1=r1/sqrt(r0*r0+r1*r1); x0=x00+h*e0; x1=x01+h*e1; if(g1(x0,x1)=0&g2(x0,x1)=0) fx=f(x0,x1); if(fxfl) fl=fx; for(i=0;i2;i+)di=ei;xli

14、=xi; while(j=k) j+; r0=-1+(rand()/32767.00)*(1-(-1); r1=-1+(rand()/32767.00)*(1-(-1); e0=r0/sqrt(r0*r0+r1*r1); e1=r1/sqrt(r0*r0+r1*r1); x0=x00+h*e0; x1=x01+h*e1; if(g1(x0,x1)=0&g2(x0,x1)=0) fx=f(x0,x1); if(fxfl) fl=fx; for(i=0;i0|g2(x0,x1)0) break; fx=f(x0,x1); if(fxfl) fl=fx; else break; do x0=x0-h

15、*d0; x1=x1-h*d1; h=0.7*h; if(h0|g2(x0,x1)0) continue; fx=f(x0,x1); while(fx=fl); if(fabs(f0-fx)/f0)=c) x00=x0; x01=x1; fl=fx; f0=fx; else break;printf(輸出最優(yōu)解為nx1*=%f,x2*=%f,y*=%fn,x0,x1,fx);運行過程及結果:輸出最優(yōu)解為x1*=0.995421,x2*=1.004521,y*=1.0092006.四桿機構優(yōu)化設計源程序:#include#include#include#define Pai 3.1415926int g(float l1,float l2) if(-l1=0)&(-l2=0)&(6-l1-l2=0)&(1-l2-4=0)&(l2-l1-4=0)&(l1*l1+l2*l2-1.414*l1*l2-

溫馨提示

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

評論

0/150

提交評論