您好,欢迎访问三七文档
当前位置:首页 > 机械/制造/汽车 > 机械/模具设计 > 机械优化设计第一次作业
#includestdio.h#includemath.h#definef(x)x+20/x#defineM0.618voidmain(){doubley1,y2,x1,x2,x,a,b,e;intn;n=1;printf(请输入收敛精度e=);scanf(%lf,&e);printf(请输入区间左值a=);scanf(%lf,&a);printf(请输入区间右值b=);scanf(%lf,&b);printf(nabx1x2y1y2b-a\n);x1=b-M*(b-a);x2=a+M*(b-a);y1=f(x1);y2=f(x2);printf(%d%.4lf%.4lf%.4lf%.4lf%.4lf%.4lf\n,n,a,b,x1,x2,y1,y2,b-a);n=n++;do{if(y1y2){b=x2;x2=x1;y2=y1;x1=b-M*(b-a);y1=f(x1);printf(%d%.4lf%.4lf%.4lf%.4lf%.4lf%.4lf%.4lf\n,n,a,b,x1,x2,y1,y2,b-a);n=n++;}else{a=x1;x1=x2;y1=y2;x2=a+M*(b-a);y2=f(x2);printf(%d%.4lf%.4lf%.4lf%.4lf%.4lf%.4lf%.4lf\n,n,a,b,x1,x2,y1,y2,b-a);n=n++;}}while(fabs((b-a))=e);x=(a+b)*0.5;printf(x=%.5lff(x)=%.5lf\n,x,f(x));getchar();}#includestdio.h#includestdlib.h#includemath.h#includeconio.h#defineTT0.08#defineFF0.0001#defineAC.00000001#defineAD.00000001#defineN2floatia;floatfny(float*x){floatf;f=(float)(10*pow((x[0]+x[1]-5),2)+pow((x[0]-x[1]),2));return(f);}float*iterate(float*x,floata,float*s){float*x1;x1=(float*)malloc(N*sizeof(float));for(inti=0;iN;i++)x1[i]=x[i]+a*s[i];return(x1);}floatfunc(float*x,floata,float*s){float*x1;x1=iterate(x,a,s);floatf=fny(x1);return(f);}voidfinding(floata[3],floatf[3],float*xk,float*s){floatt=(float)TT;floata1,f1;a[0]=0;f[0]=func(xk,a[0],s);for(inti=0;;i++){a[1]=a[0]+t;f[1]=func(xk,a[1],s);if(f[1]f[0])break;if(fabs(f[1]-f[0])=AD){t=-t;a[0]=a[1];f[0]=f[1];}else{if(ia==1)return;t=t/2;ia=1;}}for(i=0;;i++){a[2]=a[1]+t;f[2]=func(xk,a[2],s);if(f[2]f[1])break;t=2*t;a[0]=a[1];f[0]=f[1];a[1]=a[2];f[1]=f[2];}if(a[0]a[2]){a1=a[0];f1=f[0];a[0]=a[2];f[0]=f[2];a[2]=a1;f[2]=f1;}return;}floatlagrange(float*xk,float*ft,float*s){floata[3],f[3];floatb,c,d,aa;finding(a,f,xk,s);for(inti=0;;i++){if(ia==1){aa=a[1];*ft=f[1];break;}d=(float)((pow(a[0],2)-pow(a[2],2))*(a[0]-a[1])-(pow(a[0],2)-pow(a[1],2))*(a[0]-a[2]));if(fabs(d)==0)break;c=((f[0]-f[2])*(a[0]-a[1])-(f[0]-f[1])*(a[0]-a[2]))/d;if(fabs(c)==0)break;b=(float)(((f[0]-f[1])-c*(pow(a[0],2)-pow(a[1],2)))/(a[0]-a[1]));aa=-b/(2*c);*ft=func(xk,aa,s);if(fabs(aa-a[1])=AD){if(*ftf[1])aa=a[1];break;}if(aaa[1]){if(*ftf[1]){a[2]=aa;f[2]=*ft;}elseif(*ftf[1]){a[0]=a[1];a[1]=aa;f[0]=f[1];f[1]=*ft;}elseif(*ft=f[1]){a[2]=aa;a[0]=a[1];f[2]=*ft;f[0]=f[1];a[1]=(a[0]+a[2])/2;f[1]=func(xk,a[1],s);}}else{if(*ftf[1]){a[0]=aa;f[0]=*ft;}elseif(*ft=f[1]){a[0]=aa;a[2]=a[1];f[0]=*ft;f[2]=f[1];a[1]=(a[0]+a[2])/2;f[1]=func(xk,a[1],s);}}}if(*ftf[1]){*ft=f[1];aa=a[1];}return(aa);}float*gradient(float*xk){float*g,f1,f2,q;g=(float*)malloc(N*sizeof(float));f1=fny(xk);for(inti=0;iN;i++){q=(float)FF;xk[i]=xk[i]+q;f2=fny(xk);g[i]=(f2-f1)/q;xk[i]=xk[i]-q;}return(g);}float*bfgs(float*xk){floatu[N],v[N],h[N][N],dx[N],dg[N],s[N];floataa;float*ft,*xk1,*g1,*g2,*xx,*x0=xk;ft=(float*)malloc(sizeof(float));xk1=(float*)malloc(N*sizeof(float));inti,j,k;for(i=0;iN;i++){s[i]=0;for(j=0;jN;j++){h[i][j]=0;if(j==i)h[i][j]=1;}}g1=gradient(xk);floatfi=fny(xk);x0=xk;for(k=0;kN;k++){intib=0;if(ia==1){xx=xk;break;}ib=0;for(i=0;iN;i++)s[i]=0;for(i=0;iN;i++)for(j=0;jN;j++)s[i]+=-h[i][j]*g1[j];aa=lagrange(xk,ft,s);xk1=iterate(xk,aa,s);g2=gradient(xk1);for(i=0;iN;i++)if((fabs(g2[i])=AC)&&(fabs(g2[i]-g1[i])=AC)){ib=ib+1;}if(ib==0){xx=xk1;break;}fi=*ft;if(k==(N-1)){xk=xk1;for(i=0;iN;i++)for(intj=0;jN;j++){h[i][j]=0;if(j==i)h[i][j]=1;}g1=g2;k=-1;}else{for(i=0;iN;i++){dg[i]=g2[i]-g1[i];dx[i]=xk[i]-xk[i];}for(i=0;iN;i++){u[i]=0;v[i]=0;for(intj=0;jN;j++){u[i]=u[i]+dg[j]*h[j][i];v[i]=v[i]+dg[j]*h[i][j];}}floata1=0,a2=0;for(intj=0;jN;j++){a1+=dx[j]*dg[j];a2+=v[j]*h[i][j];}if(fabs(a1)!=0){a2=1+a2/a1;for(i=0;iN;i++)for(j=0;jN;j++)h[i][j]+=(a2*dx[i]*dx[i]-v[i]*dx[j]-dx[i]*u[j])/a1;}xk=xk1;g1=g2;}}if(*ftfi){*ft=fi;xx=xk;}xk=x0;return(xx);}voidmain(){float*xx,f;floatxk[N]={0,0};xx=bfgs(xk);printf(\n\nTheOptimalDesignResultIs:\n);for(intk=0;kN;k++){printf(\n\tx[%d]*=%f,k+1,xx[k]);}f=fny(xx);printf(\n\tf*=%f,f);getch();}
本文标题:机械优化设计第一次作业
链接地址:https://www.777doc.com/doc-2325719 .html