Home > manopt > manifolds > symfixedrank > symfixedrankYYfactory.m

# symfixedrankYYfactory

## PURPOSE

Manifold of n-by-n symmetric positive semidefinite matrices of rank k.

## SYNOPSIS

function M = symfixedrankYYfactory(n, k)

## DESCRIPTION

``` Manifold of n-by-n symmetric positive semidefinite matrices of rank k.

function M = symfixedrankYYfactory(n, k)

A point X on the manifold is parameterized as YY^T where Y is a matrix of
size nxk. As such, X is symmetric, positive semidefinite. We restrict to
full-rank Y's, such that X has rank exactly k. The point X is numerically
represented by Y (this is more efficient than working with X, which may
be big). Tangent vectors are represented as matrices of the same size as
Y, call them Ydot, so that Xdot = Y Ydot' + Ydot Y. The metric is the
canonical Euclidean metric on Y.

Since for any orthogonal Q of size k, it holds that (YQ)(YQ)' = YY',
we "group" all matrices of the form YQ in an equivalence class. The set
of equivalence classes is a Riemannian quotient manifold, implemented
here.

Notice that this manifold is not complete: if optimization leads Y to be
rank-deficient, the geometry will break down. Hence, this geometry should
only be used if it is expected that the points of interest will have rank
exactly k. Reduce k if that is not the case.

An alternative, complete, geometry for positive semidefinite matrices of
rank k is described in Bonnabel and Sepulchre 2009, "Riemannian Metric
and Geometric Mean for Positive Semidefinite Matrices of Fixed Rank",
SIAM Journal on Matrix Analysis and Applications.

The geometry here implemented is the simplest case of the 2010 paper:
M. Journee, P.-A. Absil, F. Bach and R. Sepulchre,
"Low-Rank Optimization on the Cone of Positive Semidefinite Matrices".

Please cite the Manopt paper as well as the research paper:
@Article{journee2010low,
Title   = {Low-rank optimization on the cone of positive semidefinite matrices},
Author  = {Journ{\'e}e, M. and Bach, F. and Absil, P.-A. and Sepulchre, R.},
Journal = {SIAM Journal on Optimization},
Year    = {2010},
Number  = {5},
Pages   = {2327--2351},
Volume  = {20},
Doi     = {10.1137/080731359}
}

## CROSS-REFERENCE INFORMATION

This function calls:
• hashmd5 Computes the MD5 hash of input data.
• lyapunov_symmetric Solves AX + XA = C when A = A', as a pseudo-inverse.
• matrixlincomb Linear combination function for tangent vectors represented as matrices.
This function is called by:

## SOURCE CODE

```0001 function M = symfixedrankYYfactory(n, k)
0002 % Manifold of n-by-n symmetric positive semidefinite matrices of rank k.
0003 %
0004 % function M = symfixedrankYYfactory(n, k)
0005 %
0006 % A point X on the manifold is parameterized as YY^T where Y is a matrix of
0007 % size nxk. As such, X is symmetric, positive semidefinite. We restrict to
0008 % full-rank Y's, such that X has rank exactly k. The point X is numerically
0009 % represented by Y (this is more efficient than working with X, which may
0010 % be big). Tangent vectors are represented as matrices of the same size as
0011 % Y, call them Ydot, so that Xdot = Y Ydot' + Ydot Y. The metric is the
0012 % canonical Euclidean metric on Y.
0013 %
0014 % Since for any orthogonal Q of size k, it holds that (YQ)(YQ)' = YY',
0015 % we "group" all matrices of the form YQ in an equivalence class. The set
0016 % of equivalence classes is a Riemannian quotient manifold, implemented
0017 % here.
0018 %
0019 % Notice that this manifold is not complete: if optimization leads Y to be
0020 % rank-deficient, the geometry will break down. Hence, this geometry should
0021 % only be used if it is expected that the points of interest will have rank
0022 % exactly k. Reduce k if that is not the case.
0023 %
0024 % An alternative, complete, geometry for positive semidefinite matrices of
0025 % rank k is described in Bonnabel and Sepulchre 2009, "Riemannian Metric
0026 % and Geometric Mean for Positive Semidefinite Matrices of Fixed Rank",
0027 % SIAM Journal on Matrix Analysis and Applications.
0028 %
0029 %
0030 % The geometry here implemented is the simplest case of the 2010 paper:
0031 % M. Journee, P.-A. Absil, F. Bach and R. Sepulchre,
0032 % "Low-Rank Optimization on the Cone of Positive Semidefinite Matrices".
0034 %
0035 %
0036 % Please cite the Manopt paper as well as the research paper:
0037 %     @Article{journee2010low,
0038 %       Title   = {Low-rank optimization on the cone of positive semidefinite matrices},
0039 %       Author  = {Journ{\'e}e, M. and Bach, F. and Absil, P.-A. and Sepulchre, R.},
0040 %       Journal = {SIAM Journal on Optimization},
0041 %       Year    = {2010},
0042 %       Number  = {5},
0043 %       Pages   = {2327--2351},
0044 %       Volume  = {20},
0045 %       Doi     = {10.1137/080731359}
0046 %     }
0047 %
0049
0050 % This file is part of Manopt: www.manopt.org.
0051 % Original author: Bamdev Mishra, Dec. 30, 2012.
0052 % Contributors:
0053 % Change log:
0054 %
0055 %   July 10, 2013 (NB):
0056 %       Added vec, mat, tangent, tangent2ambient ;
0057 %       Correction for the dimension of the manifold.
0058 %
0059 %   Apr.  2, 2015 (NB):
0060 %       Replaced trace(A'*B) by A(:)'*B(:) (equivalent but faster).
0061 %
0062 %   Apr. 17, 2018 (NB):
0063 %       Removed dependence on lyap.
0064 %
0065 %   Sep.  6, 2018 (NB):
0066 %       Removed M.exp() as it was not implemented.
0067
0068
0069     M.name = @() sprintf('YY'' quotient manifold of %dx%d psd matrices of rank %d', n, k);
0070
0071     M.dim = @() k*n - k*(k-1)/2;
0072
0073     % Euclidean metric on the total space
0074     M.inner = @(Y, eta, zeta) eta(:)'*zeta(:);
0075
0076     M.norm = @(Y, eta) sqrt(M.inner(Y, eta, eta));
0077
0078     M.dist = @(Y, Z) error('symfixedrankYYfactory.dist not implemented yet.');
0079
0080     M.typicaldist = @() 10*k;
0081
0082     M.proj = @projection;
0083     function etaproj = projection(Y, eta)
0084         % Projection onto the horizontal space
0085         YtY = Y'*Y;
0086         SS = YtY;
0087         AS = Y'*eta - eta'*Y;
0088         % Omega = lyap(SS, -AS);
0089         Omega = lyapunov_symmetric(SS, AS);
0090         etaproj = eta - Y*Omega;
0091     end
0092
0093     M.tangent = M.proj;
0094     M.tangent2ambient = @(Y, eta) eta;
0095
0096     M.retr = @retraction;
0097     function Ynew = retraction(Y, eta, t)
0098         if nargin < 3
0099             t = 1.0;
0100         end
0101         Ynew = Y + t*eta;
0102     end
0103
0104
0106     M.ehess2rhess = @(Y, egrad, ehess, U) M.proj(Y, ehess);
0107
0108     % Notice that the hash of two equivalent points will be different...
0109     M.hash = @(Y) ['z' hashmd5(Y(:))];
0110
0111     M.rand = @random;
0112     function Y = random()
0113         Y = randn(n, k);
0114     end
0115
0116     M.randvec = @randomvec;
0117     function eta = randomvec(Y)
0118         eta = randn(n, k);
0119         eta = projection(Y, eta);
0120         nrm = M.norm(Y, eta);
0121         eta = eta / nrm;
0122     end
0123
0124     M.lincomb = @matrixlincomb;
0125
0126     M.zerovec = @(Y) zeros(n, k);
0127
0128     M.transp = @(Y1, Y2, d) projection(Y2, d);
0129
0130     M.vec = @(Y, u_mat) u_mat(:);
0131     M.mat = @(Y, u_vec) reshape(u_vec, [n, k]);
0132     M.vecmatareisometries = @() true;
0133
0134 end```

Generated on Mon 10-Sep-2018 11:48:06 by m2html © 2005