Files
matlab/RBM/UFLDL/common/minFunc_2012/minFunc/lbfgsProd.m
T
jens 7b34529b24 imported RBM
git-svn-id: http://moon:8086/svn/matlab/trunk@91 801c6759-fa7c-4059-a304-17956f83a07c
2016-07-12 11:24:12 +00:00

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