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".
 Paper link: http://www.di.ens.fr/~fbach/journee2010_sdp.pdf
 
 
 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}
     }

 See also: elliptopefactory spectrahedronfactory

CROSS-REFERENCE INFORMATION ^

This function calls: This function is called by:

SUBFUNCTIONS ^

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".
0033 % Paper link: http://www.di.ens.fr/~fbach/journee2010_sdp.pdf
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 %
0048 % See also: elliptopefactory spectrahedronfactory
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 
0105     M.egrad2rgrad = @(Y, eta) eta;
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