Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

Triangular matrix calculation

  1. Jul 12, 2011 #1
    The problem is :

    Given a lower triangular matrix L, how to calculate a upper triangular matrix U, such that L'*L=U'*U where L' and U' are transpose of matrix L and U respectively?
    I am looking for a method which has less computational complexity, i.e., O(n^2) if the dimension of L is n.
  2. jcsd
  3. Jul 12, 2011 #2
    L'L is symmetric positive definite, so it can be diagonalized with an orthogonal matrix M
    (that is, M'L'LM = D where M^-1 = M' and D is diagonal with positive eigenvalues). So:

    L'L = U'U
    MDM' = U'U
    D = M'U'UM = (UM)'(UM)

    so, just put

    UM = E
    U = EM'

    where E is the diagonal matrix whose eigenvalues are the square roots of the corresponding eigenvalues of D.

    Hope it's clear :)
  4. Jul 12, 2011 #3
    Thank u very much.
    From your reply, I see the point is to derive M and D by eigendecomposing on L'L. In general , the computational complexity of eigendecompose is O(N^3). Do you have other ideas that could achieve O(N^2)?
    The other thing is your method can not make sure U is an upper triangular matrix.

    P.S., I knew the QR decomposition can solve this problem, but QR requires O(N^3) in MATLAB, i.e., [Q, U]=qr(L).
    Last edited: Jul 12, 2011
  5. Jul 13, 2011 #4


    User Avatar
    Science Advisor
    Homework Helper

    You can do this in a similar way to the standard Cholesky factorization of a matrix, except you start with the last term and work backwards.

    Let [itex]A = L' L = U' U[/itex] and multiply out the two products.

    The last element [itex]A_{n,n}= U_{n,n}^2[/itex] so you can find [itex]U_{n,n}[/itex] in terms of the elements of [itex]L[/itex].

    The element [itex]A_{n-1,n}[/itex] depends only on [itex]U_{n-1,n}[/itex] and [itex]U_{n,n}[/itex], so you can use it to find [itex]U_{n-1,n}[/itex].

    You work backwards along the last row to [itex]A_{1,n}[/itex], then work along the next row starting with [itex]A_{n-1,n-1}[/itex], and finish at [itex]A_{1,1}[/itex]

    If you haven't seen this before, it might help to write out the matrix products for 3x3 or 4x4 matrices in full.

    This algorithm suggests very strongly that the fastest algorithm is [itex]O(n^3)[/itex], because if there was a faster algorithm, the same idea could be used for any matrix factorization.
  6. Jul 14, 2011 #5
    Thanks for your suggestion.
    From this point, I might stop to looking for a [itex]O(n^2)[/itex] solution.
Share this great discussion with others via Reddit, Google+, Twitter, or Facebook