浙江科技学院专用机械优化设计作业Word文档格式.docx

上传人:b****4 文档编号:6343210 上传时间:2023-05-06 格式:DOCX 页数:30 大小:134.48KB
下载 相关 举报
浙江科技学院专用机械优化设计作业Word文档格式.docx_第1页
第1页 / 共30页
浙江科技学院专用机械优化设计作业Word文档格式.docx_第2页
第2页 / 共30页
浙江科技学院专用机械优化设计作业Word文档格式.docx_第3页
第3页 / 共30页
浙江科技学院专用机械优化设计作业Word文档格式.docx_第4页
第4页 / 共30页
浙江科技学院专用机械优化设计作业Word文档格式.docx_第5页
第5页 / 共30页
浙江科技学院专用机械优化设计作业Word文档格式.docx_第6页
第6页 / 共30页
浙江科技学院专用机械优化设计作业Word文档格式.docx_第7页
第7页 / 共30页
浙江科技学院专用机械优化设计作业Word文档格式.docx_第8页
第8页 / 共30页
浙江科技学院专用机械优化设计作业Word文档格式.docx_第9页
第9页 / 共30页
浙江科技学院专用机械优化设计作业Word文档格式.docx_第10页
第10页 / 共30页
浙江科技学院专用机械优化设计作业Word文档格式.docx_第11页
第11页 / 共30页
浙江科技学院专用机械优化设计作业Word文档格式.docx_第12页
第12页 / 共30页
浙江科技学院专用机械优化设计作业Word文档格式.docx_第13页
第13页 / 共30页
浙江科技学院专用机械优化设计作业Word文档格式.docx_第14页
第14页 / 共30页
浙江科技学院专用机械优化设计作业Word文档格式.docx_第15页
第15页 / 共30页
浙江科技学院专用机械优化设计作业Word文档格式.docx_第16页
第16页 / 共30页
浙江科技学院专用机械优化设计作业Word文档格式.docx_第17页
第17页 / 共30页
浙江科技学院专用机械优化设计作业Word文档格式.docx_第18页
第18页 / 共30页
浙江科技学院专用机械优化设计作业Word文档格式.docx_第19页
第19页 / 共30页
浙江科技学院专用机械优化设计作业Word文档格式.docx_第20页
第20页 / 共30页
亲,该文档总共30页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

浙江科技学院专用机械优化设计作业Word文档格式.docx

《浙江科技学院专用机械优化设计作业Word文档格式.docx》由会员分享,可在线阅读,更多相关《浙江科技学院专用机械优化设计作业Word文档格式.docx(30页珍藏版)》请在冰点文库上搜索。

浙江科技学院专用机械优化设计作业Word文档格式.docx

许用弯曲应力

因螺旋角、材料、要求等与例题相同,各类系数(如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

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2