git-svn-id: http://moon:8086/svn/matlab/trunk@91 801c6759-fa7c-4059-a304-17956f83a07c
33 lines
696 B
Matlab
33 lines
696 B
Matlab
function [d] = lbfgsProd(g,S,Y,YS,lbfgs_start,lbfgs_end,Hdiag)
|
|
% BFGS Search Direction
|
|
%
|
|
% This function returns the (L-BFGS) approximate inverse Hessian,
|
|
% multiplied by the negative gradient
|
|
|
|
% Set up indexing
|
|
[nVars,maxCorrections] = size(S);
|
|
if lbfgs_start == 1
|
|
ind = 1:lbfgs_end;
|
|
nCor = lbfgs_end-lbfgs_start+1;
|
|
else
|
|
ind = [lbfgs_start:maxCorrections 1:lbfgs_end];
|
|
nCor = maxCorrections;
|
|
end
|
|
al = zeros(nCor,1);
|
|
be = zeros(nCor,1);
|
|
|
|
d = -g;
|
|
for j = 1:length(ind)
|
|
i = ind(end-j+1);
|
|
al(i) = (S(:,i)'*d)/YS(i);
|
|
d = d-al(i)*Y(:,i);
|
|
end
|
|
|
|
% Multiply by Initial Hessian
|
|
d = Hdiag*d;
|
|
|
|
for i = ind
|
|
be(i) = (Y(:,i)'*d)/YS(i);
|
|
d = d + S(:,i)*(al(i)-be(i));
|
|
end
|