機(jī)械優(yōu)化設(shè)計(jì)外推法 黃金分割法 二次插值法 隨機(jī)方向法 坐標(biāo)輪換法 四桿機(jī)構(gòu)
《機(jī)械優(yōu)化設(shè)計(jì)外推法 黃金分割法 二次插值法 隨機(jī)方向法 坐標(biāo)輪換法 四桿機(jī)構(gòu)》由會員分享,可在線閱讀,更多相關(guān)《機(jī)械優(yōu)化設(shè)計(jì)外推法 黃金分割法 二次插值法 隨機(jī)方向法 坐標(biāo)輪換法 四桿機(jī)構(gòu)(8頁珍藏版)》請?jiān)谘b配圖網(wǎng)上搜索。
1、《機(jī)械優(yōu)化設(shè)計(jì)》上機(jī)源程序與結(jié)果—
《機(jī)械優(yōu)化設(shè)計(jì)》上機(jī)源程序與結(jié)果
4
第 8 頁 共 8 頁
程序一:外推法
源程序:
#include
2、
{h=-h;
x3=x1; x1=x2; x2=x3;
y3=y1; y1=y2; y2=y3;
}
x3=x2+h;y3=fun(x3);
while(y3 3、9513)=13.720895
程序二:黃金分割法
源程序:
#include 4、;
if(f(x1)>f(x2))
*a=x1;
else
*b=x2;
*n=*n+1;
min=gi(a,b,e,n);
}
return min;
}
void main()
{
double min,a,b,e,m;
int n=0;
printf("輸入搜索區(qū)間a,b值和精度e\n");
scanf("%lf %lf %lf",&a,&b,&e);
min=gi(&a,&b,e,&n);
m=(a+b 5、)/2;
printf("a=%lf,b=%lf,min=%lf,m=%lf,n=%d\n",a,b,min,m,n);
}
Press any key to continue
運(yùn)行過程及結(jié)果:
a*=5.000000
y*=11.000000
程序三:二次插值法
源程序:
#include 6、,y;
float h0=0.03,h=h0,a1=0,a2=h,y1,y2,a3,y3;
y1=f(a1);
y2=f(a2);
if(y2>y1)
{
h=-h;a3=a1;y3=y1;
a1=a2;y1=y2;a2=a3;y2=y3;
}
a3=a2+h;y3=f(a3);
while(y3 7、(a1);
y2=f(a2);
y3=f(a3);
c1=(y3-y1)/(a3-a1);
c2=((y2-y1)/(a2-a1)-c1)/(a2-a3);
ap=0.5*(a1+a3-c1/c2);
yp=f(ap);
while(abs((y2-yp)/y2)>=e)
{if((ap-a2)*h>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;a2=ap;y2=yp;}
8、 else{a1=ap;y1=yp;}}
}
if(y2 9、io.h>
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 d[100][3],x[100][3],xx[3],ax[100][3];
float a1,a2,a3,h,t,y1,y2,y3,e,a,b,l,fi;
int i,k;
printf("輸 10、入初始點(diǎn)坐標(biāo)\n");
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
{x[0][1]=x[2][1];
x[0][2]=x[2][2];
k++;
for(i=1;i<=2;i++)
{
if(i==1)
{d[i][1]=1;
d[i][2]=0;
}
else
{d[i][1]=0;
11、 d[i][2]=1;
}
h=0.1;
a1=0;
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]);
x[i][1]=fun1(x[i-1][1],d[i][1],a2);
x[i][2]=fun1(x[i-1][2],d[i][2],a2);
y2=fun2(x[i][1],x[i][2]);
if(y2>y1)
{h=-h;
12、 a3=a1;
y3=y1;
a1=a2;
a2=a3;
y1=y2;
y2=y3;
}
a3=a2+h;
x[i][1]=fun1(x[i-1][1],d[i][1],a3);
x[i][2]=fun1(x[i-1][2],d[i][2],a3);
y3=fun2(x[i][1],x[i][2]);
do
{a1=a2;
y1=y2;
a2=a3;
y2=y3;
a3=a2+h;
x[i][1]=fun1(x[i-1] 13、[1],d[i][1],a3);
x[i][2]=fun1(x[i-1][2],d[i][2],a3);
y3=fun2(x[i][1],x[i][2]);
}
while(y3 14、 x[i][2]=fun1(x[i-1][2],d[i][2],a1);
y1=fun2(x[i][1],x[i][2]);
x[i][1]=fun1(x[i-1][1],d[i][1],a2);
x[i][2]=fun1(x[i-1][2],d[i][2],a2);
y2=fun2(x[i][1],x[i][2]);
if(b<1e-3)
{
for(;fabs(b-a)>e;)
{
if(y1>=y2)
{a=a1;
a1=a2;
y1=y2;
15、
a2=a+l*(b-a);
x[i][1]=fun1(x[i-1][1],d[i][1],a2);
x[i][2]=fun1(x[i-1][2],d[i][2],a2);
y2=fun2(x[i][1],x[i][2]);
}
else
{b=a2;
a2=a1;
y2=y1;
a1=b-l*(b-a);
x[i][1]=fun1(x[i-1][1],d[i][1],a1);
x[i][2]=fun1(x[i-1][2],d[i 16、][2],a1);
y1=fun2(x[i][1],x[i][2]);
}
}
}
else
{
for(;fabs((b-a)/b)>=e||fabs((y2-y1)/y2)>=e;)
{
if(y1>=y2)
{a=a1;
a1=a2;
y1=y2;
a2=a+l*(b-a);
x[i][1]=fun1(x[i-1][1],d[i][1],a2);
x[i][2]=fun1(x[ 17、i-1][2],d[i][2],a2);
y2=fun2(x[i][1],x[i][2]);
}
else
{b=a2;
a2=a1;
y2=y1;
a1=b-l*(b-a);
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]);
}
}
}
ax[k][i]=0.5*(a+b);
x[i][1]=f 18、un1(x[i-1][1],d[i][1],ax[k][i]);
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][2]-x[0][2]),2))>=1e-6);
xx[1]=x[2][1];
xx[2]=x[2][2];
fi=fun2(xx[1],xx[2]);
printf("最優(yōu)解為\nx1*=%f\nx2*=%f\nf*=%f\nk=%d\n",xx[1],xx[2],fi,k); 19、
}
運(yùn)行過程及結(jié)果:
輸入初始點(diǎn)坐標(biāo)
1 9
最優(yōu)解為
x1*=5.000000
x2*=6.000000
f*=0.000000
k=2
Press any key to continue
程序五:隨機(jī)方向法
源程序:
#include 20、t y)
{
float z;
z=x*x-y;
return z;
}
float g2(float x,float y)
{
float z;
z=x+y-2;
return z;
}
void main()
{
int i,j;
float k=8,c=0.000001,a0=-3,b0=3,a1=-3,b1=3;
float x[10],x0[10],xl[10],e[10],r[10],d[10],h,fl,f0,fx;
while(g1(x0[0],x0[ 21、1])>0||g2(x0[0],x0[1])>0)
{
x0[0]=a0+(rand()/32767.00)*(b0-a0);
x0[1]=a1+(rand()/32767.00)*(b1-a1);
}
fl=f(x0[0],x0[1]);
f0=f(x0[0],x0[1]);
while(1)
{
h=0.01;
j=1;
r[0]=-1+(rand()/32767.00)*(1-(-1));
r[1]=-1+(rand()/32767.00) 22、*(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]);
x[0]=x0[0]+h*e[0];
x[1]=x0[1]+h*e[1];
if(g1(x[0],x[1])<=0&&g2(x[0],x[1])<=0)
{
fx=f(x[0],x[1]);
if(fx 23、 fl=fx;
for(i=0;i<2;i++)
{d[i]=e[i];xl[i]=x[i];}
}
}
while(j<=k)
{
j++;
r[0]=-1+(rand()/32767.00)*(1-(-1));
r[1]=-1+(rand()/32767.00)*(1-(-1));
e[0]=r[0]/sqrt(r[0]*r[0]+r[1]*r[1]);
24、 e[1]=r[1]/sqrt(r[0]*r[0]+r[1]*r[1]);
x[0]=x0[0]+h*e[0];
x[1]=x0[1]+h*e[1];
if(g1(x[0],x[1])<=0&&g2(x[0],x[1])<=0)
{
fx=f(x[0],x[1]);
if(fx 25、
{d[i]=e[i];xl[i]=x[i];}
}
}
}
x[0]=xl[0];
x[1]=xl[1];
while(1)
{
h=1.3*h;
x[0]=x[0]+h*d[0];
x[1]=x[1]+h*d[1];
if(g1(x[0],x[1])>0||g2(x[0],x[1])>0)
break;
26、 fx=f(x[0],x[1]);
if(fx 27、 if(g1(x[0],x[1])>0||g2(x[0],x[1])>0)
continue;
fx=f(x[0],x[1]);
}
while(fx>=fl);
if(fabs((f0-fx)/f0)>=c)
{
x0[0]=x[0];
x0[1]=x[1];
fl=fx;
f0=fx;
}
else
break;
}
printf(" 28、輸出最優(yōu)解為\nx1*=%f,x2*=%f,y*=%f\n",x[0],x[1],fx);
}
輸出最優(yōu)解為
x1*=0.995421,x2*=1.004521,y*=1.009200
Press any key to continue
程序六:四桿機(jī)構(gòu)
源程序:
#include 29、
&&(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);
else
return (0);
}
float fun(float x0[2])
{
float f,a[31],b[31],r[31],p[31],q[31],w[31],x1[2];
int i;
p[0]=acos(((1+x0[0])*(1+x0[0])-x0[1]*x0[1]+25)/(10+10*x0[ 30、0]));
q[0]=acos(((1+x0[0])*(1+x0[0])-x0[1]*x0[1]-25)/(10*x0[1]));
f=0;
for(i=1;i<=30;i++)
{
p[i]=p[0]+(Pai/60)*i;
r[i]=sqrt(26-10*cos(p[i]));
a[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];
w[i]=q[0]+(2 31、*(p[i]-p[0])*(p[i]-p[0]))/(3*Pai);
f=f+(Pai/60)*(q[i]-w[i])*(q[i]-w[i])*(p[i]-p[i-1]);
}
return f;
}
void main()
{
float a,q,f,fl,f0,l[2],z[2],d0[100],d1[100],x[2],xi[2],fx,m0,m1,e;
int i,j,n,k;
printf("請輸入收斂精度e:");
scanf("%f",&e);
do
{
z[0]=0+5*(rand()/32767.00 32、);
z[1]=0+5*(rand()/32767.00);
}
while(g(z[0],z[1])==0);
for(i=0;i<=99;i++)
{
d0[i]=-1+2*(rand()/32767.00);
}
for(j=0;j<=99;j++)
{
d1[j]=-1+2*(rand()/32767.00);
}
f0=fun(z);
fl=fun(z);
ss:
a=0.01;
for(i=0,j=0;i<=99&&j<=99;i++,j++)
{n=1/sqrt((d0[i])*(d0[i])+d1[j]*d 33、1[j]);
d0[i]=d0[i]/sqrt((d0[i])*(d0[i])+d1[j]*d1[j]);
d1[j]=d1[j]/sqrt((d0[i])*(d0[i])+d1[j]*d1[j]);
x[0]=z[0]+a*d0[i];
x[1]=z[1]+a*d1[j];
if(g(x[0],x[1])==1)
{
f=fun(x);
if(f 34、
x[0]=l[0];
x[1]=l[1];
do
{
a=1.3*a;
x[0]=x[0]+a*m0;
x[1]=x[1]+a*m1;
if(g(z[0],z[1])==0)
break;
f=fun(x);
if(f 35、0]=x[0]+a*m0;
x[1]=x[1]+a*m1;
if(g(z[0],z[1])==1)
f=fun(x);
}
while(f>=fl);
if(fabs((f0-f)/f0)
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 6.煤礦安全生產(chǎn)科普知識競賽題含答案
- 2.煤礦爆破工技能鑒定試題含答案
- 3.爆破工培訓(xùn)考試試題含答案
- 2.煤礦安全監(jiān)察人員模擬考試題庫試卷含答案
- 3.金屬非金屬礦山安全管理人員(地下礦山)安全生產(chǎn)模擬考試題庫試卷含答案
- 4.煤礦特種作業(yè)人員井下電鉗工模擬考試題庫試卷含答案
- 1 煤礦安全生產(chǎn)及管理知識測試題庫及答案
- 2 各種煤礦安全考試試題含答案
- 1 煤礦安全檢查考試題
- 1 井下放炮員練習(xí)題含答案
- 2煤礦安全監(jiān)測工種技術(shù)比武題庫含解析
- 1 礦山應(yīng)急救援安全知識競賽試題
- 1 礦井泵工考試練習(xí)題含答案
- 2煤礦爆破工考試復(fù)習(xí)題含答案
- 1 各種煤礦安全考試試題含答案