机械优化设计实验(共15页).doc

上传人:飞****2 文档编号:17106012 上传时间:2022-05-21 格式:DOC 页数:15 大小:38KB
返回 下载 相关 举报
机械优化设计实验(共15页).doc_第1页
第1页 / 共15页
机械优化设计实验(共15页).doc_第2页
第2页 / 共15页
点击查看更多>>
资源描述

《机械优化设计实验(共15页).doc》由会员分享,可在线阅读,更多相关《机械优化设计实验(共15页).doc(15页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、精选优质文档-倾情为你奉上机械优化设计外点惩罚函数法程序#include stdio.h#include stdlib.h#include math.hconst int kkg=2;const int qkg=1;double r0;double f(double x)double ff;ff=pow(x0-4),2)+pow(x1-5),2);return(ff);void strain(double x,double g)double dlt=0.001;g0=x0-1-dlt;g0=x1-4-dlt;g2=7-x0-x1;double objf(double p)int i;doubl

2、e ff,sg,*g;g=(double *)malloc(kkg+qkg)*sizeof(double);sg=0;strain(p,g);for(i=0;ikkg;i+)if(*(g+i)0) sg=sg+pow(*(g+i),2);if(qkg!=0) for(i=kkg;ikkg+qkg;i+) sg=sg+pow(*(g+i),2);free(g);ff=f(p)+r0*sg;return(ff);double gold(double a,double b,double eps,int n,double xx)int i;double f1,f2,*x2,ff,q,w;for(i=0

3、;i2;i+)xi=(double *)malloc(n*sizeof(double);for(i=0;if2) for(i=0;in;i+) bi=*(x0+i); *(x0+i)=*(x1+i); f1=f2; for(i=0;in;i+) *(x1+i)=ai+0.382*(bi-ai); f2=objf(x1); else for(i=0;in;i+) ai=*(x1+i); *(x1+i)=*(x0+i); f2=f1; for(i=0;in;i+) *(x0+i)=ai+0.618*(bi-ai); f1=objf(x0); q=0;for(i=0;ieps);for(i=0;in

4、;i+) xxi=0.5*(ai+bi);ff=objf(xx);for(i=0;i2;i+)free(xi);return(ff);void jtf(double x0,double h0,double s,int n,double a,double b)int i;double *x3,h,f1,f2,f3;for(i=0;i3;i+)xi=(double *)malloc(n*sizeof(double);h=h0;for(i=0;in;i+)*(x0+i)=x0i;f1=objf(x0);for(i=0;i=f1)h=-h0; for(i=0;in;i+) *(x2+i)=*(x0+i

5、); f3=f1; for(i=0;in;i+) *(x0+i)=*(x1+i); *(x1+i)=*(x2+i); f1=f2; f2=f3; for(;) h=2*h; for(i=0;in;i+) *(x2+i)=*(x1+i)+h*si; f3=objf(x2); if(f2f3) break; else for(i=0;in;i+) *(x0+i)=*(x1+i); *(x1+i)=*(x2+i); f1=f2; f2=f3; if(h0) for(i=0;in;i+) ai=*(x2+i); bi=*(x0+i); else for(i=0;in;i+) ai=*(x0+i); b

6、i=*(x2+i); for(i=0;i3;i+) free(xi);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,dou

7、ble eps,double 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;in;i+)for(j=0;j=n;j+) *(ss+i*(n+1)+j)=0; *(ss+i*(n+1)+i)=1;for(i=0;i4;i+)xxi=(double *)malloc(n*sizeof(double)

8、;for(i=0;in;i+)*(xx0+i)=pi;for(;)for(i=0;in;i+) *(xx1+i)=*(xx0+i); xi=*(xx1+i); f0=f1=objf(x); dlt=-1; for(j=0;jn;j+) for(i=0;idlt) dlt=df; m=j; sdx=0; for(i=0;in;i+) sdx=sdx+fabs(xi-(*(xx1+i); if(sdxeps) free(ss); free(s); for(i=0;i4;i+) free(xxi); return(f); for(i=0;in;i+) *(xx2+i)=xi; f2=f; for(i

9、=0;in;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(f3f1)|(qd) if(f2=f3) for(i=0;in;i+) *(xx0+i)=*(xx2+i); else for(i=0;in;i+) *(xx0+i)=*(xx3+i); else for(i=0;in;i+) *(ss+(i+1)*(n+1)=xi-(*(xx1+i); *(s+i)=*(ss

10、+(i+1)*(n+1); f=oneoptim(xx0,s,h0,epsg,n,x); for(i=0;in;i+) *(xx0+i)=xi; for(j=m+1;j=n;j+) for(i=0;i0.001) fom=fxo; r0=c*r0; for(i=0;i2;i+) *(p+i)=xi; else printf(输出最优点及其目标函数值:n); printf(x0=%f,x1=%f,ff=%f,x0,x1,fxo); return; while(1);机械优化设计鲍威尔法程序#include stdio.h#include stdlib.h#include math.hdouble

11、 objf(double x)double ff;ff=x0*x0+x1*x1-x0*x1-10*x0-4*x1+60;return(ff);double gold(double a,double b,double eps,int n,double xx)int i;double f1,f2,*x2,ff,q,w;for(i=0;i2;i+)xi=(double *)malloc(n*sizeof(double);for(i=0;if2) for(i=0;in;i+) bi=*(x0+i); *(x0+i)=*(x1+i); f1=f2; for(i=0;in;i+) *(x1+i)=ai+0

12、.382*(bi-ai); f2=objf(x1); else for(i=0;in;i+) ai=*(x1+i); *(x1+i)=*(x0+i); f2=f1; for(i=0;in;i+) *(x0+i)=ai+0.618*(bi-ai); f1=objf(x0); q=0;for(i=0;ieps);for(i=0;in;i+) xxi=0.5*(ai+bi);ff=objf(xx);for(i=0;i2;i+)free(xi);return(ff);void jtf(double x0,double h0,double s,int n,double a,double b)int i;

13、double *x3,h,f1,f2,f3;for(i=0;i3;i+)xi=(double *)malloc(n*sizeof(double);h=h0;for(i=0;in;i+)*(x0+i)=x0i;f1=objf(x0);for(i=0;i=f1)h=-h0; for(i=0;in;i+) *(x2+i)=*(x0+i); f3=f1; for(i=0;in;i+) *(x0+i)=*(x1+i); *(x1+i)=*(x2+i); f1=f2; f2=f3; for(;) h=2*h; for(i=0;in;i+) *(x2+i)=*(x1+i)+h*si; f3=objf(x2)

14、; if(f2f3) break; else for(i=0;in;i+) *(x0+i)=*(x1+i); *(x1+i)=*(x2+i); f1=f2; f2=f3; if(h0) for(i=0;in;i+) ai=*(x2+i); bi=*(x0+i); else for(i=0;in;i+) ai=*(x0+i); bi=*(x2+i); for(i=0;i3;i+) free(xi);double oneoptim(double x0,double s,double h0,double epsg,int n,double x)double *a,*b,ff;a=(double *)

15、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 *xx4,*ss,*s;double f,f0,f1,f2,f3,fx,dlt,df,sdx,q,d;ss=(double *)malloc(n*(n+1)*size

16、of(double);s=(double *)malloc(n*sizeof(double);for(i=0;in;i+)for(j=0;j=n;j+) *(ss+i*(n+1)+j)=0; *(ss+i*(n+1)+i)=1;for(i=0;i4;i+)xxi=(double *)malloc(n*sizeof(double);for(i=0;in;i+)*(xx0+i)=pi;for(;)for(i=0;in;i+) *(xx1+i)=*(xx0+i); xi=*(xx1+i); f0=f1=objf(x); dlt=-1; for(j=0;jn;j+) for(i=0;idlt) dlt

17、=df; m=j; sdx=0; for(i=0;in;i+) sdx=sdx+fabs(xi-(*(xx1+i); if(sdxeps) free(ss); free(s); for(i=0;i4;i+) free(xxi); return(f); for(i=0;in;i+) *(xx2+i)=xi; f2=f; for(i=0;in;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

18、-f3); if(f3f1)|(qd) if(f2=f3) for(i=0;in;i+) *(xx0+i)=*(xx2+i); else for(i=0;in;i+) *(xx0+i)=*(xx3+i); else for(i=0;in;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;in;i+) *(xx0+i)=xi; for(j=m+1;j=n;j+) for(i=0;in;i+) *(ss+i*(n+1)+j-1)=*(ss+i*(n+1

19、)+j); main()double p=1,2;double ff,x2;ff=powell(p,0.3,0.001,0.0001,2,x);printf(x0=%f,x1=%f,ff=%fn,x0,x1,ff);getch();机械优化设计复合形法法程序#includedouble objfx(double x) double ff; ff=x0*x0+x1*x1-x0*x1-10*x0-4*x1+60; return ff;#includevoid main() void comple(int n,int k,int kg,double ep,double x,double bl,dou

20、ble bu, double xcom100,double *f) ; double a=0,0,b=9,9,f,x2,xcom2100;comple(2,4,5,0.00001,x,a,b,xcom,&f);printf( nnn 输出最优解及目标函数值:n);printf(n x1=%f x2=%f f(x1,x2)=%fnn ,x0,x1,f);/*wsd说明 n 优化模型维数 k复合形顶点数 kg 约束函数个数 ep 收敛精度 x bl初始点下限 bu初始点上限 xcom进程中的优化结果 *f */ #include #include #include double objfx(dou

21、ble x);void constraint(double x,double g); void constraint(double x,double g) g0=-x0; g1=-x1; g2=x0-6; g3=x1-8; g4=x0+x1-11; int gau(double x,double g,int kg) int i; constraint(x,g); for(i=0;i0) goto s33; return 1;s33:return 0; void xcent(int n,int k,int ll,int lh,double x0,double xcom100) int i,l;

22、double xs; for(i=0;in;i+) xs=0; for(l=0;l-1) x0i=xs/(ll-1); else x0i=xs/ll; void fxse(int n,int k,double x,double xcom100,double fxk) int l,lp,lp1,i; double temp; for(l=0;lk-1;l+) for(lp=0;lpk-l;lp+) lp1=lp+1; if(fxklp=fxklp1) temp=fxklp; fxklp=fxklp1; fxklp1=temp; for(i=0;in;i+) xi=xcomilp; xcomilp

23、=xcomilp1; xcomilp1=xi; void comple(int n,int k,int kg,double ep,double x,double bl,double bu, double xcom100,double *f) int i,iw,l,ll,lh,it; double fx,fx0,sdx,fxh,fxr,alp; double *x0=(double*)calloc(n,sizeof(double); double *xh=(double*)calloc(n,sizeof(double); double *xr=(double*)calloc(n,sizeof(d

24、ouble); double *fxk=(double*)calloc(k,sizeof(double); double *g=(double*)calloc(kg,sizeof(double);s5: for(i=0;in;i+) xi=bli+rand()/40000.0*(bui-bli); iw=gau(x,g,kg); if(iw=0) goto s5; for(i=0;in;i+) xcomi0=xi; for(l=1;lk;l+) for(i=0;in;i+) xcomil=bli+rand()/50000.0*(bui-bli); lh=-1; for(ll=1;llk;ll+

25、) xcent(n,k,ll,lh,x0,xcom); iw=gau(x0,g,kg); if(iw=0) goto s5; for(i=0;in;i+) xi=xcomill+1;s24: iw=gau(x,g,kg); if(iw=0) for(i=0;in;i+) xi=x0i+0.5*(xi-x0i); goto s24; else for(i=0;in;i+) xcomill+1=xi; for(l=0;lk;l+) for(i=0;in;i+) xi=xcomil; fx=objfx(x); fxkl=fx; it=0;s14: it=it+1; printf(nn ITER= %

26、2dn,it); lh=-1; xcent(n,k,k,lh,x0,xcom); fx0=objfx(x0); iw=gau(x0,g,kg); for(i=0;in;i+) printf( X(%d)mid=%f ,i+1,x0i); printf( Fmid=%fn,fx0); for(i=0;ikg;i+) printf( G(%d)mid=%6f,i,gi); sdx=0; for(l=0;lk;l+) sdx=sdx+(fx0-fxkl)*(fx0-fxkl); sdx=sqrt(sdx/(double)k); if(sdxep) goto s38; fxse(n,k,x,xcom,

27、fxk); lh=0;s22: fxh=fxklh; for(i=0;in;i+) xhi=xcomilh; xcent(n,k,k,lh,x0,xcom); iw=gau(x0,g,kg); if(iw=0)goto s36; alp=1.3;s12: for(i=0;i=fxh) if(alp1.0e-4) alp=alp*0.5; goto s12; lh=lh+1; if(lh3)goto s22; for(i=0;in;i+) xcomilh=xri; fxklh=fxr; goto s14;s36: for(i=0;in;i+) bli=xcomik; bui=x0i; goto s5;s38: for(i=0;in;i+) xi=x0i; *f=objfx(x); free(x0); free(xh); free(xr); free(g); free(fxk);专心-专注-专业

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁