梯 度 法 求 最 优 解 问 题
姓 名:李刚 学号:2016210309
1、所求问题
用梯度法求目标函数121222125.05.1)(x x x x x x F --+=的无约束最优解,已知初始点
T X ]4,2[)0(-=,02.0=ε或002.0=ε
2、Matlab 编程实现
建立了一个Stair(e).m 的子函数来求解,e 为函数的输入变量,即问题中的ε。只需要在Matlab “命令行窗口”去调用此函数即可,用02.0=ε或002.0=ε去代替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; %确定搜索方向