合肥工业大学 《机械优化设计》课程实践
研究报告
班 级:机械设计制造及其自动化2009-5班 学 号: 20090495 姓 名: 王** 授课老师: 王卫荣 日 期: 2012年5月29日
目录
机械优化设计研究报告概述 2 1 作业一 3 1.1题目(1) 3 1.2求解步骤(1) 3 1.3结果(1) 3 1.4题目(2) 3 1.4求解步骤(2) 3 1.5结果(2) 5 2 作业二 5 2.1题目 5 2.2求解步骤 5 2.3结果 6 3作业三 6 3.1题目 6 3.2求解步骤 7 3.3结果 8 4 心得体会 9
机械优化设计研究报告概述
优化设计是20世纪60年代初发展起来的一门新学科,它是将最优化原理和计算技术应用于设计领域,为工程设计提供一种重要的科学设计方法。利用这种新的设计方法,人们就可以从众多的设计方案中寻找出最佳设计方案,从而大大提高设计效率和质量。因此优化设计是现代设计理论和方法的一个重要领域,它已广泛应用于各个工业部门。
优化方法的应用领域很多,发展也很迅速。今年来发展起来的计算机辅助设计(CAD),在引入优化设计方法后,使得在设计过程中既能够不断选择设计参数并评选出最优化设计方案,又可以加快设计速度,缩短设计周期。在科学技术发展要求机械产品更新周期日益缩短的今天,把优化设计方法与计算机辅助设计结合起来,使设计过程完全自动化,已成为设计方法的一个重要发展趋势。
通过本学期的课程学习,我们已经掌握了一些常用的优化方法的原理和计算过程的理论知识。本次实践是巩固学到的理论知识的绝佳方法,通过实践,学生可以将理论知识运用到具体问题当中,培养分析问题和解决问题的能力,同时也能学到优化方法的操作步骤。
1作业一
1.1题目(1)
以与课本51页相反的方向证明0.618法。 a 1 2 b
1.2求解步骤(1)
在区间[a,b]内插入两点1、2,其位置对于区间[a,b]两端点具有对称性,即
1b(ba)
(1-1)2a(ba)
其中,是待定常数。由几何关系知,
(1)(1) 图1-1
即 10 (1-2) 取方程正数解,得
2
1
0.618 2
1.3结果(1)
以上证明步骤与课本51页证明方法中所删去的区间不同,但最终结果相同,均可证明出0.618。
1.4题目(2)
编制用0.618法求解函数f(x)(x2)3在区间[0,5]上极小值的程序。
2
1.4求解步骤(2)
这属于一维搜索的问题,0.618法的 程序框图如图1-2所示。
根据程序框图的求解思想,利用C语 言编制0.618法的程序如下:
图1-2
#include void main(void) {
float a,b,c,d,a1,a2,y1,y2,x,y; c=0.01; d=0.618; a=0.0; b=10.0;
printf(
/*................赋初值..................*/ y1=(a1-2)*(a1-2)+3; y2=(a2-2)*(a2-2)+3;
/*................求初值..................*/
while(((b-a)/b)>=c&&((y2-y1)/y2>=c||-((y2-y1)/y2)>=c)) {
if(y1>=y2) {
a=a1; a1=a2; y1=y2;
a2=a+d(b-a);
y2=(a2-2)*(a2-2)+3; } else {
b=a2; a2=a1; y2=y1;
a1=b-d(b-a);
y1=(a1-2)*(a1-2)+3; } }
/*................循环体.................*/ x=(a+b)/2;
y=(x-2)*(x-2)+3; printf(
/*................最优解.................*/ }
1.5结果(2)
将以上程序编译,连接,运行后的结果如下所示。
2作业二
2.1题目
编制能生成n阶单位矩阵的程序,要求n由人工输入。
2.1求解步骤
思路:利用C语言程序编程,首先是输入n。n阶单位矩阵在C语言程序中就相当于是一个二维数组a[i][j],当i=j时,a[i][j]=1;当i!=j时,a[i][j]=0。按此思路编程时要定义一个二维数组,并且i=j=n,需要在程序运行时定义i,j,也就是说二维数组[]中的数是个变量,但是在C中要求定义数组时,[]中必须为定值常量或表达式,因此,这种思路缺乏可操作性。
现采用以下思路,即利用两个for循环语句,构成嵌套循环格式,并且两个循环次数相同。每行输出n个数后换行,一共输出n列,即能形成n阶矩阵。当行数i等于列数j时,输出1,否则输出0,即能输出n阶单位矩阵。
程序如下: #include void main(void) {
int i,j,n;
printf(
for(j=0;j
if(i==j)
printf(
}
printf(
2.3结果
例如输入n=5,则运行结果如下:
3作业三
3.1题目
试对图3-1所示主轴进行优化设计,已知主轴内劲d30mm,外力
F15000N,
许用挠度y00.05mm。设计变量数n=3,约束函数个数m=5,收敛精度
1105,2105,初始惩罚因子r02,惩罚因子缩减系数c=0.2。
图3-1
3.2求解步骤
当主轴的材料选定时,其设计方案由四个设计变量决定。即孔径d、外径D、跨距l以及外伸端长度a。由于机床主轴内孔常用于通过待加工的棒料,其大小由机床型号决定,不能作为设计变量。故设计变量取为
TT
xx1,x2,x3l,D,a
机床主轴优化设计的目标函数则为
fx
式中——材料密度。
12x1x3x2d2 4
再确定约束条件。主轴的刚度是一个重要性能指标,其外伸端的挠度y不得超过规定值y0 据此建立性能约束。
gxyy00
在外力F给定的情况下,y是设计变量x的函数,其值按下式计算
Fa2lay 3EI
式中
I
则
D64
4
d4
2
x1x364Fx3
gxy00 44
3Ex2d
此外,通常还应考虑主轴内最大应力不得超过许用应力。由于机床主轴对刚度要求比较高,当满足刚度要求时,强度尚有相当富裕,因此应力约束条件可不考虑。边界约束条件为设计变量的取值范围,即
lminllmaxDminDDmax aminaamax
综上所述,将所有约束函数规格化,主轴优化设计的数学模型可表示为
12
minfxx1x3x2d2
42
x1x364Fx3
g1x/y010 4
3Ex2d4
g2x1x1/lmin0
g3x1x2/Dmin0g4xx2/Dmax10 g5x1x3/amin0
这里未考虑两个边界约束:x1lmax和x3amax,这是因为无论从小减小伸出端挠度上看,还是从降低主轴重量上看,都要求主轴跨距x1、伸出端长度x3往小变化,所以对其上限可以不作限制。这样可以减少一些不必要的约束,有利于优化计算。
该问题利用惩罚函数法求解,编制程序段如下。 C ====================== SUBROUTINE FFX(N,X,FX) C ====================== DIMENSION X(N) COMMON /ONE/ ITE,KTE,ILI,NPE,NFX,NGR NFX=NFX+1 FX=PE*p*(X(1)+X(3))*(X(2)*X(2)-d*d)/4 RETURN END
C ========================= SUBROUTINE GGX(N,KG,X,GX) C ========================= DIMENSION X(N),GX(KG) GX(1)=64X(3)*X(3)*(X(1)+X(3))/3*E*PE*(X(2)^4-d^4)*Y(0)-1 GX(2)=1-X(1)/L(MIN) GX(3)=1-X(2)/D(MIN) GX(4)=X(2)/D(MAX)-1 GX(5)=1-X(3)/A(MIN) RETURN END
C ========================= SUBROUTINE HHX(N,KH,X,HX) C ========================= DIMENSION X(N),HX(KH) X(1)=X(1) RETURN END
3.3结果
最终求得最优解
x*300.036,75.244,90.001
T
fx11.377
4心得体会
通过三次作业机会的实践,增强了我分析问题,解决问题的能力。在此之前,我们遇到的问题大多都是已经数学化了的问题,题目给出式子,然后求解,这样的题目,或许只能考考我们演算技巧而已,并不能考出我们的解决问题的能力。而只有独立的分析实际中的具体问题,然后将其数学化,建立数学模型,再选用合适的解决方法,求解答案。这样的过程或许才能更好的培养或者考察学生的理论知识水平和实践能力。
解决具体的实际问题,思路要灵活。面对不同的问题,可能存在着多种解决方案,选其最优的方案可能效率和效果要更为显著。此外,解决问题的方法尽量简洁,例如在编制n阶矩阵的程序时,我最初的思路是利用二维数组,但由于定义数组元素个数时出现了问题,即若定义为固定数值,则n就会有取值范围,适用性就会下降,如果每次都要修改原程序则程序的操作性不好,因此就舍弃了这种思路。后来用更为直观的方法,想象n阶单位矩阵就是n行n列的以组数,只要按照一定的规则,每行每列的依次输出数字即可,显然这样的解决方法是可行的。
实践是巩固所学理论知识的很好的方法,课本上学到的理论是刀,如果不去用,则会生锈,只有经常运用到实际问题中去,才会真正的掌握所学到的。很感谢王老师能采用这种教学方法来激发学生们的研究问题的兴趣和解决问题的能力。
合肥工业大学 《机械优化设计》课程实践
研究报告
班 级:机械设计制造及其自动化2009-5班 学 号: 20090495 姓 名: 王** 授课老师: 王卫荣 日 期: 2012年5月29日
目录
机械优化设计研究报告概述 2 1 作业一 3 1.1题目(1) 3 1.2求解步骤(1) 3 1.3结果(1) 3 1.4题目(2) 3 1.4求解步骤(2) 3 1.5结果(2) 5 2 作业二 5 2.1题目 5 2.2求解步骤 5 2.3结果 6 3作业三 6 3.1题目 6 3.2求解步骤 7 3.3结果 8 4 心得体会 9
机械优化设计研究报告概述
优化设计是20世纪60年代初发展起来的一门新学科,它是将最优化原理和计算技术应用于设计领域,为工程设计提供一种重要的科学设计方法。利用这种新的设计方法,人们就可以从众多的设计方案中寻找出最佳设计方案,从而大大提高设计效率和质量。因此优化设计是现代设计理论和方法的一个重要领域,它已广泛应用于各个工业部门。
优化方法的应用领域很多,发展也很迅速。今年来发展起来的计算机辅助设计(CAD),在引入优化设计方法后,使得在设计过程中既能够不断选择设计参数并评选出最优化设计方案,又可以加快设计速度,缩短设计周期。在科学技术发展要求机械产品更新周期日益缩短的今天,把优化设计方法与计算机辅助设计结合起来,使设计过程完全自动化,已成为设计方法的一个重要发展趋势。
通过本学期的课程学习,我们已经掌握了一些常用的优化方法的原理和计算过程的理论知识。本次实践是巩固学到的理论知识的绝佳方法,通过实践,学生可以将理论知识运用到具体问题当中,培养分析问题和解决问题的能力,同时也能学到优化方法的操作步骤。
1作业一
1.1题目(1)
以与课本51页相反的方向证明0.618法。 a 1 2 b
1.2求解步骤(1)
在区间[a,b]内插入两点1、2,其位置对于区间[a,b]两端点具有对称性,即
1b(ba)
(1-1)2a(ba)
其中,是待定常数。由几何关系知,
(1)(1) 图1-1
即 10 (1-2) 取方程正数解,得
2
1
0.618 2
1.3结果(1)
以上证明步骤与课本51页证明方法中所删去的区间不同,但最终结果相同,均可证明出0.618。
1.4题目(2)
编制用0.618法求解函数f(x)(x2)3在区间[0,5]上极小值的程序。
2
1.4求解步骤(2)
这属于一维搜索的问题,0.618法的 程序框图如图1-2所示。
根据程序框图的求解思想,利用C语 言编制0.618法的程序如下:
图1-2
#include void main(void) {
float a,b,c,d,a1,a2,y1,y2,x,y; c=0.01; d=0.618; a=0.0; b=10.0;
printf(
/*................赋初值..................*/ y1=(a1-2)*(a1-2)+3; y2=(a2-2)*(a2-2)+3;
/*................求初值..................*/
while(((b-a)/b)>=c&&((y2-y1)/y2>=c||-((y2-y1)/y2)>=c)) {
if(y1>=y2) {
a=a1; a1=a2; y1=y2;
a2=a+d(b-a);
y2=(a2-2)*(a2-2)+3; } else {
b=a2; a2=a1; y2=y1;
a1=b-d(b-a);
y1=(a1-2)*(a1-2)+3; } }
/*................循环体.................*/ x=(a+b)/2;
y=(x-2)*(x-2)+3; printf(
/*................最优解.................*/ }
1.5结果(2)
将以上程序编译,连接,运行后的结果如下所示。
2作业二
2.1题目
编制能生成n阶单位矩阵的程序,要求n由人工输入。
2.1求解步骤
思路:利用C语言程序编程,首先是输入n。n阶单位矩阵在C语言程序中就相当于是一个二维数组a[i][j],当i=j时,a[i][j]=1;当i!=j时,a[i][j]=0。按此思路编程时要定义一个二维数组,并且i=j=n,需要在程序运行时定义i,j,也就是说二维数组[]中的数是个变量,但是在C中要求定义数组时,[]中必须为定值常量或表达式,因此,这种思路缺乏可操作性。
现采用以下思路,即利用两个for循环语句,构成嵌套循环格式,并且两个循环次数相同。每行输出n个数后换行,一共输出n列,即能形成n阶矩阵。当行数i等于列数j时,输出1,否则输出0,即能输出n阶单位矩阵。
程序如下: #include void main(void) {
int i,j,n;
printf(
for(j=0;j
if(i==j)
printf(
}
printf(
2.3结果
例如输入n=5,则运行结果如下:
3作业三
3.1题目
试对图3-1所示主轴进行优化设计,已知主轴内劲d30mm,外力
F15000N,
许用挠度y00.05mm。设计变量数n=3,约束函数个数m=5,收敛精度
1105,2105,初始惩罚因子r02,惩罚因子缩减系数c=0.2。
图3-1
3.2求解步骤
当主轴的材料选定时,其设计方案由四个设计变量决定。即孔径d、外径D、跨距l以及外伸端长度a。由于机床主轴内孔常用于通过待加工的棒料,其大小由机床型号决定,不能作为设计变量。故设计变量取为
TT
xx1,x2,x3l,D,a
机床主轴优化设计的目标函数则为
fx
式中——材料密度。
12x1x3x2d2 4
再确定约束条件。主轴的刚度是一个重要性能指标,其外伸端的挠度y不得超过规定值y0 据此建立性能约束。
gxyy00
在外力F给定的情况下,y是设计变量x的函数,其值按下式计算
Fa2lay 3EI
式中
I
则
D64
4
d4
2
x1x364Fx3
gxy00 44
3Ex2d
此外,通常还应考虑主轴内最大应力不得超过许用应力。由于机床主轴对刚度要求比较高,当满足刚度要求时,强度尚有相当富裕,因此应力约束条件可不考虑。边界约束条件为设计变量的取值范围,即
lminllmaxDminDDmax aminaamax
综上所述,将所有约束函数规格化,主轴优化设计的数学模型可表示为
12
minfxx1x3x2d2
42
x1x364Fx3
g1x/y010 4
3Ex2d4
g2x1x1/lmin0
g3x1x2/Dmin0g4xx2/Dmax10 g5x1x3/amin0
这里未考虑两个边界约束:x1lmax和x3amax,这是因为无论从小减小伸出端挠度上看,还是从降低主轴重量上看,都要求主轴跨距x1、伸出端长度x3往小变化,所以对其上限可以不作限制。这样可以减少一些不必要的约束,有利于优化计算。
该问题利用惩罚函数法求解,编制程序段如下。 C ====================== SUBROUTINE FFX(N,X,FX) C ====================== DIMENSION X(N) COMMON /ONE/ ITE,KTE,ILI,NPE,NFX,NGR NFX=NFX+1 FX=PE*p*(X(1)+X(3))*(X(2)*X(2)-d*d)/4 RETURN END
C ========================= SUBROUTINE GGX(N,KG,X,GX) C ========================= DIMENSION X(N),GX(KG) GX(1)=64X(3)*X(3)*(X(1)+X(3))/3*E*PE*(X(2)^4-d^4)*Y(0)-1 GX(2)=1-X(1)/L(MIN) GX(3)=1-X(2)/D(MIN) GX(4)=X(2)/D(MAX)-1 GX(5)=1-X(3)/A(MIN) RETURN END
C ========================= SUBROUTINE HHX(N,KH,X,HX) C ========================= DIMENSION X(N),HX(KH) X(1)=X(1) RETURN END
3.3结果
最终求得最优解
x*300.036,75.244,90.001
T
fx11.377
4心得体会
通过三次作业机会的实践,增强了我分析问题,解决问题的能力。在此之前,我们遇到的问题大多都是已经数学化了的问题,题目给出式子,然后求解,这样的题目,或许只能考考我们演算技巧而已,并不能考出我们的解决问题的能力。而只有独立的分析实际中的具体问题,然后将其数学化,建立数学模型,再选用合适的解决方法,求解答案。这样的过程或许才能更好的培养或者考察学生的理论知识水平和实践能力。
解决具体的实际问题,思路要灵活。面对不同的问题,可能存在着多种解决方案,选其最优的方案可能效率和效果要更为显著。此外,解决问题的方法尽量简洁,例如在编制n阶矩阵的程序时,我最初的思路是利用二维数组,但由于定义数组元素个数时出现了问题,即若定义为固定数值,则n就会有取值范围,适用性就会下降,如果每次都要修改原程序则程序的操作性不好,因此就舍弃了这种思路。后来用更为直观的方法,想象n阶单位矩阵就是n行n列的以组数,只要按照一定的规则,每行每列的依次输出数字即可,显然这样的解决方法是可行的。
实践是巩固所学理论知识的很好的方法,课本上学到的理论是刀,如果不去用,则会生锈,只有经常运用到实际问题中去,才会真正的掌握所学到的。很感谢王老师能采用这种教学方法来激发学生们的研究问题的兴趣和解决问题的能力。