浙江科技学院专用机械优化设计作业Word文档格式.docx
- 文档编号:6343210
- 上传时间:2023-05-06
- 格式:DOCX
- 页数:30
- 大小:134.48KB
浙江科技学院专用机械优化设计作业Word文档格式.docx
《浙江科技学院专用机械优化设计作业Word文档格式.docx》由会员分享,可在线阅读,更多相关《浙江科技学院专用机械优化设计作业Word文档格式.docx(30页珍藏版)》请在冰点文库上搜索。
许用弯曲应力
因螺旋角、材料、要求等与例题相同,各类系数(如K,y,E之类)与例题相同;
因材料与例题选取相同,则
、
等参数相同。
所以由以上公式可推出本设计与例题的
只与
的比有关。
所以本设计在原有例题的数据基础上,对一些数据进行推算。
当然第二种方法是也可以通过题目要求查机械设计手册,一步步计算出相关数据。
本设计在正确的基础上,有较为简便的第一种方法。
)
由上得:
与
相比明显为消极约束,故可省略。
共取17个约束条件。
至此已形成了完整的数学模型。
2.初始搜索区间的确定
1)将
代入目标函数
得
2)确定其搜索区间[a,b]。
设初始点
,初始步长h=1。
以下是基于c-free4.0上运行的C程序:
#include<
stdio.h>
math.h>
voidmain()
{
inta1=0,a2,a3,h=1;
floatf1,f2,f3,a,b;
f1=67.33*a1+1/(1.5+a1)+1/(3-a1)+781,
a2=a1+h,f2=67.33*a2+1/(1.5+a2)+1/(3-a2)+781;
if(f2>
=f1)
{
h=-h,a3=a1,f3=f1;
while(f3<
f2)
a1=a2,f1=f2,
a2=a3,f2=f3,
a3=a2+h,f3=67.33*a3+1/(1.5+a3)+1/(3-a3)+781;
}
if(a1>
a3)
a=a3,b=a1;
elsea=a1,b=a3;
printf("
a=%.3fb=%.3f\n"
a,b);
else
}
得到运行结果:
a=-2.000,b=6.000
所以初始区间为[-2.000,6.000]。
3.然后用黄金分割法求其最优解
floata1,a2,f1,f2,f3,a,b,am;
a=-2,b=6;
while(b-a>
0.01)
a1=b-0.618*(b-a),
f1=67.33*a1+1/(1.5+a1)+1/(3-a1)+781;
a2=a+0.618*(b-a),
f2=67.33*a2+1/(1.5+a2)+1/(3-a2)+781;
if(f1<
=f2)
b=a2,a2=a1,f2=f1,a1=b-0.618*(b-a),
a=a1,a1=a2,f1=f2,a2=a+0.618*(b-a),
am=0.5*(b+a);
f3=67.33*am+1/(1.5+am)+1/(3-am)+781;
a[min]=%.4f\nf(min)=%.4f\n"
am,f3);
得出结果为
a[min]=-1.5035
所以最优解为
4.鲍威尔法
#definem10/***********数组长度m>
=维数n****/
#definepi3.1416
floatf(floatx[]);
voidmjtf(intn,floatx0[],floath,floats[],floata[],floatb[]);
voidmhjfgf(intn,floata[],floatb[],floatflag,floatx[]);
voidmpowell(intn,floatx0[],floath,floatflag1,floatflag2,floata[],floatb[],floatx[]);
floatf(floatx[])
floatresult;
result=(x[0]*x[2]*(1+x[4])+x[1]*x[3]*(1+31.5/x[4]))/2/cos(x[5]*pi/180)
+1/(x[0]-3.5)+1/(8-x[0])+1/(x[1]-3.5)+1/(10-x[1])+1/(x[2]-14)+1/(22-x[2])
+1/(x[3]-16)+1/(22-x[3])+1/(x[4]-5.8)+1/(7-x[4])+1/(x[5]-8)+1/(15-x[5])
+1/(x[0]*x[2]-68.3722)+1/(x[1]*x[3]-66.7325)+
1/(0.0000570*(1+x[4])*x[0]*x[0]*x[0]*x[2]*x[2]-cos(x[5]*pi/180)*cos(x[5]*pi/180))
+1/(0.0000599*(31.5+x[4])*x[1]*x[1]*x[1]*x[3]*x[3]-x[4]*x[4]*cos(x[5]*pi/180)*cos(x[5]*pi/180))
+1/(x[1]*x[3]*(x[4]+31.5)-x[4]*(2*(x[0]+50)*cos(x[5]*pi/180)+x[0]*x[2]*x[4]));
returnresult;
/*搜索区间子程序*/
voidmjtf(intn,floatx0[],floath,floats[],floata[],floatb[])
a[0]=2,b[0]=10;
a[1]=2,b[1]=13;
a[2]=14,b[2]=22;
a[3]=16,b[3]=22;
a[4]=5,b[4]=7;
a[5]=8,b[5]=15;
/*多维黄金分割法子程序*/
voidmhjfgf(intn,floata[],floatb[],floatflag,floatx[])
inti;
floatx1[m],x2[m],f1,f2,sum;
for(i=0;
i<
n;
i++)/*计算初始两试点*/
x1[i]=b[i]-(float)0.618*(b[i]-a[i]);
f1=f(x1);
i++)
x2[i]=a[i]+(float)0.618*(b[i]-a[i]);
f2=f(x2);
do
=f2)/*判断消去区间*/
{/*消去右*/
b[i]=x2[i];
x2[i]=x1[i];
f2=f1;
{/*消去左*/
a[i]=x1[i];
x1[i]=x2[i];
f1=f2;
sum=0;
sum+=(b[i]-a[i])*(b[i]-a[i]);
}while(sqrt(sum)>
flag);
x[i]=(float)0.5*(b[i]+a[i]);
/*已达到,输出极小点*/
/*鲍威尔法子程序*/
voidmpowell(intn,floatx0[],floath,floatflag1,floatflag2,floata[],floatb[],floatx[])
inti,j,k,r;
floatx1[m],x11[m],x2[m],f0,f1,f2,fn[m],s[m][m],sum;
i++)/*方向矩阵初始化*/
for(k=0;
k<
k++)
if(i==k)
s[i][k]=1;
s[i][k]=0;
k=0;
while
(1)
x1[i]=x0[i];
x11[i]=x1[i];
i++)/*依次按每个方向搜索*/
mjtf(n,x1,h,s[i],a,b);
mhjfgf(n,a,b,flag1,x1);
fn[i]=f(x11)-f(x1);
/*计算函数下降值*/
i++)/*计算映射点*/
x2[i]=2*x1[i]-x0[i];
for(i=1;
i++)/*找出函数下降值中的最大值存入fn[0]*/
if(fn[0]<
fn[i])
fn[0]=fn[i];
r=i;
r=0;
f0=f(x0);
/*计算始点、终点和映射点的函数值*/
if(f2>
=f0||(f0-2*f1+f2)*(f0-f1-fn[0])*(f0-f1-fn[0])>
=0.5*fn[0]*(f0-f2)*(f0-f2))
{/*判断是否需要换方向*//*不需要换*/
=f2)/*判断将终点还是将映射点赋给下一轮始点*/
/*计算一轮中终点与始点的距离*/
sum+=(x1[i]-x0[i])*(x1[i]-x0[i]);
i++)/*将终点赋给下一轮始点*/
x0[i]=x1[i];
sum+=(x2[i]-x0[i])*(x2[i]-x0[i]);
i++)/*将映射点赋给下一轮始点*/
x0[i]=x2[i];
{
for(i=r;
n-1;
i++)/*去掉第r+1个方向,其它方向前移*/
for(j=0;
j<
j++)
s[i][j]=s[i+1][j];
i++)/*生成新方向放最后*/
s[n-1][i]=x1[i]-x0[i];
mjtf(n,x1,h,s[n-1],a,b);
/*按新方向搜索一次*/
if(sqrt(sum)<
=flag2)
break;
k+=1;
i++)/*输出极小点*/
x[i]=x1[i];
/*鲍威尔法主程序*/
inti,n;
floath,flag1,flag2,x0[m],a[m],b[m],x[m];
\n<
鲍威尔法>
\n"
);
请输入维数:
scanf("
%d"
&
n);
请输入初始点:
"
\nx0[%d]="
i);
%f"
x0[i]);
\n请输入初始步长:
h);
\n请输入黄金分割法迭代精度:
flag1);
\n请输入鲍威尔法迭代精度:
flag2);
mpowell(n,x0,h,flag1,flag2,a,b,x);
\n极小点坐标为:
x[%d]=%.4f\n"
i,x[i]);
\n极小值为:
\n%.4f\n"
f(x));
输入数据:
6
5,6,19,21,6,9
1
0.1
输出结果:
X[0]=2.1656
X[1]=2.2277
x[2]=14.1656
X[3]=16.1242
X[4]=5.0414
X[5]=8.1449
极小值为:
240.8813
五.约束随机方向搜索法
以下是基于win-tc运行的c程序:
#definepi3.1416
floatx0[6]={5,6,19,21,6,9},x[6];
floatfx();
floatsueiji();
floatrestrict();
floata0,a,e,f0,f,Nmax,y[6],s;
intn,i,k,jj,k1,k2,yy;
enterthenumberna0eNmax\n"
%d%f%f%f"
n,&
a0,&
e,&
Nmax);
x[i]=x0[i];
f0=fx();
a=a0;
k=1;
jj=0;
6;
y[i]=sueiji();
s=1/sqrt(y[0]*y[0]+y[1]*y[1]+y[2]*y[2]+y[3]*y[3]+y[4]*y[4]+y[5]*y[5]);
x[i]=x0[i]+a*s*y[i];
yy=restrict();
if(yy==1)
f=fx();
if(f<
f0)
x0[i]=x[i];
f0=f;
jj=1;
while(yy==1);
if(jj==0)
k1=0;
k=k+1;
if(k>
Nmax)
k2=0;
if(a<
=e)
X=(%f,%f,%f,%f,%f,%f)\n"
x[0],x[1],x[2],x[3],x[4],x[5]);
F=%f\n"
fx());
getch();
k1=1;
a=0.5*a;
k2=1;
while(k2==1);
while(k1==1);
floatfx()
floatf;
f=(x[0]*x[2]*(1+x[4])+x[1]*x[3]*(1+31.5/x[4]))/2/cos(x[5]*pi/180)
return(f);
floatsueiji()
longi;
floatr;
39999;
i++);
srand((unsigned)time(NULL));
r=(double)(rand()%100/(double)100);
r=2*r-1;
return(r);
floatrestrict()
if((x[0]-2)<
=0)
return(0);
if((7-x[0])<
if((x[1]-2)<
if((7-x[1])<
if((x[2]-14)<
if((22-x[2])<
if((x[3]-16)<
if((22-x[3])<
if((x[4]-5.8)<
if((7-x[4])<
if((x[5]-8)<
if((15-x[5])<
if((x[0]*x[2]-69.1865)<
if((x[1]*x[3]-68.4876)<
if((0.0000843*(1+x[4])*x[0]*x[0]*x[0]*x[2]*x[2]-cos(x[5]*pi/180)*cos(x[5]*pi/180))<
if((0.0000912*(31.5+x[4])*x[1]*x[1]*x[1]*x[3]*x[3]-x[4]*x[4]*cos(x[5]*pi/180)*cos(x[5]*pi/180))<
if((x[1]*x[3]*(x[4]+31.5)-x[4]*(2*(x[0]+50)*cos(x[5]*pi/180)+x[0]*x[2]*x[4]))<
return
(1);
输入:
6,2,0.1,10
输出:
X=[4.846,5.846,18.846,20.846,5.846,8.846]
F=737.455
六.内点惩罚法
以下是基于c-free4.0平台运行的程序:
#definepi3.142
intr=0.01;
voidmndcfhs(intn,floath,floatx0[],floatflag1,floatflag2,floatflag3,floata[],floatb[],floatx[]);
+r*(1/(x[0]-3.5)+1/(8-x[0])+1/(x[1]-3.5)+1/(10-x[1])+1/(x[2]-14)+1/(22-x[2])
+1/(0.0000599*(31.5+x
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 浙江 科技学院 专用 机械 优化 设计 作业