机械优化设计黄金分割法外推法

上传人:feng****ing 文档编号:63737465 上传时间:2022-03-20 格式:DOC 页数:8 大小:109KB
收藏 版权申诉 举报 下载
机械优化设计黄金分割法外推法_第1页
第1页 / 共8页
机械优化设计黄金分割法外推法_第2页
第2页 / 共8页
机械优化设计黄金分割法外推法_第3页
第3页 / 共8页
资源描述:

《机械优化设计黄金分割法外推法》由会员分享,可在线阅读,更多相关《机械优化设计黄金分割法外推法(8页珍藏版)》请在装配图网上搜索。

1、郑州大学机械优化设计部分程序1. 外推法2. 黄金分割法3. 二次插值法4. 坐标轮换法5. 随机方向法6. 四杆机构优化设计1. 外推法源程序:#include #include #define R 0.01 double 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; x

2、3=x2+h;y3=fun(x3); while(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+6

3、0double hj(double *a,double *b,double 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);运行过程及结

4、果:输入a, b值和精度e值a2=ap;y2=yp;-3elsea1=ap;y1=yp;50.0001double x,y;a=3.279466,b=3.279793,s=22.659008,m=3.279if(y2=yp)629,n=213. 二次插值法源程序:#include #include int 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(doub

5、le x);y1=f(a1);y2=f(a2);y3=f(a3); for(i=1;1=1;i+) c1=(y3-y1)/(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;x=a2;y=y2;elsex=ap;y=yp;printf(a*=%fn,x); printf(y*=%fn,y);return 0;

6、double f(double x)double y; y=x*x-10*x+36; return y;void finding(double a3)int h,i;double y3;a0=0;h=1;a1=h;y0=f(a0);y1=f(a1); if(y1y0)h=-h;a2=a0;y2=y0;do a0=a1;a1=a2; y0=y1;y1=y2; a2=a1+h;y2=f(a2);h=2*h;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*=

7、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;main()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(%

8、f%f,&x01,&x02); e=0.000001;l=0.618;x21=x01;x22=x02;k=0;k-;dox01=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=fun1(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);

9、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=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); y

10、2=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-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=fun

11、1(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,di2,axki);while(sqrt(pow(x21-x01),2)+pow(x2 2-x02),2)=1e-6);xx1=x21;xx2=x22;fi=fun2(xx1,xx2);printf( 最优解为 nx1*=%fnx2*=%fnf*=%fnk=%dn,xx1,xx2,fi,k);运行过程及结果:输入初始点坐标89最优解为x1*=5.000000x2*=6.0

12、00000f*=0.000000k=25. 随机方向法源程序:#include#include#includefloat f(float x,float y)float z;z=(x-2)*(x-2)+(y-1)*(y-1);return z;while(j=k)float g1(float x,float y)j+;float z;z=x*x-y;r0=-1+(rand()/32767.00)*(1-(-1);return z;r1=-1+(rand()/32767.00)*(1-(-1);float g2(float x,float y)e0=r0/sqrt(r0*r0+r1*r1);fl

13、oat z;z=x+y-2;e1=r1/sqrt(r0*r0+r1*r1);return z;x0=x00+h*e0;x1=x01+h*e1;void main()if(g1(x0,x1)=0&g2(x0,x1)=0)int i,j;floatfx=f(x0,x1);k=8,c=0.000001,a0=-3,b0=3,a1=-3,b1=3;if(fxfl)floatx10,x010,xl10,e10,r10,d10,h,fl,f0,fx;fl=fx;for(i=0;i0|g2(x00,x01)0) x00=a0+(rand()/32767.00)*(b0-a0);x01=a1+(rand()/

14、32767.00)*(b1-a1);x0=xl0;x1=xl1;fl=f(x00,x01);while(1)f0=f(x00,x01);while(1)h=1.3*h;x0=x0+h*d0;h=0.01;j=1;x1=x1+h*d1;r0=-1+(rand()/32767.00)*(1-(-1);if(g1(x0,x1)0|g2(x0,x1)0)r1=-1+(rand()/32767.00)*(1-(-1);break;e0=r0/sqrt(r0*r0+r1*r1);fx=f(x0,x1);e1=r1/sqrt(r0*r0+r1*r1);if(fxfl) fl=fx;x0=x00+h*e0;e

15、lse break;x1=x01+h*e1; doif(g1(x0,x1)=0&g2(x0,x1)=0)x0=x0-h*d0;fx=f(x0,x1);x1=x1-h*d1;if(fxfl)h=0.7*h;if(hc)fl=fx;break;for(i=0;i0|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;elsebreak;printf( 输出最优解为 nx1*=%f,x2*=%f,y*=%fn,x0,x1,fx);运行过程及结果:输出最优解为x1*

16、=0.995421,x2*=1.004521,y*=1.0092006. 四杆机构优化设计源程序:#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-16=0) &(36-l1*l1-l2*l2-1.414*l1*l2=0) return (1);elsereturn (0);float fun(float x02)floatf,a31,b31,r31,p

17、31,q31,w31,x12;int i;p0=acos(1+x00)*(1+x00)-x01*x01+25)/(10+10*x00);q0=acos(1+x00)*(1+x00)-x01*x01-25)/(10*x01);f=0;for(i=1;i=30;i+)pi=p0+(Pai/60)*i; ri=sqrt(26-10*cos(pi);ai=acos(ri*ri+x01*x01-x00*x00)/(2*ri*x01); bi=acos(ri*ri+24)/(10*ri); qi=Pai-ai-bi;wi=q0+(2*(pi-p0)*(pi-p0)/(3*P ai);f=f+(Pai/60

18、)*(qi-wi)*(qi-wi)*(pi-pi-1);return f;void main()floata,q,f,fl,f0,l2,z2,d0100,d1100,x2,xi2,f x,m0,m1,e;int i,j,n,k;printf(输入精度);scanf(%f,&e);doz0=0+5*(rand()/32767.00); z1=0+5*(rand()/32767.00);while(g(z0,z1)=0);for(i=0;i=99;i+)d0i=-1+2*(rand()/32767.00);for(j=0;j=99;j+) d1j=-1+2*(rand()/32767.00);f0

19、=fun(z);fl=fun(z);ss:a=0.01;for(i=0,j=0;i=99&j=99;i+,j+)n=1/sqrt(d0i)*(d0i)+d1j*d1j);d0i=n*d0i;d1j=n*d1j;x0=z0+a*d0i;x1=z1+a*d1j; if(g(x0,x1)=1) f=fun(x);if(ffl)fl=f;m0=d0i;m1=d1j;l0=x0;l1=x1;elsef0=f; fl=f; z0=x0; z1=x1; goto ss; 运行过程及结果: 输入精度 0.001 最优解为 x1*=4.161386 x2*=2.311257fx=0.000021x0=l0;x1=l1;doa=1.3*a;x0=x0+a*m0;x1=x1+a*m1;if(g(z0,z1)=0)break;f=fun(x);if(ffl) fl=f; else break; while(g(z0,z1)=1); dox0=x0-a*m0; x1=x1-a*m1; a=0.7*a; if(a=fl);if(fabs(f0-f)/f0)e) xi0=x0;xi1=x1; fx=f;printf( 最优解为 nx1*=%fnx2*=%fnfx=%fn,xi0,xi1,fx);

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


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