Given a real symmetric matrix $M$, ostensibly of low rank, efficiently find an expression $M = \sum \alpha_i u_i u_i^T$ using the number of terms rank($M$).A 2011 StackOverflow Question Dense Cholesky Update in Python asked about doing low rank updates to Cholesky decompositions, but was answered largely with ways to do rank 1 updates in Python.Naturally a rank one symmetric term would have the form $\alpha u u^T$, and if we have a rank two symmetric update of the form $uv^T + vu^T$, then we can rewrite it:$$ uv^T + vu^T = \frac{1}{2} ((u+v)(u+v)^T - (u-v)(u-v)^T) $$but this does not seem to lead to an efficient general method for similarly expanding an arbitrary symmetric real matrix into as many such terms as the rank requires.Existence of such an expresssion is guaranteed by eigenbasis expansion:$$ M = \sum \alpha_i u_i u_i^T $$where the $u_i$ are an orthonormal basis of eigenvectors with corresponding eigenvalues $\alpha_i$ (and the limitation to as many terms as the rank requires is met by ignoring zero eigenvalues).  But a full eigenbasis expansion would call for a disproportionate amount of work relative to the Cholesky updates.We could easily expand a rank $k$ matrix as a sum of $k$ not necessarily symmetric rank one terms and use the symmetry of the sum to rewrite it as $2k$ symmetric rank one terms:$$ \sum u_i v_i^T = \frac{1}{2} \sum (u_i v_i^T + v_i u_i^T) = \frac{1}{4} \sum ((u_i+v_i)(u_i+v_i)^T - (u_i-v_i)(u_i-v_i)^T) $$But this uses twice the number of rank one updates as ought to be necessary.
Writing Real Symmetric Matrices as Linear Combination of Rank One Symmetric Terms $uu^T$
matrices;rank;update