机械优化设计研究生大作业.doc
《机械优化设计研究生大作业.doc》由会员分享,可在线阅读,更多相关《机械优化设计研究生大作业.doc(12页珍藏版)》请在冰豆网上搜索。
第一题
1.1题目
求函数f(X)=x14-2x12x2-2x1x2+3x12+4x22+4.5x1-4x2+5的极小值,初始点为X(0)=[-2,2]T,误差ε不大于0.001。
注:
此问题为无约束非线性规划问题的求解。
1.2建立数学模型
Findx1,x2
minf(X)=x14-2x12x2-2x1x2+3x12+4x22+4.5x1-4x2+5
初始点X(0)=[-2,2]T,ε≤0.001
1.3运行结果
迭代值
迭代次数
x1
x2
f
1
-0.50000000000000
-0.58333333333333
8.33333333333333
2
-0.56606217616580
0.37068221070812
3.00457834092293
3
-0.65287432092310
0.39898283419758
2.97857158805445
4
-0.65084893915893
0.40135860990393
2.97849714375511
5
-0.65083910731569
0.40135662524523
2.97849714338108
通过牛顿法迭代5次可得出结果,当x1=-0.65083910731569,x2=0.40135662524523时,目标函数最优值fmin=2.97849714338108,且满足。
1.4迭代曲线
1.5检验结果
用Matlab自带优化程序检验
程序为:
>>x0=[-2,2];
[x,fval]=fminsearch('x
(1)^4-5*x
(1)^2*x
(2)-2*x
(1)*x
(2)+4*x
(1)^2+6*x
(2)^2+4.5*x
(1)-4*x
(2)+5',x0)
x=-0.650866586874660.40137142333985
fval=2.97849714628600
经检验用牛顿法进行迭代优化结果是正确的,优化结果达到精度要求,ε≤0.001。
1.6讨论
(1)由以上迭代曲线可知,牛顿法迭代收敛速度很快,本优化经过迭代3次后目标函数值趋于平稳。
也可采用黄金分割法,变尺度法等其他方法优化。
由于本题比较简单,不必采用变尺度法来优化。
(2)采用Matlab编程解决了求导和计算海森阵比较复杂的难题,编程简单方便。
1.7Matlab源程序
functionZY32
formatlong
symsx1x2%定义符号变量x1,x2
f=x1^4-2*x1^2*x2-5*x1*x2+6*x1^2+7*x2^2+4.5*x1-4*x2+5%定义函数f
df=[diff(f,x1);diff(f,x2)]
%diff(f,x1)用于对函数f中变量x1求偏导
%diff(f,x2)用于对函数f中变量x2求偏导
f1=diff(f,x1,2);%diff(f,x1,2)用于对函数f中变量x1求而二次偏导
f2=diff(diff(f,x1),x2);
%diff(diff(f,x1),x2)用于对函数f中变量下x1,x2求偏导
f3=diff(diff(f,x2),x1);
f4=diff(f,x2,2);%diff(f,x2,2)用于对函数f中变量x2求而二次偏导
ddf=[f1,f2;f3,f4];%求函数f的海森阵
x1=-2;x2=2;
td=eval(df);%计算梯度初值
hs=eval(ddf);%计算海森阵初值
%eval命令用于将符号变量转化为数值变量
i=0;
eps=0.1
whileeps>0.01;
i=i+1;
eps=sqrt(td
(1).^2+td
(2).^2);%求梯度的模
x=[x1;x2]-inv(hs)*td;%记录自变量迭代值
x1=x
(1);
x2=x
(2);
xx(i,:
)=x';%记录迭代过程中间值
td=eval(df);
hs=eval(ddf);
last(i)=eval(f);%记录迭代过程中间值
end
disp('迭代次数');
i
xx=xx
fmin=last
figure
(1)
plot(fmin);%画目标函数变化图
gridon;
holdon;
xlabel('迭代次数');
ylabel('f(x)');
title('f(x)函数迭代值');
figure
(2)
plot(xx(:
1));
gridon;
xlabel('迭代次数');
ylabel('x1迭代值');
title('x1变化图');
figure(3)
plot(xx(:
2));
gridon;
xlabel('迭代次数');
ylabel('x2迭代值');
title('x2变化图');
第二题
2.1数学模型
Findx1,x2
minf(X)=2x12+2x22-4x1-6x2
s.t.g1(X)=x1+5x2-5≤0
g2(X)=2x12-x2≤0
g3(X)=-x1≤0
g4(X)=-x2≤0
初始点X(0)=[0,0.75]T,ε=0.001
2.2优化方法
此问题可规结为强约束问题,此题用罚函数法对在求解强约束非线性优化问题求解。
用功能函数constr可以解决此类问题,本题中目标函数是非线性的,约束是线性的。
2.3优化结果
最小目标函数值f=-5.5039,
自变量取值:
X=[0.6589,0.8682]T
验证优化结果正确。
2.4Matlab源程序
在commandwindow输入question2,然后回车即行;
Functionquestions2.m
funf='f=x
(1)^2+4*x
(2)^2-7*x
(1)-5*x
(2);%定义目标函数
fung='g=[x
(1)+5*x
(2)-5;2*x
(1)^2-x
(2)];%定义约束条件
funi=[funffung];%组合矩阵
x0=[0,0];%初值;
options=1;%显示过程
vlb=[00];%下边界x;
vub=[];%无上边界;
[x,options]=constr(funi,x0,options,vlb,vub)
2.5计算结果
迭代次数
目标值f
自变量x1
自变量x1
约束g1
约束g2
约束g3
约束g4
1
1
0
1
0
-1
0
-1
2
-1.0000
-0.0000
1.0000
-1.0000e-008
-1.0000
1.0000e-008
-1
3
-1.0000
0
1.0000
-5.0000e-008
-1.0000
0
-1.0000
4
-10
5
0
0
50
-5
0
5
-12.7500
2.5000
0.5000
0
12
-2.5000
-0.5000
6
-8.6875
1.2500
0.7500
0
2.3750
-1.2500
-0.7500
7
-8.6875
1.2500
0.7500
-1.0000e-008
2.3750
-1.2500
-0.7500
8
-8.6875
1.2500
0.7500
-5.0000e-008
2.3750
-1.2500
-0.7500
9
-5.9365
0.7152
0.4511
-2.0293
0.5720
-0.7152
-0.4511
10
-5.5164
0.6609
0.8678
0
0.0059
-0.6609
-0.8678
11
-5.5164
0.6609
0.8678
1.0000e-008
0.0059
-0.6609
-0.8678
12
-5.5164
0.6609
0.8678
5.0000e-008
0.0059
-0.6609
-0.8678
13
-5.5039
0.6589
0.8682
0
8.5830e-006
-0.6589
-0.8682
14
-5.5039
0.6589
0.8682
1.0000e-008
8.6094e-006
-0.6589
-0.8682
15
-5.5039
0.6589
0.8682
-5.0000e-008
8.5930e-006
-0.6589
-0.8682
16
-5.5039
0.6589
0.8682
0
1.8429e-011
-0.6589
-0.8682
17
-5.5039
0.6589
0.8682
8.2958e-007
2.1864e-006
-0.6589
-0.8682
18
-5.5039
0.6589
0.8682
4.7634e-005
-9.5269e-006
-0.6589
-0.8682
19
-5.5039
0.6589
0.8682
-8.8818e-016
-1.1102e-016
-0.6589
-0.8682
20
-5.4905
0.6565
0.8682
-0.0024
-0.0062
-0.6565
-0.8682
21
-5.5044
0.6589
0.8680
-0.0013
2.6130e-004
-0.6589
-0.8680
22
-5.5039
0.6589
0.8682
-1.0000e-004
0.0000
-0.6589
-0.8682
2.6迭代曲线
2.7讨论
(1)利用Matlab优化工具箱里边的功能函数condtr来优化求解目标函数f,能很快实现优化,达到目标,方便快捷。
(2)由图可见迭代五次达到最低端,10次后趋于平稳。
(3)优化结果满足精度要求ε<0.001。
(4)可见Matlab很容易对目标实现优化,对编程人员要求不高。
只要知道如何使用命令。
第三题