优化设计作业.docx
- 文档编号:7483997
- 上传时间:2023-01-24
- 格式:DOCX
- 页数:14
- 大小:165.46KB
优化设计作业.docx
《优化设计作业.docx》由会员分享,可在线阅读,更多相关《优化设计作业.docx(14页珍藏版)》请在冰豆网上搜索。
优化设计作业
优化设计及matlab程序设计
一、优化设计题目
15、目标函数:
要求:
分别采用1)阻尼牛顿法;2)共轭梯度法;3)变尺度法等3种方法进行求解
二、牛顿阻尼法
1、阻尼牛顿法流程图
开始
给定
、ε
k←0
←-
←
+
:
minf
是否
结束
2.阻尼牛顿法命令流
X0=input('请输入迭代初向量X0=\n');
n=1;
eps=input('请输入精度eps=\n');
symsx1x2x3;
f=x1^2+2*x2^2+2*x3^2+0.5*x1*x2-2*x1*x3+2*x2*x3+3*x1+2*x2+2;
df=[diff(f,x1);diff(f,x2);diff(f,x3)];%df表示梯度表达式
G=[diff(df
(1),x1)diff(df
(1),x2)diff(df
(1),x3);
diff(df
(2),x1)diff(df
(2),x2)diff(df
(2),x3);
diff(df(3),x1)diff(df(3),x2)diff(df(3),x3)]%G表示海森矩阵表达式
while
(1)
df0=subs(df,[x1;x2;x3],X0);
H=subs(G,[x1;x2;x3],X0);%H表示海森矩阵
fprintf('第%d次迭代:
\n',n)
fprintf('输出海森矩阵\n')
disp(H)
df02=inv(H);%df02表示海森矩阵的逆矩阵
fprintf('输出海森矩阵的逆矩阵\n');
disp(df02)
d0=-df02*df0;
symsa;
X1=X0+d0*a;%a表示最优步长
f1=subs(f,[x1;x2;x3],X1);
da=eval(diff(f1,a));
digits(5)
a=vpa(solve(da,a));
fprintf('输出最优步长因子a%d:
\n',n)
disp(a)
X1=X0+d0*a;
eps1=norm(X1-X0);
if(eps1>=eps)
X0=X1;
n=n+1;
else
break;
end
end
fprintf('\n运用阻尼牛顿法经过%d迭代次后得到极小点X及极小值f为:
\n',n);
X=X1
f=subs(f,[x1;x2;x3],X)
3.阻尼牛顿法命令流运行结果
请输入迭代初向量X0=
[1;1;1]
请输入精度eps=0.02
G=
[2,1/2,-2]
[1/2,4,2]
[-2,2,4]
第1次迭代:
输出海森矩阵
2.00000.5000-2.0000
0.50004.00002.0000
-2.00002.00004.0000
输出海森矩阵的逆矩阵
4.0000-2.00003.0000
-2.00001.3333-1.6667
3.0000-1.66672.5833
输出最优步长因子a1:
1.0
第2次迭代:
输出海森矩阵
2.00000.5000-2.0000
0.50004.00002.0000
-2.00002.00004.0000
输出海森矩阵的逆矩阵
4.0000-2.00003.0000
-2.00001.3333-1.6667
3.0000-1.66672.5833
输出最优步长因子a2:
0.0
运用阻尼牛顿法经过2迭代次后得到极小点X及极小值f为:
X=
-8.0
3.3333
-5.6667
f=-6.6667
三、共轭梯度法
1.共轭梯度法流程图
2.共轭梯度法命令流
X0=input('请输入初始迭代点X0(以列向量形式表示):
X0=');
e=input('请输入允许的误差:
e=');
symsx1x2x3
t=1;
n=3;
f=x1^2+2*x2^2+2*x3^2+0.5*x1*x2-2*x1*x3+2*x2*x3+3*x1+2*x2+2;
df=[diff(f,x1);diff(f,x2);diff(f,x3)];
df0=subs(df,[x1;x2;x3],X0);
s0=-df0;
k=0;
while
(1)
symsa
X1=X0+a*s0;
f1=subs(f,[x1;x2;x3],X1);
da=eval(diff(f1,a));
a=vpa(solve(da,a))
%f2=inline(f1);
%a=fminbnd(f2,-100,100)%fminbnd函数求解最小值
X1=X0+a*s0
df1=subs(df,[x1;x2;x3],X1);
e1=norm(df1)
if(e1 break; end if(k==n) df0=subs(df,[x1;x2;x3],X1); s0=-df0; k=0; else b=(norm(df1)/norm(df0))^2; s0=-df1+b*s0; k=k+1; end X0=X1; t=t+1; cleara end fprintf('\n运用共轭梯度法迭代%d次后得到极小点X1及极小值f为: \n',t); disp(X1) f=subs(f,[x1;x2;x3],X1) 3.共轭梯度法命令流运行结果 请输入初始迭代点X0(以列向量形式表示): X0=[1;1;2] 请输入允许的误差: e=0.05 a=0.17558 X1= 0.73663 -0.84357 0.59537 e1=2.9706 a=0.34902 X1= -0.28799 -1.0913 0.72763 e1=1.7291 a=0.94345 X1= -0.7341 -0.10832 -0.4965 e1=2.5858 a=0.31605 X1= -1.5206 -0.16116 -0.27991 e1=1.6585 a=0.34137 X1= -1.6701 -0.17319 -0.82584 e1= 1.7283 a=3.0571 X1= -6.8687 3.3157 -5.1891 e1=1.9851 a=0.31909 X1= -8.0604 3.3746 -5.7178 e1=0.032645 运用共轭梯度法迭代7次后得到极小点X1及极小值f为: -8.0604 3.3746 -5.7178 f=-6.666 三、变尺度法 1.变尺度法流程图 开始 给定 Y N Y 达到最大迭代次数 N 结束 2.变尺度法命令流 X0=input('请输入初始迭代点X0(以列向量形式表示): X0='); e=input('请输入允许的误差: e='); symsx1x2x3 t=1; n=3; f=x1^2+2*x2^2+2*x3^2+0.5*x1*x2-2*x1*x3+2*x2*x3+3*x1+2*x2+2; df=[diff(f,x1);diff(f,x2);diff(f,x3)]; df0=subs(df,[x1;x2;x3],X0); A=eye(3,3); k=0; while (1) s0=-A*df0; symsa X1=X0+a*s0; f1=subs(f,[x1;x2;x3],X1); da=eval(diff(f1,a));%eval改成小数形式,相当于内联函数 a=vpa(solve(da,a));%vpa以小数形式显示,solve函数是求函数等于零的解 X1=X0+a*s0 df1=subs(df,[x1;x2;x3],X1); e1=norm(df1) if(e1 break; end if(k==n) df0=df1; A=eye(3,3); k=0; else g=df1-df0; dx=X1-X0; E=dx*dx'/(g'*dx)-A*g*g'*A/(g'*A*g); A=A+E; df0=df1; k=k+1; end X0=X1; t=t+1; cleara end fprintf('\n运用变尺度梯度法迭代%d次后得到极小点X1及极小值f为: \n',t); disp(X1) f=subs(f,[x1;x2;x3],X1) 3.变尺度法命令流运行结果 请输入初始迭代点X0(以列向量形式表示): X0=[1;1;1] 请输入允许的误差: e=0.02 X1= 0.27809 -0.75321 0.17496 e1=3.1841 X1= -0.60891 -0.84619 0.44229 e1=1.5964 X1= -8.0001 3.3334 -5.6668 e1=0.00012527 运用变尺度梯度法迭代3次后得到极小点X1及极小值f为: -8.0001 3.3334 -5.6668 f=-6.6667
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 优化 设计 作业
