sg_min
is built from a couple of fairly elementary optimization
codes which have been put through a geometrization that allows them to
be situated on the Stiefel manifold. The basic elements of a
geometrization are the rules for how to take inner products, how to
turn unconstrained differentials into constrained gradients, how to
differentiate gradient fields covariantly, and how to move about on
the manifold.
The sg_min
routine parses the arguments and sets the defaults.
Finally, it calls sg_newton
, sg_dog
,sg_frcg
,
or sg_prcg
.
The pseudocode for sg_newton
and sg_frcg
(as examples)
are given in the boxes below.
These are fairly generic routines for optimization. At this level of
description, one would not necessarily be able to tell them from
unconstrained routines
(see [170,192,368,338]).
What places them on the Stiefel manifold are
the definitions of grad
, dgrad
, ip
(the dot
product), and move
, which have been made in such a way that
the constraints of the Stiefel manifold are respected. Likewise,
sg_dog
and sg_prcg
have been similarly transported.