Cholesky Decomposition

Definition 1: A matrix A has a Cholesky Decomposition if there is a lower triangular matrix L all whose diagonal elements are positive such that A = LLT.

Theorem 1: Every positive definite matrix A has a Cholesky Decomposition and we can construct this decomposition.

Proof: The result is trivial for a 1 × 1 positive definite matrix A = [a11] since a11 > 0 and so L = [l11] where l11 = \sqrt a_{11}

We assume by induction that we can construct a Cholesky Decomposition for any positive definite n-1 × n-1 matrix and show how to construct the Cholesky Decomposition of an n × n positive definite matrix A.

Since A is positive definite it is symmetric and so we can represent A as follows

image7272

Since A is positive definite a11 > 0, and so we can define

image7273image7274We now show that

image7275is a positive definite. Let X be any n-1 x 1 column vector with X ≠ 0 and let

image7276

Then

image7277since A is positive definite. Since

image7278

is a positive definite n-1 × n-1 matrix, there exists a lower triangular matrix  all of whose diagonal elements are positive such that

image7279It now follows that

image7280which completes the proof.

Example 1: Find the Cholesky Decomposition of the matrix in range A4:C6 of Figure 1.

Cholesky Decomposition

Figure 1 – Cholesky Decomposition

Cholesky decomposition formulas

Figure 2 – Formulas for Cholesky Decomposition

Note that =MMULT(A17:C19,TRANSPOSE(A17:C19)) yields the matrix in the range A4:C6.

Real Statistics Function: The following array function is provided in the Real Statistics Resource Pack.

CHOL(R1): returns the matrix L such that LLT is the Cholesky Decomposition of the matrix in range R1

For Example 1, CHOL(A4:C6) returns the matrix found in range A17:C19.

Property 1: If LLT is the Cholesky Decomposition of A then the inverse of A is (L-1)TL-1.

Proof: A(L-TL-1) = (LLT)(L-TL-1) =L(LTL-T)TL-1 = LIL-1 = LL-1 = I.

The proof that ((L-1)TL-1)A = I is similar.

13 thoughts on “Cholesky Decomposition”

  1. Thank you Charles.

    Question: Is there a way to do this calculation in reverse?
    Given the Cholesky Matrix [L], how can I determine the initial matrix [A] ?

    Reply
  2. hi sir, if A=[2 1 0; -1 2 -1; 0 -1 2] it is non-symmetric but at the same time x’Ax>0. so should we use Cholesky decomposition for it? can we use (A+A’)/2 to make it symmetric but then it is not the decomposition of A.
    Thanks in advance.

    Reply
    • If the matrix is positive definite, you can do a Cholesky decomposition.
      In fact, I just checked and you can use the Real Statistics CHOL function to find this decomposition.
      Charles

      Reply
  3. Charles I downloaded your Real Statistics Resource Pack, but I can’t use the CHOL() function, it gives me a #VALUE! error.
    I used the function =ver() and I’ve got version 4.1.1 and excell 2007
    thanks for the add in btw

    Reply
    • Miguel,

      I just tried to use the CHOL(R1) function on the data on the referenced webpage and it worked fine. I assume that you didn’t type in CHOL(), but also included a range inside the parentheses.

      If you send me an Excel file with your data I will try to figure out what has gone wrong. The email address is shown on the Contact Us webpage.

      Charles

      Reply
        • Miguel,
          The matrix is not positive definite and so it does not have a Cholesky decomposition. Since one row is repeated probably this is not the matrix you want to decompose.
          Charles

          Reply
          • Thank you very much Charles!
            didn’t see that problem before, just fixed it and the function works very well!
            have a good one

    • James,
      The CHOL function was introduced in release 2.13 back in May, 2014. As long as you have a release that was downloaded since May the CHOL function should be there.
      What version of Excel are you using and what is the release number of the Real Statistics Resource Pack that you are using? You can get the release number by entering =VER() in any cell. Once I have this information I will try to figure out why you are getting a #NAME? error.
      Charles

      Reply

Leave a Comment