[大谦MATLAB,dqmatlab点com]
【例6】试设计一个压缩圆柱螺旋弹簧,要求其质量最小。弹簧材料为65Mn,最大工作载荷Pmax=40N,最小工作载荷为0N,载荷变化频率fr = 25Hz,弹簧寿命为104h,弹簧钢丝直径d的取值范围为1~4mm,中径D2的取值范围为10~30mm,工作圈数n不应小于4.5圈,弹簧旋绕比C不应小于4,弹簧一端固定,一端自由,工作温度为50℃,弹簧变形量不小于10mm。
本题的优化目标是使弹簧质量最小,弹簧的质量可以表示为
在上式中:\(\gamma\)—— 弹簧材料的密度,对于钢材\(\gamma\) =7.8106kg/mm3;
n—— 工作圈数;
n2—— 死圈数,常取n2=1.5~2.5,这里取n2=2;
D2—— 弹簧中径(mm);
d—— 弹簧钢丝直径(mm)。
将已知参数代入公式中,进行整理以后得到目标函数为
根据弹簧性能和结构上的要求,可写出问题的约束条件:
(1)强度条件
(2)刚度条件
(3)稳定性条件
(4)不发生共振现象,要求
(5)弹簧旋绕比的限制
(6)对d, n, D2的限制
且应取标准值,即1.0, 1.2, 1.6, 2.0, 2.5, 3.0, 3.5, 4.0等。
由上可知,该弹簧的优化设计是一个三维的约束优化问题,其数学模型为
取初始设计参数为X(0)=[2.0, 5.0, 25.0]T
首先,编写目标函数的M文件fmincono.m,返回x处的函数值f。
function f = myfun(x)
f = 0.192457*1e-4*( x(2)+2)*x(1)^2 * x(3);
由于在约束条件中有非线性约束,所以需要编写一个描述非线性约束条件的M文件fminconc.m:
function [c,ceq] = mycon(x)
c(1)=350-163*x(1)^( -2.86)*x(3)^0.86;
c(2)=10-0.4*0.01*x(1)^( -4)*x(2)*x(3)^3;
c(3)=(x(2)+1.5)*x(1)+0.44*0.01*x(1)^( -4)*x(2)*x(3)^3-3.7*x(3);
c(4)=371-0.356*1e6*x(1)*x(2)^( -1)*x(3)^( -2);
c(5)=4-x(3)/x(1);
ceq=0;
然后,设置线性约束的系数:
>> A=[-1 0 0
1 0 0
0 -1 0
0 1 0
0 0 -1
0 0 1];
>> b=[-1;4; -4.5;50; -10;30];
下一步给定初值,给定变量的下限约束,并调用优化过程。
>> x0 = [2.0; 5.0; 25.0];
>> lb=zeros(3,1);
>> [x,fval,exitflag,output]=fmincon(@fmincono,x0,A,b,[],[], lb,[],@fminconc)
计算结果为:
x =
1.0000
4.5001
10.0001
fval =
0.0013
exitflag =
1
output =
包含以下字段的 struct:
iterations: 27
funcCount: 131
constrviolation: 0
stepsize: 6.9192e-05
algorithm: 'interior-point'
firstorderopt: 1.6000e-08
cgiterations: 5
message: 'Local minimum found that satisfies the constraints….'
bestfeasible: [1×1 struct]
所以,当弹簧钢丝直径d、工作圈数n及中径D2分别取1.0000、4.5001和10.0001时,弹簧质量最小,为1.3克。