机械优化设计黄金分割法 外推法Word文档下载推荐.docx
《机械优化设计黄金分割法 外推法Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《机械优化设计黄金分割法 外推法Word文档下载推荐.docx(15页珍藏版)》请在冰豆网上搜索。
x1=x2;
elsey1=y2;
*b=x2;
x2=x3;
*n=*n+1;
y2=y3;
s=hj(a,b,e,n);
}x3=x2+h;
y3=fun(x3);
returns;
while(y3<
y2)
{h*=2.0;
voidmain()
{y1=y2;
doubles,a,b,e,m;
intn=0;
x3=x2+h;
\n);
e值值和精度输入牰湩晴尨a,by3=fun(x3);
}scanf(%lf%lf%lf,&
a,&
b,&
e);
printf(
un(%f)=%f,fun(%f)=%f,fun(%f)=s=hj(&
b,e,&
n);
%f\n,x1,y1,x2,y2,x3,y3);
m=(a+b)/2;
printf(a=%lf,b=%lf,s=%lf,m=%lf,n=%d\n,a,b}
s,m,n);
运行过程及结果:
}
fun(2.560000)=16.953600,
fun(5.120000)=11.014400,
机械优化设计编程报告
elseif(y2>
=yp){
a3=a2;
y3=y2;
e值输入a,b值和精度-3a2=ap;
y2=yp;
else{a1=ap;
y1=yp;
}5
0.0001
doublex,y;
a=3.279466,b=3.279793,s=22.659008,m=3.279
629,n=21
if(y2<
x=a2;
y=y2;
}else{
x=ap;
y=yp;
3.二次插值法printf(a*=%f\n,x);
printf(y*=%f\n,y);
return0;
#include<
}#include<
intmain(void)
doublef(doublex){
doublea1,a2,a3,ap,y1,y2,y3,yp,c1,c2,m;
doublej[3];
doubley;
y=x*x-10*x+36;
inti,h=1;
returny;
voidfinding(doublea[3]);
voidfinding(doublea[3])finding(j);
a1=j[0];
inth,i;
doubley[3];
a2=j[1];
a[0]=0;
a3=j[2];
m=0.001;
h=1;
doublef(doublex);
a[1]=h;
y1=f(a1);
y[0]=f(a[0]);
y[1]=f(a[1]);
y2=f(a2);
if(y[1]>
y[0])
y3=f(a3);
h=-h;
for(i=1;
1>
=1;
i++)
a[2]=a[0];
y[2]=y[0];
do{
c1=(y3-y1)/(a3-a1);
a[0]=a[1];
a[1]=a[2];
c2=((y2-y1)/(a2-a1)-c1)/(a2-a3);
y[0]=y[1];
y[1]=y[2];
ap=0.5*(a1+a3-c1/c2);
a[2]=a[1]+h;
y[2]=f(a[2]);
yp=f(ap);
h=2*h;
if(fabs((y2-yp)/y2)<
m)
}while(y[2]<
y[1]);
break;
elseif((ap-a2)*h>
0)
else{if(y2>
for(i=1;
i>
i++){
a1=a2;
y1=y2;
a2=ap;
if(y[2]>
=y[1])else{
a3=ap;
y3=yp;
2
h=2*h;
{d[i][1]=1;
a[0]=a[1];
d[i][2]=0;
a[1]=a[2];
}}
return;
{d[i][1]=0;
d[i][2]=1;
a*=5.000000
y*=11.000000
h=0.1;
a1=0;
坐标轮换法4.a2=h;
x[i][1]=fun1(x[i-1][1],d[i][1],a1);
x[i][2]=fun1(x[i-1][2],d[i][2],a1);
y1=fun2(x[i][1],x[i][2]);
#include<
x[i][1]=fun1(x[i-1][1],d[i][1],a2);
#include<
conio.h>
x[i][2]=fun1(x[i-1][2],d[i][2],a2);
y2=fun2(x[i][1],x[i][2]);
floatfun1(floatx,floata,floatb)
{floaty;
y=x+a*b;
a3=a1;
floatfun2(floatx,floaty)a1=a2;
a2=a3;
{floatz;
z=4*(x-5)*(x-5)+(y-6)*(y-6);
y1=y2;
returnz;
main()
a3=a2+h;
{floatd[100][3],x[100][3],xx[3],ax[100][3];
x[i][1]=fun1(x[i-1][1],d[i][1],a3);
floata1,a2,a3,h,t,y1,y2,y3,e,a,b,l,fi;
x[i][2]=fun1(x[i-1][2],d[i][2],a3);
inti,k;
y3=fun2(x[i][1],x[i][2]);
do\n);
输入初始点坐标牰湩晴尨{a1=a2;
scanf(%f%f,&
x[0][1],&
x[0][2]);
e=0.000001;
l=0.618;
x[2][1]=x[0][1];
x[2][2]=x[0][2];
k=0;
k--;
do
y2);
{x[0][1]=x[2][1];
x[0][2]=x[2][2];
k++;
for(;
a1>
a3;
)
{t=a3;
i<
=2;
i++)a3=a1;
a1=t;
if(i==1)
t=y1;
3
机械优化设计编程报告
y1=t;
x[i][2]=fun1(x[i-1][2],d[i][2],a2);
a=a1;
}b=a3;
a1=b-l*(b-a);
a2=a+l*(b-a);
{b=a2;
a2=a1;
y2=y1;
a1=b-l*(b-a);
if(b<
1e-3)}
}{
fabs(b-a)>
e;
)}
{ax[k][i]=0.5*(a+b);
if(y1>
=y2)x[i][1]=fun1(x[i-1][1],d[i][1],ax[k][i]);
{a=a1;
x[i][2]=fun1(x[i-1][2],d[i][2],ax[k][i]);
while(sqrt(pow((x[2][1]-x[0][1]),2)+pow((x[2][x[i][2]=fun1(x[i-1][2],d[i][2],a2);
2]-x[0][2]),2))>
=1e-6);
}xx[1]=x[2][1];
elsexx[2]=x[2][2];
fi=fun2(xx[1],xx[2]);
a2=a1;
牰湩晴尨最优解为\nx1*=%f\nx2*=%f\ny2=y1;
f*=%f\nk=%d\n,xx[1],xx[2],fi,k);
y1=fun2(x[i][1],x[i][2]);
}输入初始点坐标}
8else
9{
最优解为for(;
fabs((b-a)/b)>
=e||fabs((y2-y1)/y2)>
=e;
x1*=5.000000)
x2*=6.000000{
f*=0.000000if(y1>
=y2)
k=2
a1=a2;
5.随机方向法a2=a+l*(b-a);
4
fx=f(x[0],x[1]);
stdlib.h>
if(fx<
fl)
floatf(floatx,floaty){
fl=fx;
for(i=0;
2;
i++)floatz;
z=(x-2)*(x-2)+(y-1)*(y-1);
{d[i]=e[i];
xl[i]=x[i];
floatg1(floatx,floaty)while(j<
=k)
floatz;
j++;
z=x*x-y;
r[0]=-1+(rand()/32767.00)*(1-(-1));
r[1]=-1+(rand()/32767.00)*(1-(-1));
floatg2(floatx,floaty)
e[0]=r[0]/sqrt(r[0]*r[0]+r[1]*r[1]);
z=x+y-2;
e[1]=r[1]/sqrt(r[0]*r[0]+r[1]*r[1]);
x[0]=x0[0]+h*e[0];
voidmain()x[1]=x0[1]+h*e[1];
if(g1(x[0],x[1])<
=0&
&
g2(x[0],x[1])<
=0)inti,j;
float
k=8,c=0.000001,a0=-3,b0=3,a1=-3,b1=3;
x[10],x0[10],xl[10],e[10],r[10],d[10],h,fl,f0,fx;
while(g1(x0[0],x0[1])>
0||g2(x0[0],x0[1])>
0){d[i]=e[i];
x0[0]=a0+(rand()/32767.00)*(b0-a0);
x0[1]=a1+(rand()/32767.00)*(b1-a1);
x[0]=xl[0];
fl=f(x0[0],x0[1]);
x[1]=xl[1];
f0=f(x0[0],x0[1]);
while
(1)
while
(1)
{h=1.3*h;
h=0.01;
x[0]=x[0]+h*d[0];
j=1;
x[1]=x[1]+h*d[1];
r[0]=-1+(rand()/32767.00)*(1-(-1));
if(g1(x[0],x[1])>
0||g2(x[0],x[1])>
0)r[1]=-1+(rand()/32767.00)*(1-(-1));
e[0]=r[0]/sqrt(r[0]*r[0]+r[1]*r[1]);
e[1]=r[1]/sqrt(r[0]*r[0]+r[1]*r[1]);
fl)fl=fx;
x[1]=x0[1]+h*e[1];
elsebreak;
do
if(g1(x[0],x[1])<
=0)
5
&
(l1*l1+l2*l2-1.414*l1*l2-16<
x[0]=x[0]-h*d[0];
(36-l1*l1-l2*l2-1.414*l1*l2<
=0))
return
(1);
x[1]=x[1]-h*d[1];
h=0.7*h;
if(h<
c)return(0);
floatfun(floatx0[2])x[0]=x[0]+h*d[0];
{x[1]=x[1]+h*d[1];
floatf,
a[31],b[31],r[31],p[31],q[31],w[31],x1[2];
if(g1(x[0],x[1])>
continue;
inti;
p[0]=acos(((1+x0[0])*(1+x0[0])-x0[1]*x0[
1]+25)/(10+10*x0[0]));
while(fx>
=fl);
q[0]=acos(((1+x0[0])*(1+x0[0])-x0[1]*x0[
1]-25)/(10*x0[1]));
if(fabs((f0-fx)/f0)>
=c)
f=0;
x0[0]=x[0];
=30;
{x0[1]=x[1];
p[i]=p[0]+(Pai/60)*i;
f0=fx;
r[i]=sqrt(26-10*cos(p[i]));
elsea[i]=acos((r[i]*r[i]+x0[1]*x0[1]-x0[0]*x0[
0])/(2*r[i]*x0[1]));
}b[i]=acos((r[i]*r[i]+24)/(10*r[i]));
q[i]=Pai-a[i]-b[i];
\nx1*=%f,x2*=%f,牰湩晴尨输出最优解为
w[i]=q[0]+(2*(p[i]-p[0])*(p[i]-p[0]))/(3*Py*=%f\n,x[0],x[1],fx);
ai);
f=f+(Pai/60)*(q[i]-w[i])*(q[i]-w[i])*(p[i]-p[i-1]);
输出最优解为}
returnf;
x1*=0.995421,x2*=1.004521,y*=1.009200
voidmain()四杆机构优化设计6.{
a,q,f,fl,f0,l[2],z[2],d0[100],d1[100],x[2],xi[2],fx,m0,m1,e;
inti,j,n,k;
牰湩晴尨输入精度);
#definePai3.1415926
intg(floatl1,floatl2)scanf(%f,&
do{z[0]=0+5*(rand()/32767.00);
if((-l1<
=0)z[1]=0+5*(rand()/32767.00);
(-l2<
=0)}
while(g(z[0],z[1])==0);
(6-l1-l2<
=99;
i++)&
(1-l2-4<
(l2-l1-4<
6
d0[i]=-1+2*(rand()/32767.00);
x[0]=x[0]+a*m0;
}x[1]=x[1]+a*m1;
for(j=0;
j<
j++)if(g(z[0],z[1])==1)
{f=fun(x);
}d1[j]=-1+2*(rand()/32767.00);
}while(f>
f0=fun(z);
if(fabs((f0-f)/f0)<
e)
fl=fun(z);
{xi[0]=x[0];
xi[1]=x[1];
ss:
fx=f;
a=0.01;
牰湩晴尨最优解为\nx1*=%f\nx2*=%f\nfor(i=0,j=0;
=99&
i++,j++)
fx=%f\n,xi[0],xi[1],fx);
n=1/sqrt((d0[i])*(d0[i])+d1[j]*d1[j]);
d0[i]=n*d0[i];
d1[j]=n*d1[j];
x[0]=z[0]+a*d0[i];
{f0=f;
x[1]=z[1]+a*d1[j];
fl=f;
if(g(x[0],x[1])==1)z[0]=x[0];
{z[1]=x[1];
gotoss;
f=fun(x);
}if(f<
fl=f;
m0=d0[i];
m1=d1[j];
输入精度0.001l[0]=x[0];
l[1]=x[1];
最优解为}
x1*=4.161386}
x2*=2.311257
x[0]=l[0];
x[1]=l[1];
{a=1.3*a;
x[0]=x[0]+a*m0;
x[1]=x[1]+a*m1;
if(g(z[0],z[1])==0)
break;
if(f<
while(g(z[0],z[1])==1);
x[0]=x[0]-a*m0;
x[1]=x[1]-a*m1;
a=0.7*a;
if(a<
0.00001)break;
7