机械优化设计课本中编程实例
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
燕山大学机械优化设计论文
专业:12机械工程
班级:工学部1班
学号:
姓名:
2012年12月05日
摘 要:
机械优化设计是将最优化原理和计算技术应用于设计领域,为工程设计提供一种重要的科学设计方法。机械优化设计包括建立优化设计问题的数学模型和选择恰当的优化方法与程序两方面的内容。由于机械优化设计是应用数学方法寻求机械设计的最优方案,所以首先要根据实际的机械设计问题建立相应的数学模型,即用数学形式来描述实际设计问题。在建立数学模型时,需要用专业知识确定设计的限制条件和所追求的目标,确立各设计变量之间的相互关系等。机械优化设计问题的数学模型可以是解析式,实验数据或经验公式。虽然它们给出的形式不同,但都是反应设计变量之间的数量关系的。MATLAB 是目前国际上最流行的科学与工程计算的软件工具, 它具有强大的数值分析、矩阵运算、信号处理、图形显示、模拟仿真和最优化设计等功能。本文用MATLAB 来解决机械设计中的几个常见的问题。
关键词:MATLAB ;优化;机械设计;软件
1 引 言
近年来发展起来的计算机辅助设计,在引入优化设计方法后,使得在设计过程中既能够不断选择设计参数并评选出最优设计方案,又可以加快设计速度,缩短设计周期。在科学技术发展要求机械产品更新日益缩短的今天,把优化设计方法与计算机辅助设计结合起来,使设计过程完全自动化,已成为设计方法的一个重要趋势。
2 采用MATLAB 软件进行优化设计
2.1.问题描述:
求3682+-=t t f 的最优解
2.1.1规划模型的建立:
目标函数
36102+-=t t f
约束条件
无约束
2.1.2对应的程序:
clc
clear
syms t
f=t^2-10*t+36;
x1=0;
h=2;
f1=subs(f,x1);
x2=x1+h;
f2=subs(f,x2);
f3=f2-1;
t=1;
if (f1-f2)>0
while f3 f3=subs(f,x2+t*h); t=t+1; end x3=x2+(t-1)*h; else f3=f2;f2=f1;t=1;f1=f2-1;x3=x2;x2=x1; while f1 f1=subs(f,x2-t*h); t=t+1; end x1=x2-(t-1)*h; end a=x1; b=x3; e=1e-05; k=0.618; a1=b-k*(b-a); a2=a+k*(b-a); f1=subs(f,a1); f2=subs(f,a2); c=(b-a)/2; while c>e if f1>f2 a=a1;a1=a2; a2=a+k*(b-a); f1=f2; f2=subs(f,a2); t_min=a2; f_min=f2; else b=a2;a2=a1; a1=b-k*(b-a); f2=f1; f1=subs(f,a1); t_min=a1; f_min=f1; end c=(b-a)/2; end t_min f_min 2.1.3运行结果 2.1.4 程序基本原理 此程序运用的是黄金分割法,黄金分割法适用于〔a ,b 〕区间上的任何单谷函数求极小值问题。黄金分割法是建立在区间消去法原理基础上的试探方法,即在搜索区间〔a ,b 〕内插入两点并计算其函数值,将区间分成三段。应用函数的单谷性质,通过函数值大小的比较,删去其中一段,使搜索区间无限缩小,从而得到极小点的数值近似解。 2.1.5 结 论 黄金分割法可以通过最少的试验次数,找到“最佳点”。它是一个一维的搜索方法,并且比较精确,配合计算机MATLAB 软件更能实现求解的快速性和准确性。 2.2.问题描述: 求22121222 1)6182324844949()112()(min -++++-+=x x x x x x x f 的最优解 2.2.1规划模型的建立: 目标函数 221212221)6182324844949()112()(min -++++-+=x x x x x x x f 初始条件:[]T x 1,10= ()33307690=x f 约束条件 无约束 2.2.2对应的程序: syms t1 t2 f=(t1^2+12*t2-1)^2+(49*t1+49*t2+84*t1+2324*t2-681)^2;x0=[1;1] b=symvar(f); n=size(b,2);g=cell(n,1);G=cell(n,n);H0=eye(n,n); for i=1:n g{i,1}=diff(f,b(i)); end for i=1:n %产生海塞矩阵 for j=1:n G{j,i}=diff(g{i},b(j)); end end g0=subs(g,b,x0); %产生在x0点的梯度 d0=H0*g0; a=buchang(x0,d0,f); x1=x0-a*d0; %产生第一个点 xcha=x1-x0; %计算两点之间的距离 dis=mo(xcha);k=0; while dis>1e-5 %收敛条件 g1=subs(g,b,x1); %判断在迭代点是否梯度为0 if g1==0 Gy=subs(G,b,x1); %观察海赛矩阵 break end y0=g1-g0; s0=x1-x0; H1=H0+(s0*s0')/(s0'*y0)-(H0*y0*y0'*H0)/(y0'*H0*y0); d1=H1*g1; a=buchang(x1,d1,f); x2=x1-a*d1; g0=g1;x0=x1;x1=x2;H0=H1; xcha=x1-x0;dis=mo(xcha); x1 %输出每次的迭代点 subs(f,b,x1) %迭代点的函数值 k=k+1 %显示迭代次数 end 2.2.3运行结果