梯 度 法 求 最 优 解 问 题
姓 名:李刚 学号:2016210309
1、所求问题
2 用梯度法求目标函数F(x)?1.5x12?0.5x2?x1x2?2x1的无约束最优解,已知初始点
X(0)?[?2,4]T,??0.02或??0.002
2、Matlab编程实现
建立了一个Stair(e).m的子函数来求解,e为函数的输入变量,即问题中的?。只需要在Matlab“命令行窗口”去调用此函数即可,用??0.02或??0.002去代替Stair(e).m函数中的输入变量e即可。
程序源码:
function z =Stair(e)
%输入变量e来代替求解精度问题,方便求解不同静精度问题 syms x1 x2 a
f=1.5*x1^2+0.5*x2^2-x1*x2-2*x1; %目标函数 dx1=diff(f,x1); %对x1求偏导 dx2=diff(f,x2); %对x2求偏导 g=[dx1,dx2]; %梯度
X=[x1,x2]; %建立坐标变量 X0=[-2,4]; %初始点坐标
g0=subs(g,X,X0); %subs函数,用X0代替g函数中的X G=norm(g0); %梯度的模
k=0; %迭代次数变量
F=subs(f,X,X0); %subs函数,用X0代替f函数中的X F=double(F); %数据类型转换
fprintf('迭代次数k=%d;',k);
fprintf('坐标值x1=%5.7f ',X0(1)); fprintf('x2=%5.7f;',X0(2));
%fprintf('坐标值 X=%d %d\\n',X0); fprintf('函数值F=%5.7f\\n\\n',F)
for i=1:20 %迭代求解
if (G>e) %判断是否满足精度要求 k=k+1;
d=-g0/G; %确定搜索方向
F=subs(f,X,X0); %计算F(x)目标函数的值
fm=subs(f,X,X0+a*d); %求最优步长,以计算新的迭代点 fmd=diff(fm); %求偏导
a0=solve(fmd); %求出偏导函数的零解,求得最优步长 X0=X0+a0*d; %求得新的迭代点 g0=subs(g,X,X0); %计算新的梯度 G=norm(g0); %计算新的梯度的模 g0=double(g0); %数据类型转化 G=double(G); X0=double(X0);
F=double(subs(f,X,X0)); a0=double(a0);
%结果输出
fprintf('迭代次数k=%d;',k); fprintf('坐标值x1=%5.7f ',X0(1)); fprintf('x2=%5.9f;',X0(2)); fprintf('函数值F=%5.7f\\n',F);
fprintf('梯度g(k)=%5.7f %5.7f;',g0); fprintf('梯度的模||g(k)||=%5.7f;',G); fprintf('步长a(k)=%5.7f\\n\\n',a0); end end
z=[X0 F]; end
运行结果
当??0.02时,命令窗口输入Stair(0.02),运行结果见下图:
当??0.002时,命令窗口输入Stair(0.02),运行结果见下图:
具体见表格:(??0.02) k 0 1 2 X(k) [-2, [1.5294118, [0.9411765, 4] 2.23529411] 1.05882353] F(X(k)) 26 -0.4705882 -0.9896194 g(k) [0.3529412, [-0.235294, 0.7058824] 0.1176471] ||g(k)|| 0.7892005 0.2630668 α(k) 3.9460023 1.3153341
k X(k) F(X(k)) g(k) ||g(k)|| α(k) 0 [-2 4] 26 具体见表格:(??0.002) 1 2 3 4 5 [1.5294118, [0.9411765, [1.0103806, [0.9988466, [1.0002035, 2.23529411] 1.05882353] 1.02422145] 1.001153403] 1.000474930] -0.4705882 -0.9896194 -0.9997965 -0.9999960 -0.9999999 [0.3529412, [-0.235294, [0.0069204, [-0.0046136, [0.0001357, 0.7058824] 0.1176471] 0.0138408] 0.0023068] 0.0002714] 0.7892005 0.2630668 0.0154745 0.0051582 0.0003034 3.9460023 1.3153341 0.0773726 0.0257909 0.0015171 3 [1.0103806, 1.02422145] -0.9997965 [0.0069204, 0.0138408] 0.0154745 0.0773726