机械优化设计课程设计.docx

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

机械优化设计课程设计.docx

《机械优化设计课程设计.docx》由会员分享,可在线阅读,更多相关《机械优化设计课程设计.docx(24页珍藏版)》请在冰点文库上搜索。

机械优化设计课程设计.docx

机械优化设计课程设计

《械优化设计》程论文

学院电子工程学院

专业机械设计制造及其自动化

学号201012701041

姓名朱振

任课教师黄植功

成绩

阅读教师签名

日期

 

目录

摘要3

关键词3

一、概述3

二、优化方法介绍3

(一)、一维搜索方法3

(二)无约束优化方法5

1)共轭方向的生成6

2)基本算法6

3)改进算法的基本步骤如下7

三、优化设计实例10

1)模型10

2)变量10

3)优化设计源程序10

4)分析结果20

四、课程总结20

《机械优化设计》课程设计论文

摘要:

随着社会经济的迅速发展,机械优化设计作为一门为工程设计提供手段的学科,在这样的时代背景下应运而生。

针对具体的课题,通过一些设计变量而建立起目标函数的过程,称为数学建模;应用优化方法为工程设计寻找出最优解是现代优化设计所研究的主要课题与方向。

关键词:

机械优化设计;设计变量;目标函数;数学模型;优化方法

一、概述优化设计是20世纪60年代初发展起来的一门新学科,它是将最优化原理与计算技术应用于设计领域,为工程设计提供一种重要的科学设计方法的手段。

利用这种新的设计方法,人们就可以从众多的设计方案中寻找出最佳设计方案,从而大大提高设计效率和设计质量。

因此优化设计是现代设计理论和方法的一个重要领域,它已广泛应用于各个工业部门,成为现代工程设计的一个重要手段!

二、优化方法介绍

(一)、一维搜索方法

一维搜索方法可分为两类,一类称为试探法,这类方法是按某种给定的规律来确定区间内插入点的位置,此点位置的确定仅仅按照区间缩短如何加快,而不顾及函数值的分布关系,例如黄金分割法,裴波那契法等。

另一类一维搜索法称作插值法或函数逼近法。

这类方法是根据某些点处的某些信息,如函数值,一阶导数,二阶导数等,构造一个插值函数来逼近原来的函数,用插值函数的极小点作为区间的插入点,这类方法主要有二次插值法,三次插值法等。

在此重点讨论黄金分割法。

黄金分割法适用于[a,b]区间上的任何单谷函数求极小值问题,对函数除要求“单谷”外不作其他要求,甚至可以不连续。

因此,这种方法的适应面相当广。

黄金分割法也是建立在区间消去法原理基础上的试探方法,即在搜索区间[a,b]内适当插入两点α1,α2,并计算其函数值。

α1,α2将区间分为三段,应用函数的单谷性质,通过函数值大小的比较,删去其中一段,使搜索区间得以缩短。

然后再在保留下来的区间上作同样的处置,如此迭代下去,使搜索区间无限缩小,从而得到极小点的数值近似解。

黄金分割法要求插入点α1、α2的位置相对于区间[a,b]两端点具有对称性,即

α1=b-λ﹙b-a﹚

α2=a+λ﹙b-a﹚

其中,λ为待定常数。

图3-6

除对称要求外,黄金分割法还要求在保留下来的区间内再插入一点所形成的区间新三段,与原来区间的三段具有相同的比例分布。

设原区间[a,b]长度为1如图3-6所示,保留下来的区间[a,α2]长度为λ,区间缩短率为λ。

为了保持相同的比例分布,新插入点α3应在λ﹙1-λ﹚位置上,α1在原区间的1-λ位置应相当于在保留区间的λ²位置。

故有

1-λ=λ²

λ²+λ-1=0

取方程正数解,得

λ=(√5-1)/2≈0.618

若保留下来的区间为[α1,b],根据插入点的对称性,也能推得同样的λ值。

所谓的黄金分割是指将一线段划分为两段的方法,使整段长与较长段的长度比值等于较长段与较短段的比值,即

1∶λ=λ∶﹙1-λ﹚

同样算的λ≈0.618。

可见黄金分割法能使得相邻两次搜索区间都具有相同的缩短率0.618,所以黄金分割法又称为0.618法。

1)黄金分割法的搜索过程是:

给出初始搜索区间[a,b]及收敛精度ε,将λ赋以0.618。

2)按坐标点计算公式计算α1和α2,并计算其对应的函数值f(α1),f(α2)。

根据消去法原理缩短搜索区间。

为了能用原来的坐标点计算公式,需进行区间名称的代换,并在保留区间中计算一个新的试验点及其函数值。

4)检查区间是否缩短到足够小和函数值收敛到足够近,如果条件不满足则返回到步骤2。

5)如果条件满足,则取最后2试验点的平均值作为极小点的数值近似解。

黄金分割法的程序框图如图3-7所示。

图3-7

(二)无约束优化方法

前面所举的机械优化设计问题都是在一定的限制条件下追求某一指标为最小,所以它们都属于约束优化问题。

但是有些实际问题,其数学模型本身就是一个无约束优化问题,或者除了在非常接近最终极小值的情况下,都可以按无约束优化问题来解决。

研究约束优化问题的另一个原因是,通过熟悉它的解法可以为研究无约束优化问题打下良好的基础。

第三个原因,约束优化问题的求解可以通过一系列无约束优化方法来达到。

由此可见,无约束优化问题的解法是优化设计方法的基本组成,也是优化方法的基础。

属于无约束优化方法的主要有:

1、最速下降法2、牛顿型法3、共轭方向及共轭方向法4、共轭梯度法5、变尺度法6、坐标轮换法7、鲍威尔法8、单形替换法

下面主要介绍鲍威尔法的原理及应用。

鲍威尔法是直接利用函数值来构造共轭方向的一种共轭方向法。

这种方法是在研究具有正定矩阵G的二次函数

f(x)=1/2xTGx+bTx+c

的极小化问题时形成的。

其基本思想是在不用导数的前提下,在迭代中逐次构造G的共轭方向。

1)共轭方向的生成

设xk、xk+1为从不同点出发,沿着同一方向dj进行一维搜索而得到的两个极小点,如图所示。

根据梯度和等值面相互垂直的特性,dj和xk、xk+1两点处的梯度gg、gg+1之间存在关系

(dj)Tgk=0

(dj)Tgk+1=0

另一方面,对于上述二次函数,其xk、xk+1两点处的梯度可表示为

gk=Gxk+b

gk+1=Gxk+1+b

两式相减得

gk+1-gk=G(xk+1-xk)

因而有

(dj)T(gk+1-gk)=(dj)TG(xk+1-xk)=0

若取方向dk=xk+1-xk,如图4-15所示,则dk和dj对G共轭。

这说明只要沿着dj方向分别对函数作两次一维搜索,得到两个极小值xk和xk+1。

那么这两点的连线所给出的方向就是与一起对G共轭的方向。

对于二维问题,f(x)的等值线为一簇椭圆,A、B为沿x1轴方向上的两个极小值点,分别处于等值线与x1轴方向的切点上,如图4-16所示。

根据上述分析,则A、B两点的连线AB就是与x1轴一起对G共轭的方向。

沿此共轭方向进行一维搜索就可以找到函数f(x)的极小值点x*。

2)基本算法

现在针对二维情况来描述鲍威尔的基本算法,如图4-17所示。

任选一初始点x0,再选两个线性无关的向量,如坐标轴单位向量e1=[10]T和e2=[01]T作为初始搜索方向。

从x0出发,顺次沿e1、e2作一维搜索得点x10、x20,两点连线得一新方向dl=x20-x10

用dl代替e1形成两个线性无关向量e2、dl,作为下一轮迭代的搜索方向。

再从x20出发,沿dl作一维搜索得点x01,作为下一轮迭代的初始点。

从x1出发,顺次沿e2、d1作一维搜索,得到点x11、x21,两点连线得一新方向

d2=x21-x01

x01、x21两点是从不同点x0、x11出发,分别沿d1方向进行一维搜索而得的极小点,所以x01、x21两点连线的方向d2同d1一同对G共轭。

再从x21出发,沿d2作一维搜索得点x2。

因为x2相当于从x0出发分别沿G的两个共轭方向d1、d2进行两次一维搜索而得到的点,所以x2点即是二维问题的极小值点x*

3)改进算法的基本步骤如下:

①给定初始点x0(记作x00),选取初始方向组,它由n个线性无关的向量d10,d20,…,dn0(如n个坐标轴单位向量e1,e2,…,en)所组成,置k←0。

②从x0k出发,顺次沿d1k,d2k,…,dnk作一维搜索得x1k,x2k,…xnk,接着以xnk为起点,沿方向

dkn+1=xnk-x0k

移动一个xnk-x0k的距离,得到

xn+1k=xnk+(xnk-x0k)=2xnk-x0k

x0k、xnk、xn+1k分别称为一轮迭代的始点、终点和反射点。

始点、终点和反射点所对应的函数值分别表示为

F0=f(x0k)

F2=f(xnk)

F3=f(xn+1k)

同时计算各中间点处的函数值,并记为

fi=f(xik)(i=0,1,2,…,n)

因此有F0=f0,F2=fn。

计算n个函数值之差f0-f1,f1-f2,…,fn-1-fn。

记作△i=fi-1-fi(i=1,2,…,n)

其中最大者记为△m=max△i=fm-1-fm

根据是否满足判定条件

F3<F0和(F0-2F2+F3)(F0-F2-△m)2<0.5△m(F0-F3)2来确定是否要对原方向组进行替换。

若不满足判别条件,则下轮迭代仍用原方向组,并以xnk、xn+1k中函数值小者作为下轮迭代的始点。

若满足上述判别条件,则下轮迭代应对原方向组进行替换,将dn+1k补充到原方向组的最后位置,而除掉dmk。

即新方向组为d1k,d2k,…,dm-1k,dm+1k,…,dnk,dn+1k作为下轮迭代的搜索方向。

下轮迭代的始点取为沿dn+1k方向进行一维搜索的极小点x0k+1。

判断是否满足收敛准则。

若满足则取x0k+1为极小点,否则应置k←k+1,返回2,继续进行下一轮迭代。

这样重复迭代的结果,后面加进去的向量都彼此对G共轭,经n轮迭代即可得到一个由n个共轭方向所组成的方向组。

对于2次函数,最多不超过n次就可以找到极小点,而对于一般函数,往往要超过n次才能找到极小点(这里的“n”表示设计空间的维数)。

改进后的鲍威尔法程序框图如下

开始

给定x0、ε

x00←x0;di0←ei

i=n?

△i←f(xi-1k)-f(xik)

xik←xi-1k+αikdik

αik:

minf(xi-1k+αdik)

α

=

i←1

K←0

i←i+1

结束

k←k+1

x0k+1←xn+1k

x0k+1←xnk+αn+1kdn+1k

αn+1k:

minf(xnk+αdn+1k)

α

判别条件是否满足?

x0k+1←xnk

x*←x0k+1

||xnk←x0k||<ε?

dik+1←di+1k(i=m,m+1,…,n)

dik+1←di+1k(i=1,2,…,m-1)

xn+1k←xnk-x0kxn+1k←2xnk-x0k

F2<F3

F0←f(x0k)F2←f(xnk)F3←f(xn+1k)

△i←max△i

三、优化设计实例

用鲍威尔法解决二维问题

1)模型f(x)=4(x1-5)2+(x2-6)2

2)变量x1、x2

3)优化设计源程序

#include"stdio.h"

#include"stdlib.h"

#include"math.h"

doubleobjf(doublex[])

{doubleff;

ff=4*x[0]*x[0]+x[1]*x[1]-40*x[0]-12*x[1]+136;

return(ff);

}

voidjtf(doublex0[],doubleh0,doubles[],intn,doublea[],doubleb[])

{inti;

double*x[3],h,f1,f2,f3;

for(i=0;i<3;i++)

x[i]=(double*)malloc(n*sizeof(double));

h=h0;

for(i=0;i

*(x[0]+i)=x0[i];

f1=objf(x[0]);

for(i=0;i

*(x[1]+i)=*(x[0]+i)+h*s[i];

f2=objf(x[1]);

if(f2>=f1)

{h=-h0;

for(i=0;i

*(x[2]+i)=*(x[0]+i);

f3=f1;

for(i=0;i

{*(x[0]+i)=*(x[1]+i);

*(x[1]+i)=*(x[2]+i);

}

f1=f2;

f2=f3;

}

for(;;)

{h=2*h;

for(i=0;i

*(x[2]+i)=*(x[1]+i)+h*s[i];

f3=objf(x[2]);

if(f2

else

{for(i=0;i

{*(x[0]+i)=*(x[1]+i);

*(x[1]+i)=*(x[2]+i);

}

f1=f2;

f2=f3;

}

}

if(h<0)

for(i=0;i

{a[i]=*(x[2]+i);

b[i]=*(x[0]+i);

}

else

for(i=0;i

{a[i]=*(x[0]+i);

b[i]=*(x[2]+i);

}

for(i=0;i<3;i++)

free(x[i]);

}

doublegold(doublea[],doubleb[],doubleeps,intn,doublexx[])

{inti;

doublef1,f2,*x[2],ff,q,w;

for(i=0;i<2;i++)

x[i]=(double*)malloc(n*sizeof(double));

for(i=0;i

{*(x[0]+i)=a[i]+0.618*(b[i]-a[i]);

*(x[1]+i)=a[i]+0.382*(b[i]-a[i]);

}

f1=objf(x[0]);

f2=objf(x[1]);

do

{if(f1>f2)

{for(i=0;i

{b[i]=*(x[0]+i);

*(x[0]+i)=*(x[1]+i);

}

f1=f2;

for(i=0;i

*(x[1]+i)=a[i]+0.382*(b[i]-a[i]);

f2=objf(x[1]);

}

else

{for(i=0;i

{a[i]=*(x[1]+i);

*(x[1]+i)=*(x[0]+i);}

f2=f1;

for(i=0;i

*(x[0]+i)=a[i]+0.618*(b[i]-a[i]);

f1=objf(x[0]);

}

q=0;

for(i=0;i

q=q+(b[i]-a[i])*(b[i]-a[i]);

w=sqrt(q);

}while(w>eps);

for(i=0;i

xx[i]=0.5*(a[i]+b[i]);

ff=objf(xx);

for(i=0;i<2;i++)

free(x[i]);

return(ff);

}

doubleoneoptim(doublex0[],doubles[],doubleh0,doubleepsg,intn,doublex[])

{double*a,*b,ff;

a=(double*)malloc(n*sizeof(double));

b=(double*)malloc(n*sizeof(double));

jtf(x0,h0,s,n,a,b);

ff=gold(a,b,epsg,n,x);

free(a);

free(b);

return(ff);

}

doublepowell(doublep[],doubleh0,doubleeps,doubleepsg,intn,doublex[])

{inti,j,m;

double*xx[4],*ss,*s;

doublef,f0,f1,f2,f3,fx,dlt,df,sdx,q,d;

ss=(double*)malloc(n*(n+1)*sizeof(double));

s=(double*)malloc(n*sizeof(double));

for(i=0;i

{for(j=0;j<=n;j++)

*(ss+i*(n+1)+j)=0;

*(ss+i*(n+1)+i)=1;

}

for(i=0;i<4;i++)

xx[i]=(double*)malloc(n*sizeof(double));

for(i=0;i

*(xx[0]+i)=p[i];

for(;;)

{for(i=0;i

{*(xx[1]+i)=*(xx[0]+i);

x[i]=*(xx[1]+i);

}

f0=f1=objf(x);

dlt=-1;

for(j=0;j

{for(i=0;i

{*(xx[0]+i)=x[i];

*(s+i)=*(ss+i*(n+1)+j);

}

f=oneoptim(xx[0],s,h0,epsg,n,x);

df=f0-f;

if(df>dlt)

{dlt=df;

m=j;

}

}

sdx=0;

for(i=0;i

sdx=sdx+fabs(x[i]-(*(xx[1]+i)));

if(sdx

{free(ss);

free(s);

for(i=0;i<4;i++)

free(xx[i]);

return(f);

}

for(i=0;i

*(xx[2]+i)=x[i];

f2=f;

for(i=0;i

{*(xx[3]+i)=2*(*(xx[2]+i)-(*(xx[1]+i)));

x[i]=*(xx[3]+i);

}

fx=objf(x);

f3=fx;

q=(f1-2*f2+f3)*(f1-f2-dlt)*(f1-f2-dlt);

d=0.5*dlt*(f1-f3)*(f1-f3);

if((f3

{if(f2<=f3)

for(i=0;i

*(xx[0]+i)=*(xx[2]+i);

else

for(i=0;i

*(xx[0]+i)=*(xx[3]+i);

}

else

{for(i=0;i

{*(ss+(i+1)*(n+1))=x[i]-(*(xx[1]+i));

*(s+i)=*(ss+(i+1)*(n+1));

}

f=oneoptim(xx[0],s,h0,epsg,n,x);

for(i=0;i

*(xx[0]+i)=x[i];

for(j=m+1;j<=n;j++)

for(i=0;i

*(ss+i*(n+1)+j-1)=*(ss+i*(n+1)+j);

}

}

}

voidmain()

{doublep[]={8,9};

doubleff,x[2];

ff=powell(p,0.3,0.001,0.0001,2,x);

printf("x[0]=%f,x[1]=%f,ff=%f\n",x[0],x[1],ff);

printf("学号:

201012701041姓名:

朱振");

getchar();

}

4)分析结果

四、课程总结

优化设计课程的学习,初步掌握了一些对机械工程设计优化的方法,能够应用于机械的设计中。

相信在以后的工作当中,会有所应用。

参考文献《机械优化设计》第四版孙靖民机械工业出版社

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

当前位置:首页 > 经管营销 > 经济市场

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

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