Files
matlab/RBM/UFLDL/common/minFunc_2012/minFunc/lbfgsAdd.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

32 lines
679 B
Matlab

function [S,Y,YS,lbfgs_start,lbfgs_end,Hdiag,skipped] = lbfgsAdd(y,s,S,Y,YS,lbfgs_start,lbfgs_end,Hdiag,useMex)
ys = y'*s;
skipped = 0;
corrections = size(S,2);
if ys > 1e-10
if lbfgs_end < corrections
lbfgs_end = lbfgs_end+1;
if lbfgs_start ~= 1
if lbfgs_start == corrections
lbfgs_start = 1;
else
lbfgs_start = lbfgs_start+1;
end
end
else
lbfgs_start = min(2,corrections);
lbfgs_end = 1;
end
if useMex
lbfgsAddC(y,s,Y,S,ys,int32(lbfgs_end));
else
S(:,lbfgs_end) = s;
Y(:,lbfgs_end) = y;
end
YS(lbfgs_end) = ys;
% Update scale of initial Hessian approximation
Hdiag = ys/(y'*y);
else
skipped = 1;
end