资源描述
合肥工业大学
《机械优化设计》课程实践
研究报告
班 级:
学 号:
姓 名:
授课教师:
日 期: 2016年 11月 12 日
目录
1. λ=0.618的证明、一维搜索程序作业
2. 单位矩阵程序作业
3. 注释最佳再现给定运动规律连杆机构优化设计问题模型子程序
4. 连杆机构问题 + 自行选择小型机械设计问题或其他工程优化问题
(1)分析优化对象,根据设计问题的要求,选择设计变量,确立约束条件,建立目标函数,建立优化设计的数学模型并编制问题程序;
(2)选择适当的优化方法,简述方法原理,进行优化计算;
(3)进行结果分析,并加以说明。
5. 课程实践心得体会
1. λ=0.618的证明、一维搜索程序作业
1.1证明:
a α1 α2 b
1-λ
λ
1
a α3 α1 α2
λ(1-λ)
λ2
λ
黄金分割法要求插入点 α1,α2 的位置相对于区间[a,b]两端点具有对称性,即
α1=b-λ(b-a)
α2=b+λ(b-a)
其中λ 为待定常数。
除了对称要求外,黄金分割法还要求在保留下来的区间内再插入一点,所形成的新三段与原来区间的三段具有相同的比例分布,故有
1-λ=λ2
取方程正数解,得
λ=5-12≈0.618
1.2一维搜索C语言程序:(以正弦函数y=sinx为例)
#include<stdio.h>
#include<math.h>
int main()
{
double a,b,c=0.618,x[3],y[3],d;
printf("请输入区间[a,b]的值以及精度:\n");
scanf("%lf,%lf,%lf",&a,&b,&d);
x[1]=b-c*(b-a);
x[2]=a+c*(b-a);
y[1]=sin(x[1]);
y[2]=sin(x[2]);
do{ if(y[1]>y[2])
{ a=x[1];x[1]=x[2];y[1]=y[2];
x[2]=a+c*(b-a);
y[2]=sin(x[2]);
}
else
{ b=x[2];x[2]=x[1];y[2]=y[1];
x[1]=b-c*(b-a);
y[1]=sin(x[1]);
}
}
while(fabs((b-a)/b)>d);
x[0]=(a+b)/2;
y[0]=sin(x[0]);
printf("极小点x*=%lf\n",x[0]);
printf("极小值y=%lf\n",y[0]);
}
C语言程序运行结果:
2. 单位矩阵程序作业
2.1 C语言程序:
#include<stdio.h>
int main()
{
int i,j,N,y;
printf("请输入单位矩阵阶数 N: ");
scanf("%d",&N);
for (i=1;i<=N;i++)
for (j=1;j<=N;j++)
{
if (i==j)
y=1;
else
y=0;
printf("%d ",y);
if (j==N)
printf("\n");
}
}
C语言程序运行结果:
2.2 matlab程序:
clc;
clear all;
N=input('请输入单位矩阵阶数 N:');
eye(N)
matlab程序运行结果:
3.请解读注释以下最佳再现给定运动规律连杆机构优化设计问题模型子程序(FORTRAN语言)
C 连杆机构问题函数子程序
C 目标函数==============
SUBROUTINE FFX(N,X,FX) ;计算X点的目标函数值的子程序
C ======================
DIMENSION X(N) ;是数组要声称
COMMON /ONE/ I1,I2,I3,I4,NFX,I6 ;公用语句,程序段传输数据
NFX=NFX+1 ;目标函数子程序调用次数计数器
P0=ACOS(((1.0+X(1))**2-X(2)**2+25.0)/(10.0*(1.0+X(1))))
Q0=ACOS(((1.0+X(1))*+*2-X(2)**2-25.0)/(10.0*X(2)))
T=90.0*3.1415926/(180.0*30.0) ;将考察范围输入角30等分后每一份的值
FX=0.0 ;连加先置0
DO 10 K=0,30 ;循环程序入口,循环30次
PI=P0+K*T ;计算每一次循环后的输入角
QE=Q0+2.0*(PI-P0)**2/(3.0*3.1415926)
D=SQRT(26.0-10.0*COS(PI))
AL=ACOS((D*D+X(2)*X(2)-X(1)*X(1))/(2.0*D*X(2)))
BT=ACOS((D*D+24.0)/(10.0*D))
IF (PI.GE.0.0 .AND. PI.LT.3.1415926) THEN
QI=3.1415926-AL-BT ;输入角在0到pi的实际输出角
ELSE
QI=3.1415926-AL+BT ;输入角在大于pi的实际输出角
ENDIF
IF(K.NE.0 .OR. k.NE.30) THEN
FX=FX+(QI-QE)**2*T ;数值积分的非首点,非末点
ELSE
FX=FX+(QI-QE)**2*T/2.0 ;数值积分的首端点,末端点
ENDIF
10 CONTINUE
END
C 不等约束=================
SUBROUTINE GGX(N,KG,X,GX) ;计算X点的KG个GX的值的子程序
C =========================
DIMENSION X(N),GX(KG)
GX(1)=1.0-X(1) ;L1<=L2
GX(2)=1.0-X(2) ;L1<=L3
GX(3)=1.0-5.0 ;L1<=L4
GX(4)=(1.0+X(1))-(X(2)+5.0) ;(L1+L2)<=(L3+L4)
GX(5)=(1.0+X(2))-(X(1)+5.0) ;(L1+L3)<=(L2+L4)
GX(6)=(1.0+5.0)-(X(1)+X(2)) ;(L1+L4)<=(L3+L2)
GX(7)=-(1.4142*X(1)*X(2)-X(1)**2-X(2)**2)-16.0 ;大于最小传动角
GX(8)=-(X(1)**2+X(2)**2+1.4142*X(1)*X(2))+36.0 ;小于最大传动角
END
C 等式约束=================
SUBROUTINE HHX(N,KH,X,HX) ;计算X点的KH个HX的值的子程序
C =========================
DIMENSION X(N),HX(KH)
X(1)=X(1) ;虚写一句
END
4. 连杆机构问题+自选问题
4.1连杆机构问题
设计一曲柄摇杆机构,要求曲柄从转到=+时,摇杆的转角最佳再现已知的运动规律:=+且已知=1,=5,为极位角,其传动角允许在50°120°范围内变化。
图.曲柄摇杆机构
(1)设计变量
已知=1,=5且和不是独立参数,
=arccos
=arccos
所以还问题只有两个独立参数和,因此设计变量为
X==
(2)目标函数
将输入角分成30等分,得目标函数的表达式
式中——当时的机构实际输出角,其计算公式为=
式中:
=arccos=arccos
= arccos=arccos
=
=
为当时的理想输出角,其值由下式计算
=+
(3)约束条件
由曲柄存在条件和传动角条件可得约束条件为:
(4)数据输入
(5)结果
4.2自选问题
要制作500套钢筋,每套钢筋由3.5m,3.0 m和1.6m三种不同长度的钢筋各一根组成,它们的材质和直径均相同。目前在市场上采购到的同类钢筋的长度每根均为8.0 m,问应购进多少根才能满足需要?
下料方案:
方式一
方式二
方式三
方式四
方式五
方式六
3.5m
2
1
1
0
0
0
3.0m
0
1
0
2
1
0
1.6m
0
0
2
1
3
5
设方式1-6次数分别采用了x1,x2,x3,x4,x5,x6次,则
min(x1+x2+x3+x4+x5+x6 )
s.t. g1(x)=500-2x1-x2-x3<=0
g2(x)=500-x2-2x4-x5<=0
g3(x)=500-2x3-x4-3x5-5x6<=0
g4(x)=-x1<=0
g5(x)=-x2<=0
g6(x)=-x3<=0
g7(x)=-x4<=0
g8(x)=-x5<=0
g9(x)=-x6<=0
matlab整数线性规划程序:
clc
clear all
f=[1,1,1,1,1,1]; %目标函数系数
A=[-2 -1 -1 0 0 0;
0 -1 0 -2 -1 0;
0 0 -2 -1 -3 -5];%约束不等式系数
b=[-500;-500;-500];
lb=zeros(6,1); %变量下限为0
intcon = 6;
[x,fval]=intlinprog(f,intcon,A,b,[],[],lb)
结果:
因此,至少需要550根才能满足需要,切割方案为250次方式一,250次方式四,50次方式六。
5. 课程实践心得体会
机械优化设计是适应生产现代化要求发展起来的,是一门崭新的学科。它是在现代机械设计理论的基础上提出的一种更科学的设计方法,它可使机械产品的设计质量达到更高的要求。因此,在加强现代机械设计理论研究的同时,还要进一步加强最优设计数学模型的研究,以便在近代数学、力学和物理学的新成就基础上,使其更能反映客观实际。同时机械优化设计的研究还必须与工程实践、数学力学理论、计算技术和电子计算机的应用等紧密联系起来,才能具有更广阔的发展前景。
在学习这么课程之前,我已经有了一些C语言基础,也自学了一段时间的matlab,对编程也是比较感兴趣的,但总觉得差了些什么。而老师上课讲的优化设计的那些算法,让我醍醐灌顶,要掌握好原理,对编程有莫大的帮助。每次遇到一个新的例子,应该试着自己敲敲代码,熟能生巧。优化设计这门课,让我对编程的热爱程度又提升了一个层次。
最后,真的特别感谢老师的耐心授课,我真的受益匪浅!
12
展开阅读全文