matlab:
function y=fs2steep(f,e,a,b) %返回的是点坐标的2个分量
% fs2steep函数 最速下降法
% x=fs2steep(f,e,a,b)为输入函数 f为函数 e为允许误差 (a,b)为初始点;
% fsx TJPU 2008.6.15
x1=a;x2=b;
Q=fs2hesse(f,x1,x2);
x0=[x1 x2]';
fx1=diff(f,'x1'); %对x1求偏导数
fx2=diff(f,'x2'); %对x2求偏导数
g=[fx1 fx2]'; %梯度
g1=subs(g); %把符号变量转为数值
d=-g1;%d为搜索方向
while (abs(norm(g1))>=e) %norm(g1)为g1的2范数,即sqrt(x1^2+x2^2),因为梯度其各分量=0,所以其梯度幅值=0
t=(-d)'*d/((-d)'*Q*d);%求搜索步长,方法是?
x0=x0-t*g1; %搜索到的点
v=x0;
a=[1 0]*x0;
b=[0 1]*x0;
x1=a;
x2=b;
Q=fs2hesse(f,x1,x2);
x0=[x1 x2]';
fx1=diff(f,'x1'); %对x1求偏导数
fx2=diff(f,'x2');