# How can I get Cholesky decomposition from eigenvalue decomposition?

I have $$S = QLQ^T$$

I know $$Q$$, $$L$$, $$Q^T$$.

How can I get the $$R$$ and $$R^T$$ for the Cholesky decomposition $$S=R^TR$$?

• Isn't it simply $R = \sqrt{L} Q^T$? – vibe Mar 17 '20 at 5:36
• It seems that it is not R is not upper triangular. – Jing Bai Mar 17 '20 at 5:40
• Is $S$ a general matrix or it has some properties (like positive-definiteness)? – Anton Menshov Mar 17 '20 at 8:25
• This looks a lot like an XY question. What do you need to do with the Cholesky decomposition that you cannot already do directly with the eigendecomposition? – Federico Poloni Mar 17 '20 at 10:07
• positive definite symmetric – Jing Bai Mar 17 '20 at 23:18

Let me re-write the eigen-decomposition as: $$S = UDU^{\top}$$. Now, consider the QR-decomposition $$\sqrt{D}U^{\top} = QR$$ where $$Q$$ is unitary and $$R$$ is upper triangular. For uniqueness, one has to ensure that $$R$$ has positive diagonal entries. For negative diagonal values, we can negate the corresponding row of $$R$$. $$\,S=R^{\top}R$$ is then the Cholesky decomposition.

Here is a MATLAB snippet to reproduce:

n = 5;
A = rand(n);

% construct S to be positive-definite:
S = A'*A;
S = S + n*eye(n);
[U,D] = eig(S); % we assume this to be given.

% original cholesky for comparisons
Rchol = chol(S);

% perform the proposed Cholesky
[~,Rqr] = qr(sqrt(D) * U');
Dg = diag(sign(diag(Rqr)));
Rqr = Dg * Rqr;

% now verify that Rqr = Rchol are the same
disp(['error in R: ' num2str(norm(Rchol-Rqr))]);

% now verify that S can be reconstructed from Rqr
disp(['reconstruction error: ' num2str(norm(S - Rqr'*Rqr))]);

% both results should be almost 0 (up to the numerical precision)


If $$S$$ is full rank and positive definite, Cholesky decomposition is unique.

• Is it unique if S has degenerate eigenvalues given the arbitrariness of choice of linear combinations when forming U? – Ian Bush Mar 17 '20 at 13:31