狠狠干影院/欧美午夜电影在线观看/高黄文/国产精品一区二区在线观看完整版

機(jī)械優(yōu)化設(shè)計(jì)實(shí)驗(yàn)報(bào)告

| 瀏覽次數(shù):

 《 機(jī)械優(yōu)化設(shè)計(jì) 》

 實(shí)驗(yàn)報(bào)告

 目錄

  1、進(jìn)退法確定初始區(qū)間 ................................................................................. 錯(cuò)誤! 未定義書簽。

 1、1 進(jìn)退法基本思路 ............................................................................. 錯(cuò)誤! 未定義書簽。

 1、2 進(jìn)退法程序框圖誤錯(cuò)? 錯(cuò)誤! 未定義書簽。

 1、3 題目誤錯(cuò)? 錯(cuò)誤! 未定義書簽。

 1、4 源程序代碼及運(yùn)行結(jié)果誤錯(cuò)? 錯(cuò)誤! 未定義書簽。

 2、黃金分割法 ................................................................................................. 錯(cuò)誤! 未定義書簽。

 2、2 黃金分割法流程圖誤錯(cuò)? 錯(cuò)誤! 未定義書簽。

 2、3 題目誤錯(cuò)? 錯(cuò)誤! 未定義書簽。

 2、4 源程序代碼及結(jié)果 ......................................................................... 錯(cuò)誤! 未定義書簽。

 3、牛頓型法誤錯(cuò)? 錯(cuò)誤! 未定義書簽。

 3、1牛頓型法基本思路 ......................................................................... 錯(cuò)誤! 未定義書簽。

 3、2 阻尼牛頓法得流程圖 ................................................................................................. 4 3、3 題目 ............................................................................................... 錯(cuò)誤! 未定義書簽。

 3、4 源程序代碼及結(jié)果誤錯(cuò)? 錯(cuò)誤! 未定義書簽。

 4、鮑威爾法誤錯(cuò)? 錯(cuò)誤! 未定義書簽。

 4、1 鮑威爾法基本思路誤錯(cuò)? 錯(cuò)誤! 未定義書簽。

 4、2 鮑威爾法流程圖誤錯(cuò)? 錯(cuò)誤! 未定義書簽。

 4.3 題目誤錯(cuò)? 錯(cuò)誤! 未定義書簽。

 4、4 源程序代碼及結(jié)果 ....................................................................... 錯(cuò)誤! 未定義書簽。

 5、 復(fù)合形法誤錯(cuò)? 錯(cuò)誤! 未定義書簽。

 5、1 復(fù)合行法基本思想 ......................................................................... 錯(cuò)誤! 未定義書簽。

 5、3 源程序代碼及結(jié)果 ......................................................................... 錯(cuò)誤! 未定義書簽。

 6、 外點(diǎn)懲罰函數(shù)法誤錯(cuò)? 錯(cuò)誤! 未定義書簽。

 6、1 解題思路:誤錯(cuò)? 錯(cuò)誤! 未定義書簽。

 6、2 流程框圖誤錯(cuò)? 錯(cuò)誤! 未定義書簽。

 6、3 題目 ............................................................................................... 錯(cuò)誤! 未定義書簽。

 6、4 源程序代碼及結(jié)果 ......................................................................... 錯(cuò)誤! 未定義書簽。

 7、機(jī)械設(shè)計(jì)實(shí)際問題分析 ............................................................................. 錯(cuò)誤! 未定義書簽。

 7、2計(jì)算過程如下誤錯(cuò)? 錯(cuò)誤! 未定義書簽。

 7、3 源程序編寫誤錯(cuò)? 錯(cuò)誤! 未定義書簽。

 8、報(bào)告總結(jié)誤錯(cuò)? 錯(cuò)誤! 未定義書簽。

 1 、進(jìn)退法確定初始區(qū)間 1 、1

 進(jìn)退法基本思路 :

 按照一定得規(guī)則試算若干個(gè)點(diǎn),比較其函數(shù)值得大小,直至找到函數(shù)值按“高—低-高”變化得單峰區(qū)間。

 1 、2 進(jìn)退法程序框圖

  1、3 題目: :用進(jìn)退法求解函數(shù) 得搜索區(qū)間

 1 、4 源程序代碼及運(yùn)行結(jié)果 #include <stdio、h〉 #include <math、h〉 main() {

 ;3af,2af,3a,2a,0=1a,3y,2y,1y,0h,h taolf? scanf("h0=%f,y1=%f”,&h0,&y1);

 h=h0;a2=h;y2=a2*a2-7*a2+10;

 )1y>2y( fi? {?

 h=-h;a3=a1;y3=y1; loop:a1=a2;y1=y2;a2=a3;y2=y3;

 }? a3=a2+2*h;y3=a3*a3-7*a3+10;

 )2y〈3y( fi? {

  ;pool otog? }

 esle?,2a,1a,"n\f%=3y,f%=2y,f%=1y,f%=3a,f%=2a,f%=1a”(ftnirp??a3,y1,y2,y3); } 搜索區(qū)間為0

 6 2 、黃金分割法 2、1 黃金分割法基本思路 :

 通過不斷得縮短單峰區(qū)間得長(zhǎng)度來搜

 索極小點(diǎn)得一種有效方法。按() 縮小

  比較大小

 確定取舍區(qū)間。

  2 、2 黃金分割法流程圖

  2 、3

 題目 :

 對(duì)函數(shù),給定搜索區(qū)間時(shí),試用黃金分割法求極小點(diǎn)

  2 、4 源程序代碼及結(jié)果: :

 f=inline(’x^2—7*x+9")

 a=0;b=8;eps=0、001;

 a1=b-0、618*(b—a);y1=f(a1);

 a2=a+0、618*(b—a);y2=f(a2);

 while(abs(b-a)>eps)

  if(y1〉=y(tǒng)2)

  a=a1;

  a1=a2;

  y1=y(tǒng)2;

  a2=a+0、618*(b-a);

  y2=f(a2);

  else

  b=a2;a2=a1;y2=y1;

  a1=b-0、618*(b-a);

  y1=f(a1);

  end

 end

 xxx=0、5*(a+b)

 f =

 Inline function:

 f(x)

 = x^2—7*x+9 xxx =

  3、4997 3 3 、牛頓型法

  3 、1 牛頓型法基本思路 : : 在鄰域內(nèi)用一個(gè)二次函數(shù)

 來近似代替原目標(biāo)函數(shù),并將 得極小點(diǎn)作為對(duì)目標(biāo)函數(shù)求優(yōu)得下一個(gè)迭代點(diǎn).經(jīng)多次迭代,使之逼近目標(biāo)函數(shù)得極小點(diǎn)。

 3 、2 阻尼牛頓法得流程圖 :

 3 、3 題目 :

 用牛頓阻尼法求函數(shù)得極小點(diǎn) 3 、4 源程序代碼及結(jié)果: :

 k=0;

 ptol=1、0e-5;

 xk=input(’input x0:’)

 itcl=[1;1];

 while norm(itcl)>=ptol

 f1=[4*xk(1,1)^3—24*xk(1,1)^2+50*xk(1,1)—4*xk(2,1)-32;—4*xk(1,1)+8*xk(2,1)];

 G=[12*xk(1,1)^2—48*xk(1,1)+50,-4;-4,8];

 dk=-inv(G)*f1; a=-(dk"*f1)/(dk’*G*dk);

 xk=xk+a*dk;

 開始給定結(jié)束0, ? x2 1[ ( )] ( )k k kf f??? ? ? d x x1:min ( )k k kkk kkf??? ??? ??x x dx d1 k k??? ? x x* 1 k?? x x否是1 k k ? ?0 k ?

 itcl=a*dk;

 k=k+1;

 end

 f=(xk(1,1)—2)^4+(xk(1,1)-2*xk(2,1))^2;

 fprintf('\n ÓÃ×èÄáÅ£¶Ù·¨µü´ú %d ´ÎºóµÃµ½ ¼«Ð¡µã x*¼°¼«Ð¡Öµ f Ϊ:\n’,k);

 disp(xk);

 disp(f);

 結(jié)果顯示:input x0:[1;1]

  用阻尼牛頓法迭代 27 次后得到 極小點(diǎn) x*及極小值 f 為:

 2、0000

 1、0000 1、3270e—019 4 、鮑威爾法

  4 、1 鮑威爾法基本思路 : : 在不用導(dǎo)數(shù)得前提下,在迭代中逐次構(gòu)造 G得共軛方向。

 4 、2 鮑威爾法流程圖: :

 4。3 題目 : 求函數(shù)f(x)= x[0]*x[0]+x[1]*x[1]-x[0]*x[1]—10*x[0]—4*x[1]+60得最優(yōu)點(diǎn),收斂精度ε=0、001 4 、4 源程序代碼及結(jié)果 :

 #include ”stdio、h" #include "stdlib、h" #include "math、h" double objf(double x[])

 {double ff; ff=x[0]*x[0]+x[1]*x[1]—x[0]*x[1]—10*x[0]-4*x[1]+60; return(ff);

 } void jtf(double x0[],double h0,double s[],int n,double a[],double b[])

 {int i; double *x[3],h,f1,f2,f3; for(i=0;i<3;i++)

 x[i]=(double *)malloc(n*sizeof(double)); h=h0; for(i=0;i〈n;i++)

 *(x[0]+i)=x0[i]; f1=objf(x[0]); for(i=0;i<n;i++) *(x[1]+i)=*(x[0]+i)+h*s[i]; f2=objf(x[1]); if(f2>=f1) {h=-h0; for(i=0;i〈n;i++) *(x[2]+i)=*(x[0]+i); f3=f1; for(i=0;i〈n;i++)

 {*(x[0]+i)=*(x[1]+i); *(x[1]+i)=*(x[2]+i); } f1=f2; f2=f3; } for(;;)

 {h=2*h; for(i=0;i<n;i++) *(x[2]+i)=*(x[1]+i)+h*s[i]; f3=objf(x[2]);

 if(f2〈f3) break; else { for(i=0;i〈n;i++) {*(x[0]+i)=*(x[1]+i); *(x[1]+i)=*(x[2]+i); } f1=f2; f2=f3; } } if(h<0) for(i=0;i<n;i++)

 {a[i]=*(x[2]+i); b[i]=*(x[0]+i); } else for(i=0;i〈n;i++) {a[i]=*(x[0]+i); b[i]=*(x[2]+i); } for(i=0;i<3;i++) free(x[i]); } double gold(double a[],double b[],double eps,int n,double xx[]) {int i; double f1,f2,*x[2],ff,q,w; for(i=0;i〈2;i++) x[i]=(double *)malloc(n*sizeof(double)); for(i=0;i<n;i++)

 {*(x[0]+i)=a[i]+0、618*(b[i]—a[i]);

 *(x[1]+i)=a[i]+0、382*(b[i]-a[i]); } f1=objf(x[0]); f2=objf(x[1]); do {if(f1>f2)

 {for(i=0;i<n;i++)

 {b[i]=*(x[0]+i); *(x[0]+i)=*(x[1]+i); } f1=f2; for(i=0;i<n;i++)

 *(x[1]+i)=a[i]+0、382*(b[i]—a[i]); f2=objf(x[1]); } else { for(i=0;i<n;i++) {a[i]=*(x[1]+i); *(x[1]+i)=*(x[0]+i);} f2=f1; for(i=0;i<n;i++)

 *(x[0]+i)=a[i]+0、618*(b[i]-a[i]); f1=objf(x[0]); } q=0; for(i=0;i〈n;i++)

 q=q+(b[i]—a[i])*(b[i]-a[i]); w=sqrt(q); }while(w〉eps); for(i=0;i<n;i++)

 xx[i]=0、5*(a[i]+b[i]);

 ff=objf(xx); for(i=0;i〈2;i++) free(x[i]); 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,double epsg,int n,double x[]) {int i,j,m; double *xx[4],*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++)

 xx[i]=(double *)malloc(n*sizeof(double)); for(i=0;i<n;i++)

 *(xx[0]+i)=p[i]; for(;;)

 {for(i=0;i<n;i++)

 {*(xx[1]+i)=*(xx[0]+i); x[i]=*(xx[1]+i); } f0=f1=objf(x); dlt=-1; for(j=0;j<n;j++)

 {for(i=0;i<n;i++)

 {*(xx[0]+i)=x[i]; *(s+i)=*(ss+i*(n+1)+j); } f=oneoptim(xx[0],s,h0,epsg,n,x); df=f0—f; if(df>dlt) {dlt=df; m=j; } } sdx=0; for(i=0;i<n;i++)

 sdx=sdx+fabs(x[i]—(*(xx[1]+i))); if(sdx<eps) {free(cuò)(ss); free(s); for(i=0;i〈4;i++)

 free(cuò)(xx[i]); return(f); } for(i=0;i〈n;i++)

 *(xx[2]+i)=x[i]; f2=f; for(i=0;i<n;i++)

 {*(xx[3]+i)=2*(*(xx[2]+i)—(*(xx[1]+i))); x[i]=*(xx[3]+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((f3<f1)||(q〈d))

 {if(f2〈=f3) for(i=0;i<n;i++)

 *(xx[0]+i)=*(xx[2]+i); else for(i=0;i<n;i++) *(xx[0]+i)=*(xx[3]+i); } else {for(i=0;i<n;i++) {*(ss+(i+1)*(n+1))=x[i]-(*(xx[1]+i)); *(s+i)=*(ss+(i+1)*(n+1)); } f=oneoptim(xx[0],s,h0,epsg,n,x); for(i=0;i<n;i++) *(xx[0]+i)=x[i]; for(j=m+1;j〈=n;j++)

 for(i=0;i〈n;i++) *(ss+i*(n+1)+j-1)=*(ss+i*(n+1)+j); } }

 } void main()

 {double p[]={1,2}; double ff,x[2]; ff=powell(p,0、3,0、001,0、0001,2,x); printf("x[0]=%f,x[1]=%f,ff=%f\n",x[0],x[1],ff); getchar(); }

  5 、 復(fù)合形法

  5 、1 復(fù)合行法基本思想 :

 在可行域中選取 K 個(gè)設(shè)計(jì)點(diǎn) (n+1≤K≤2n)作為初始復(fù)合形得頂點(diǎn)。比較各頂點(diǎn)目標(biāo)函數(shù)值得大小,去掉目標(biāo)函數(shù)值最大得頂點(diǎn)(稱最壞點(diǎn)),以壞點(diǎn)以外其余各點(diǎn)得中心為映射中心,用壞點(diǎn)得映射點(diǎn)替換該點(diǎn),構(gòu)成新得復(fù)合形頂點(diǎn)。

 反復(fù)迭代計(jì)算,使復(fù)合形不斷向最優(yōu)點(diǎn)移動(dòng)與收縮,直至收縮到復(fù)合形得頂點(diǎn)與形心非常接近,且滿足迭代精度要求為止.

 5 、2 題目: 求函數(shù)f(x)=(x1-5)*(x1—5)+4*(x2—6)*(x2-6)得最優(yōu)點(diǎn),約束條件為g1(x)=64-x1*x1—x2*x2≤0;g2(x)=x2-x1-10≤0;g3(x)=x1-10≤0;收斂精度ε自定義; 5 、3 源程序代碼及結(jié)果:

 #include 〈stdio、h>

 #include 〈stdlib、h>

 #include 〈time、h>

 #include <math、h>

 #define E0 1e—5 /*復(fù)合形法收斂控制精度*/

 double **apply(int,int); /*申請(qǐng)矩陣空間*/

 double f(double *); /*目標(biāo)函數(shù)*/

 double *g(double *); /*約束函數(shù)*/

  bool judge(double *); /*可行點(diǎn)得判斷*/

  int main()

  { int n,k;

 int i,j,k1;

 int l;

  double temporary;

  double restrain; /*收斂條件*/

 double reflect; /*反射系數(shù)*/

 srand((unsigned)time(NULL));

  printf(”請(qǐng)輸入目標(biāo)函數(shù)得維數(shù) n:”); /*輸入已知數(shù)據(jù)*/

  scanf("%d”,&n);

  printf("請(qǐng)輸入復(fù)合形得頂點(diǎn)數(shù) k:");

 scanf("%d",&k);

  double **x=apply(k,n); /*存放復(fù)合形頂點(diǎn)*/

  double *y=(double *)calloc(k,sizeof(double)); /*存放目標(biāo)函數(shù)值*/

  double *p=(double *)calloc(3,sizeof(double)); /*存放約束函數(shù)值*/

  double *a=(double *)calloc(n,sizeof(double)); /*存放設(shè)計(jì)變量得下限*/

  double *b=(double *)calloc(n,sizeof(double)); /*存放設(shè)計(jì)變量得上限*/

  double *x_c=(double *)calloc(n,sizeof(double)); /*存放可行點(diǎn)中心*/

  double *x_r=(double *)calloc(n,sizeof(double)); /*存放最壞點(diǎn)得反射點(diǎn)*/

 printf(”請(qǐng)輸入選定得第一個(gè)可行點(diǎn) x1(包含%d 個(gè)數(shù)):”,n);

  for(i=0;i<n;i++)

 scanf("%lf",*x+i);

 printf("請(qǐng)輸入初選變量得下限 a(包含%d 個(gè)數(shù)):",n);

 for(i=0;i<n;i++) scanf("%lf”,a+i);

  printf("請(qǐng)輸入初選變量得上限 b(包含%d 個(gè)數(shù)):",n);

  for(i=0;i<n;i++)

 scanf("%lf”,b+i);

  printf("輸出輸入結(jié)果為:\nn=%d,k=%d,x1=(",n,k); /*輸出已知數(shù)據(jù)*/

  for(i=0;i<n—1;i++)

 printf(”%、5lf ”,*(*x+i));

 printf(”%、5lf)\na=(",*(*x+n-1)); for(i=0;i<n-1;i++)

 printf(”%f ”,*(a+i));

 printf(”%、5lf),b=(",*(a+n-1));

 for(i=0;i<n—1;i++)

 printf("%f ”,*(b+i));

  printf("%、5lf)\n",*(b+n-1));

 L1: for(i=1;i<k;i++) /*隨機(jī)得到其余(k-1)個(gè)可行點(diǎn)*/

 ? for(j=0;j<n;j++)

  ?

 *(*(x+i)+j)=*(a+j)+(double)(rand()%10000)/10000*(*(b+j)-*(a+j));

  ? l=1;

 for(i=1;i〈k;i++) /*找出可行點(diǎn)得個(gè)數(shù) l,并把可行點(diǎn)放在前 l 個(gè)位置上*/

 ? if(judge(*(x+i)))

  {? ?

  for(j=1;j<k;j++)

  ?

  ? if(!judge(*(x+j)))

  ?? {

 for(k1=0;k1<n;k1++)

  {????? ?

  ??? temporary=*(*(x+i)+k1);

 ?? (*(*?;)1k+)j+x(*(*=)1k+)i+x? ?

 ?? (*(*

 ;yraropmet=)1k+)j+x?? ?

 ??

 }

 ?

  ;kaerb??

 } ????

 ??

  ;++l?

  }

  ? 排小到大從值數(shù)函標(biāo)目按點(diǎn)行可個(gè) l 前把*/ )++i;1-l<i;0=i(rof?序*/

 )++j;l<j;1+i=j(rof?? ??

 )))j+x(*(f〈))i+x(*(f(fi??

 ?

  ? for(k1=0;k1<n;k1++)

 {? ??

  ?? temporary=*(*(x+i)+k1);

  (*(*? ?;)1k+)j+x(*(*=)1k+)i+x?(*(*??? ?;yraropmet=)1k+)j+x?

 ???? }

  ?

  /*心中點(diǎn)行可求*/ )++i;n〈i;0=i(rof??

  ??

  *(x_c+i)=0;

 ??

  )++i;l<i;0=i(rof? ?? )++j;n<j;0=j(rof??

  (*?;)j+)i+x(*(*=+)j+c_x?

 ?

  ?

  )++i;n<i;0=i(rof?

  ?

 ??

 *(x_c+i)/=l;

 ? ???

 if(!judge(x_c)) /*判斷可行點(diǎn)中心就是否可行*/

 ?

 ? {

 ?

 ?

  ? for(i=0;i<n;i++)

  ?

  ??

 {?

 ???

  ? (* ;)i+)1-l+x(*(*=)i+a?*(b+i)=*(x_c+i);

  ??

  ?

 }

  ??

  ??? goto L1;

 ???

 }

 ???

 esle? ??

 {?

  ? /*化行可點(diǎn)行可不將*/ )++i;k<i;l=i(rof?

 ??? od??

 ?

 ??

 ?? {

  ?

  for(j=0;j<n;j++)

  ?

  ? (*(* ?)j+)i+x(*(*(*5、0+)j+c_x(*=)j+)i+x?-*(x_c+j));

 } ???? ???

  ?

 elihw? ?

 ?? !(? ?;)))i+x(*(egduj?L2:

 /*序排小到大從值數(shù)函標(biāo)目按點(diǎn)行可將*/ )++i;1-k〈i;0=i(rof? ?

  ?

 ?? for(j=i+1;j<k;j++)

  ?

 )))j+x(*(f<))i+x(*(f(fi??

 ?

  ?

 ??

  )++1k;n〈1k;0=1k(rof? ? ????

 ??

 {?

  ??

  ?? temporary=*(*(x+i)+k1);

  ??

  ?

  ?

 ?? *(*(x+i)+k1)=*(*(x+j)+k1);

  ?

  ?? (*(*?;yraropmet=)1k+)j+x?

  ??

  }??? ???

  ?

  ????

 /*件條斂收求*/ ;0=niartser?

  ?

 ?

 ?

 ? for(i=0;i<k;i++)

 ?

  ??

 ?

  -k+x(*(f-))i+x(*(f(=+niartser?1)))*(f(*(x+i))-f(*(x+k—1)));

  ??

 ?

  ?

  ;)niartser*)1-k(/0、1(trqs=niartser?

 ?

  ?

 ? if(restrain<E0) /*判斷收斂條件*/

  ?

 ??

  ??

 {

  ?

  ??

  ????? printf("\n 求得約束最優(yōu)點(diǎn)為:( ”);

 ? ??????

 )++i;n<i;0=i(rof??

 ?

  ??? printf(”%。5f ”,*(*(x+k—1)+i));

 ?

 ?

  ????

 ?? printf(")\n 目標(biāo)函數(shù)得最優(yōu)解為:%。5f\n",f(*(x+k-1)));

  ?

 ?? ???

 ?

 ;0 nruter??

 ? ??????

  }

  ?

 ?

 ?

  esle? ?

 ?

 ?

  { ???L3:心中得點(diǎn)頂個(gè))1-k(得外 x*點(diǎn)壞最去除算計(jì)*/ )++i;n〈i;0=i(rof?*/

  ?

 ?

 ??

 *(x_c+i)=0;

  ?

 ?

  ?)++i;k<i;1=i(rof?

 ?

 ?

 ??

 ??? for(j=0;j<n;j++)

  ?

 ? (*?? ??? ? ;)j+)i+x(*(*=+)j+c_x?

  ???

 ?? ? )++i;n<i;0=i(rof?

 ??

 ?

  ?

  ?

 ? (* ;1-k=/)i+c_x? ?

 ??????

 ?

 reflect=1、3;

 L4:

 /*點(diǎn)射反求*/ )++i;n<i;0=i(rof? ? ?????? ???? (* ;))i+x*(*—)i+c_x(*(*tcelfer+)i+c_x(*=)i+r_x?

 ?????? ?? ? ))r_x(egduj!(fi?

 ???

 ?

 ?

 {

  ??

  ?? ?;5、0=*tcelfer?

 ?

 ?

 ?;4L otog?

 ?

  }? ????? ??

 ??

 ?

  fi esle? ?

 ?

 ? (? ))x*(f〈)r_x(f?

 ??

 { ?????

  ? ?????

 for(i=0;i<n;i++)

 *(*x+i)=*(x_r+i);

  ??

 ??

 goto L2;

 ?

 ?

 }?

  ?

 ?

 )01-e1=〈tcelfer(fi esle?

 ???

 {

 ??? ? ;)i+)1+x(*(*=)i+x*(* )++i;n<i;0=i(rof??

 ????

  ? ;3L otog?

  ?

 }? ?

  ??

 esle??

  ? ???

  {

  ?

  ;5、0=*tcelfer?

 ?

 ??

  ;4L otog?? ??

 ???

  }? ?

  ????

  }

  ?

 ?? }

 }

 double **apply(int row,int col)

 /*申請(qǐng)矩陣空間*/

  {

 ;i tni?

  ;))elbuod(foezis,loc*wor(collac)*elbuod(=x* elbuod?

 double **y=(double **)calloc(row,sizeof(double *));

 if(!x || !y)

 { printf(”內(nèi)存分配失敗!”);

 exit(1);

  }

  )++i;wor<i;0=i(rof?(*

  ;y nruter ;loc*i+x=)i+y?? }

  double f(double *x)

 /*目標(biāo)函數(shù)*/

  {

 return (*x—5)*(*x-5)+4*(*(x+1)-6)*(*(x+1)—6);

 }

  double *g(double *x) /*約束函數(shù)*/

  {

 double *p=(double *)calloc(3,sizeof(double));

  )p!(fi?

 { ?

  ;)”!敗失配分存內(nèi)”(ftnirp??

  ;)1(tixe?}

 *p=64—(*x)*(*x)—(*(x+1))*(*(x+1));

 *(p+1)=*(x+1)-*x-10;

 (*

  ;01—x*=)2+p?

 return p;

 }

  bool judge(double *x) /*可行點(diǎn)得判斷*/

  {

  int i;

  double *p=(double *)calloc(3,sizeof(double));

 p=g(x);

  for(i=0;i<3;i++)

 fi? ?

 (*(p+i)〉0)

 break;

  if(i==3)

 return true;

  else return false;

  }

 6、 外點(diǎn)懲罰函數(shù)法 6、 、1 解題思路:外點(diǎn)法就是從可行域得外部構(gòu)造一個(gè)點(diǎn)序列去逼近原約束問題得最優(yōu)解。外點(diǎn)法可以用來求解含不等式與等式約束得優(yōu)化問題。外點(diǎn)懲罰函數(shù)得形式為:

 6 、2

 流程框圖: :

 2 21 1( , ) ( ) max[0, ( )] [ ( )]m li ji jr f r g r h ?? ?? ? ?? ?x x x x

 6 、3 題目: 求函數(shù) f(x)=(x1—5)*(x1-5)+4*(x2-6)*(x2-6)得最優(yōu)點(diǎn),約束條件:g1(x)=64-x1*x1-x2*x2≤0;g2(x)=x2-x1—10≤0;g3(x)=x1—10≤0;收斂精度ε=0、00001;

 6 、4 源程序代碼及結(jié)果 :

 #include <stdio、h> #include〈iostream、h〉 #include〈mat(yī)h、h> double lamta[10]={0, 1、0 ,0 ,0 ,0 ,1 ,0 ,0 ,0 ,1};//鮑威爾方法初始化方向,線性無關(guān) double lamta1[3]={0, 0 , 0};//暫存新得搜索方向 double x1[4]={0, 0 ,0, 0 };//x1到 x3 用于存儲(chǔ)各共軛方向得點(diǎn) double x2[4]={0, 0 ,0, 0 }; double x3[4]={0, 0 ,0, 0 }; double x4[4]={0, 0 ,0, 0 };//x4用于中間判斷 double x5[4]={0, 0 ,0, 0 };//x5 用存放于更換方向后產(chǎn)生得新點(diǎn) int m=0;//標(biāo)志 double x_[4]={0, 0, 0, 0};//暫存鮑威爾最優(yōu)解 double x0[4]={0, 2, 2 , 2};//初值

 double c=10;//遞減系數(shù)

 double e=0、00001;//精度控制 double r0=1;//初始懲罰因子 double r=1; //函數(shù)聲明部分 void Powell(double r);

  //鮑威爾方法函數(shù) double fxy(double x1,double x2,double x3,double r);

 //待求函數(shù) double ysearch(double x);

 //一維搜索得目標(biāo)函數(shù) void search(double &a,double &b,double h);

  //區(qū)間搜索 double

 yellowcut(double &a,double &b);

 //黃金分割 void sort(double *p,int size);//選擇法排序 void main()

  //約束優(yōu)化方法主函數(shù)入口 {

 cout〈〈”請(qǐng)輸入精度”〈〈endl;

  cin>〉e; changyan:Powell(r);

 double cmpare[4];

 int flag1=0;

 for (int i=1;i〈=3;i++)

 {

  cmpare[i]=x_[i]—x0[i];

  if (fabs(cmpare[i])<e)

  {flag1++;}

 }

  if (flag1==3)

  {

 printf(”x1=%lf

  x2=%lf\n",x_[1],x_[2]); //

  cout〈〈"最優(yōu)解為:"<〈"x1=”〈〈x_[1]<<”

 "〈<”x2="<〈x_[2]〈<"

 "〈<"x3="<〈x_[3]<〈endl ;

 cout〈<"最小值為"〈〈fxy(x_[1],x_[2],x_[3],r)〈〈endl;

  }

  else

  {

 for (int j=1;j<=3;j++)

 {

  x0[j]=x_[j];

 }

 r=c*r;

 goto changyan;

  } } //子函數(shù)定義部分 double fxy(double x1,double x2,double x3,double r)//待求函數(shù) {

  double m,n,p;

 m=((64—x1*x1-x2*x2)>0)?(64-x1*x1—x2*x2):0;

 n=((x2-x1-10)>0)?(x2-x1-10):0;

 p=((x1-10)>0)?(x1—10):0;

 return

 //懲罰函數(shù) (x1-5)*(x1—5)+4*(x2-6)*(x2-6)+r*(m*m+n*n+p*p)+r*(x3*x3); } void Powell(double r)

  //鮑威爾方法函數(shù)定義 {

  double det=0、0001;

 //迭代精度

 int k; my1:

 for (k=1;k<=3;k++)

  {

 m=3*k-2;

 double a=0,b=0,xo=0;

 search(a,b,1);

 //完成區(qū)間搜索

 double temp;

 temp=y(tǒng)ellowcut(a,b);//黃金分割法

 int n=3*k-2;

 for (int i=1;i<=3;i++)

 {

  switch (k)

  {

  case 1:x1[i]=x0[i]+temp*lamta[n++];break;

  case 2:x2[i]=x1[i]+temp*lamta[n++];break;

  case 3:x3[i]=x2[i]+temp*lamta[n++];break;

  default :break;

  }

 }

  }

  double cmp[4];

  int flag=0;

  for (int i=1;i〈=3;i++)

  {

 cmp[i]=x3[i]-x0[i];

 if (fabs(cmp[i])<det)

 {flag++;}}

  if (flag==3)

  //找到最優(yōu)解

  {

 x_[1]=x3[1];

 x_[2]=x3[2];

 x_[3]=x3[3];

  }

  else

 {

 double fy[4];

 fy[0]=fxy(x0[1],x0[2],x0[3],r);

 fy[1]=fxy(x1[1],x1[2],x1[3],r);

 fy[2]=fxy(x2[1],x2[2],x2[3],r);

 fy[3]=fxy(x3[1],x3[2],x3[3],r); double fyy[3];

 for (int ii=0;ii<3;ii++)

 {fyy[ii]=fy[ii]—fy[ii+1];}

 sort(fyy,3);

 for (ii=1;ii〈=3;ii++)

 {x4[ii]=2*x3[ii]—x0[ii];}

 double f0,f3,f4;

 f0=fy[0];

 f3=fy[3];

 f4=fxy(x4[1],x4[2],x4[3],r);

 if ((f0+f4—2*f3)/2〉=fyy[2])

 {

  if (f3〈f4)

  {

 for (int t=1;t〈=3;t++)

 {x0[t]=x3[t];}

  }

  else

  {

 for (int t=1;t<=3;t++)

 {x0[t]=x4[t];

  }}

  goto my1;

 }

 else{

  for (int t=0;t〈3;t++)

  {lamta1[t]=x3[t+1]-x0[t+1];}

  m=0;

  //switch 標(biāo)志!

  double aa=0,bb=0;

  search(aa,bb,1);

  double temp1;

  temp1=yellowcut(aa,bb);

  for (int i=1;i〈=3;i++)

  {x5[i]=x3[i]+temp1*lamta1[i-1];}

  for (i=1;i〈=3;i++)

  {x0[i]=x5[i];}

  for (i=1;i〈=6;i++)

  {lamta[i]=lamta[i+3];}

  for (i=1;i<=3;i++)

 {

 lamta[6+i]=lamta1[i—1];}

  goto my1; }}} double ysearch(double x)

 //一維搜索得目標(biāo)函數(shù) { switch (m)

 { case 1:

 return fxy(x0[1]+x*lamta[m],x0[2]+x*lamta[m+1],x0[3]+x*lamta[m+2],r);break; case 4:

 return fxy(x1[1]+x*lamta[m],x1[2]+x*lamta[m+1],x1[3]+x*lamta[m+2],r);break; case 7:

 return fxy(x2[1]+x*lamta[m],x2[2]+x*lamta[m+1],x2[3]+x*lamta[m+2],r);break; case 0:

 return fxy(x3[1]+x*lamta1[0],x3[2]+x*lamta1[1],x3[3]+x*lamta1[2],r);break;//更改方向后得一維搜索 default:return 0; break; } } void search(double &a,double &b,double h)

  //區(qū)間搜索 {double a1,a2,a3,y1,y2,y3; h=1; a1=a,y1=ysearch(a1); a2=a+h,y2=y(tǒng)search(a2); if(y2〉=y1){

 h=-h,a3=a1,y3=y1;

 a1=a2,y1=y2,a2=a3,y2=y3;} a3=a2+h,y3=ysearch(a3); while(y3<=y2){

 h=2*h;

 a1=a2,y1=y2,a2=a3,y2=y3;

 a3=a2+h,y3=y(tǒng)search(a3); } if(h〈0)a=a3,b=a1; else a=a1,b=a3;} double

 yellowcut(double &a,double &b){

 double e;

 //黃金分割法求解

 e=0、001;

 double c,fc;

 c=a+0、382*(b-a);

 fc=ysearch(c);

 double d,fd;

 double xo;

  d=a+0、618*(b-a);

 fd=ysearch(d); label2: if (fc<=fd)

  {b=d;

  d=c;

  fd=fc;

  c=a+0、382*(b—a);

  fc=ysearch(c);}

  else

  {a=c;

  c=d;

  fc=fd;

  d=a+0、618*(b-a);

  fd=ysearch(d);}

  if ((b—a)〈=e)

  {xo=(a+b)/2;}

  else

 goto label2;

  return xo; } void sort(double *p,int size){//選擇法排序

 int i,j;

 double k;

 for(i=0;i〈size-1;i++)

  for(j=i+1;j〈size;j++)

 if(*(p+i)>*(p+j)){k=*(p+i);*(p+i)=*(p+j);*(p+j)=k;} }

 7 、機(jī)械設(shè)計(jì)實(shí)際問題分析

 7、1 題目 : 圖 示 為 一 對(duì) 稱 得 兩 桿 支 架 , 在 支 架 得 頂 點(diǎn) 承 受 一 個(gè) 載 荷 為2 2F F= =3 3 00 00 0 00 0

 , ,支 支 架 之 間 得 水 平 距離 離

 2 2B B= =1 1 52 20 0 m m, ,若 若 已 選 定 壁厚 厚T T= =2 2. . 5 m m鋼 鋼 管 ,密度 度p p= =8 83 30 00 0k kg g/ / m3 3, ,屈 屈 服點(diǎn) 點(diǎn)

 , , 材 料 得 彈 性 模量 量

 。

 要 求 在 滿 足 強(qiáng) 度 與 穩(wěn) 定 性 條 件 下 設(shè) 計(jì) 最 輕 得 支 架 尺寸 寸. .

  7 、2 計(jì)算過程如下: 解:計(jì)算壓桿得臨界柔度為:

 ,

 由于支架為空心桿,失效形式主要為屈服,故計(jì)算穩(wěn)定性用屈服極限公式。根據(jù)題意可得方程組:

 ,

 代入整理得到內(nèi)點(diǎn)混合懲罰函數(shù)法得標(biāo)準(zhǔn)形式為:

 構(gòu)建懲罰函數(shù): ? ?? ?? ? ? ? ??? ?? ? kk k kr Xrx xx x r x r x r x x22 1 222122212221 ,5 . 246 . 96 86 . 84? ?? ? ? ? ? ? ? ?)

 (?

  , 取,

 ? ?? ?0005 . 0 2 24 73 . 1692 11 11?? ?? ? ???kkrx xx r xx?

 解得:

 令迭代精度為:,由于函數(shù)就是 X 得2次方程,故不必判別函數(shù)值得相對(duì)變化量。

 7 、3 源程序編寫

 #include <stdio、h> #include 〈math、h〉 double GetX3( double r) {

  return (1-42*sqrt(r))*(0、21*sqrt(r)+0、01*r)/(168、172*sqrt(r)—38*r)+0、0025; } double GetX4( double r) { return (0、21*sqrt(r)+0、01*r)/(168、172*sqrt(r)-38*r);

 } double F( double x3,double x4)

 {

 return 42、4315*(x3*x3-x4*x4); } main()

 {

  double x1=0,x2=0,x3,x4,r=1,c=0、01,m=0、0000001;

  int i=1;

  x3=GetX3(r);

  x4=GetX4(r);

  while(1)

  {

  printf(”迭代次數(shù):%d\n”,i);

 printf("r=%。12f\n",r);

  printf("x1=%f\n”,x3);

  printf("x2=%f\n",x4);

  printf("\n");

  r=c*r;

  x1=x3;

  x2=x4;

  x3=GetX3(r);

  x4=GetX4(r);

  if((fabs(x1—x3)<=m)&&(fabs(x4-x2)<=m))

 break;

  i++;

  }

 printf("最優(yōu)解為:\n");

  printf("R=%f(單位:米)\n",x3);

  printf("r=%f(單位:米)\n",x4);

  printf(”最小體積V=%f(單位:立方米)\n",F(x3,x4));

  return(0); }

  用C語言編程計(jì)算,求得結(jié)果為: 最小外徑R=3.749mm, 最小內(nèi)徑 r=1.249mm, 最小體積:v=530000 立方毫米 故滿足強(qiáng)度與穩(wěn)定性條件下最輕得支架尺寸約為外徑 3。75mm,內(nèi)徑1。25mm。

 8 、報(bào)告總結(jié)

  通過這一段時(shí)間得學(xué)習(xí)我了解到機(jī)械優(yōu)化設(shè)計(jì)就是以數(shù)學(xué)規(guī)劃論為基礎(chǔ),以計(jì)算機(jī)為工具,一種自動(dòng)尋優(yōu)得先進(jìn)得、現(xiàn)代得設(shè)計(jì)方法。根據(jù)設(shè)計(jì)所追求得性能目標(biāo),建立目標(biāo)函數(shù),在滿足給定得各種約束條件下,尋求最優(yōu)得設(shè)計(jì)方案.可見它就是非常經(jīng)典得一門學(xué)科。再加上王衛(wèi)榮老師系統(tǒng)全面科學(xué)得教授過程,更就是使這一學(xué)科魅力十足,強(qiáng)烈地吸引著我對(duì)它得深入學(xué)習(xí)與實(shí)踐。

 在課程學(xué)習(xí)過程中我明白了很多工程問題就是可以轉(zhuǎn)化為數(shù)學(xué)模型并可以通過計(jì)算機(jī)求解。

 同時(shí)了解了delphi得基本得使用技巧,并且復(fù)習(xí)了C語言與mat(yī)lab編程相關(guān)知識(shí),并將其應(yīng)用到了約束隨機(jī)法、懲罰函數(shù)法去求解問題,收獲頗多。優(yōu)化設(shè)計(jì)同時(shí)也教會(huì)了我如何追求“優(yōu)”,同時(shí)使自己有能力、有辦法“化"到優(yōu)!

推薦訪問: 優(yōu)化設(shè)計(jì) 實(shí)驗(yàn) 報(bào)告

【機(jī)械優(yōu)化設(shè)計(jì)實(shí)驗(yàn)報(bào)告】相關(guān)推薦

工作總結(jié)最新推薦

NEW
  • 同志們:今天這個(gè)大會(huì),是市委全面落實(shí)黨要管黨、從嚴(yán)治黨要求的一項(xiàng)重大舉措,也是對(duì)縣市區(qū)委書記履行基層黨建工作第一責(zé)任人情況的一次集中檢閱,同時(shí)是對(duì)全市基層黨建工作的一次再部署、再落實(shí)的會(huì)議。前面,**

  • ***年,我認(rèn)真履行領(lǐng)班子、帶隊(duì)伍、抓黨員、保穩(wěn)定的基層黨建工作思路,以學(xué)習(xí)貫徹習(xí)近平新時(shí)代中國(guó)特色社會(huì)主義思想和黨的十九大歷次全會(huì)精神為主線,以市局基層黨建工作考核細(xì)則為落腳點(diǎn),落實(shí)全面從嚴(yán)治黨主體

  • 根據(jù)會(huì)議安排,現(xiàn)將2022年履行抓基層黨建工作職責(zé)情況報(bào)告如下:一、履職工作特色和亮點(diǎn)1 突出政治建設(shè),著力在思想認(rèn)識(shí)上提高。牢固樹立抓黨建就是抓政績(jī)的理念,以“黨建工作抓引領(lǐng)、社區(qū)治理求突破,為民服

  • 2022年以來,在**黨委的正確領(lǐng)導(dǎo)下,堅(jiān)持以習(xí)近平新時(shí)代中國(guó)特色社會(huì)主義思想為指導(dǎo),深入學(xué)習(xí)宣傳貫徹黨的二十大精神,以黨建工作為統(tǒng)領(lǐng),扎實(shí)開展夯實(shí)“三個(gè)基本”活動(dòng),以“四化四力”行動(dòng)為抓手,聚力創(chuàng)建

  • 各位領(lǐng)導(dǎo),同志們:根據(jù)會(huì)議安排,現(xiàn)就2022年度抓基層黨建工作情況匯報(bào)如下:一、主要做法及成效(一)強(qiáng)化政治引領(lǐng)。一是不斷強(qiáng)化理論武裝。堅(jiān)持通過黨組會(huì)、中心組學(xué)習(xí)會(huì)和“三會(huì)一課”,第一時(shí)間、第一議題學(xué)

  • 2022年度抓基層黨建工作述職報(bào)告按照黨委工作部署,現(xiàn)將本人2022年度抓基層黨建工作情況報(bào)告如下:一、2022年度抓基層黨建工作情況(一)旗幟鮮明講政治將旗幟鮮明講政治放在全局發(fā)展首要位置,積極開展

  • 2022年,是我在數(shù)計(jì)系黨總支書記這個(gè)新崗位上度過的第一個(gè)完整的工作年度。回首一年來在校黨委的正確領(lǐng)導(dǎo)下,與數(shù)計(jì)系領(lǐng)導(dǎo)班子和全體師生共同走過的日子,艱辛歷歷在目,收獲溫潤(rùn)心田。作為黨總支書記,我始終牢

  • 按照考核要求,現(xiàn)將本人一年來,作為統(tǒng)戰(zhàn)部長(zhǎng)履行職責(zé)、廉潔自律等方面情況報(bào)告如下:一、著眼增強(qiáng)政治素質(zhì),不斷深化理論學(xué)習(xí)堅(jiān)持把旗幟鮮明講政治作為履職從政的第一位要求,帶領(lǐng)統(tǒng)戰(zhàn)系統(tǒng)干部堅(jiān)決擁護(hù)“兩個(gè)確立”

  • **年,緊緊圍繞黨工委、管委會(huì)的決策部署,全體人員團(tuán)結(jié)協(xié)作、凝心聚力,緊扣黨工委“**”基本工作思路,全力開拓進(jìn)取,認(rèn)真履職盡責(zé),圓滿完成各項(xiàng)工作任務(wù)。一、個(gè)人思想政治狀況檸檬文苑www bgzjy

  • 按照縣委關(guān)于開展抓基層黨建述職評(píng)議會(huì)議的有關(guān)要求,經(jīng)請(qǐng)示縣委組織部同意,今天,我們?cè)诖苏匍_2022年度基層黨組織書記抓基層黨建述職評(píng)議會(huì)議。1 首先,請(qǐng)**黨委書記,**同志述職。**黨委能夠主動(dòng)研究