-function alpha = step_length_positive_definite(g, Q)
+function alpha = step_length_positive_definite(g, Q, p)
%
% Find the minimizer alpha of,
%
% and ``Q`` is positive-definite.
%
% The closed-form solution to this problem is given in Nocedal and
- % Wright, (3.55). The direction of steepest descent will always be
- % the negative gradient direction; this simplified form is given in
- % Guler.
+ % Wright, (3.55).
%
% INPUT:
%
% - ``g`` -- The gradient of f at x.
%
% - ``Q`` -- The positive-definite matrix in the definition of
- % ``f`` above.
+ % ``f`` above.
+ %
+ % - ``p`` -- The direction in which ``f`` decreases. The line
+ % along which we minimize f(x + alpha*p).
%
% OUTPUT:
%
- % - ``alpha`` -- The value which decreases ``f`` the most.
+ % - ``alpha`` -- The value which causes ``f`` to decrease the
+ % most.
%
% NOTES:
%
% All vectors are assumed to be *column* vectors.
%
- denom = (g' * Q * g);
+ denom = (p' * Q * p);
- % denom is non-negative, since it's a Q-norm. No need to abs() it.
- if (denom < eps)
+ if (abs(denom) < eps)
% Catch divide-by-zeros. If denom is effectively zero, set it to
% something tiny instead. This trick is also used in the PCGM.
- denom = eps;
+ denom = sign(denom)*eps;
end
- alpha = (g' * g)/denom;
+ alpha = -(g' * p)/denom;
end