Hello John,
I checked qrupdate and found that actually there is a
function cholupdate (both can be used).
Thank you for pointing me in the right direction!
Best regards,
Dimitar
"John D'Errico" <woodchips@rochester.rr.com> wrote in
message <fefpkb$3lb$1@fred.mathworks.com>...
> "Dimitar Dimitrov" <mail_mitko@mathworks.com> wrote in
message <fefh5p
> $g28$1@fred.mathworks.com>...
> > Hello,
> >
> > I have B = eye(n,n) + A'*A
> >
> > where, A is an upper triangular matrix.
> > I want to make a Cholesky factorization of B.
> > So, one way is to make the product A'*A, then sum with
> > eye(n,n) and then make chol(B), however if "n" is large,
> > computing A'*A is time consuming. Is there a way to use the
> > fact that A'*A is already in a "Cholesky factorized" form?
> > In other words, can we compute chol(B) without having to
> > make the actual multiplication A'*A.
>
> Just thinking here...
>
> If you know that A is upper triangular, then
> you also know its QR factorization.
>
> Q == eye(n,n)
> R == A
>
> Now, you wish to find the Cholesky factor of B,
> which is equivalent to computation of the QR
> factorization for the matrix
>
> C = [A;eye(n,n)]
>
> since C'*C == A'*A + eye(n,n)
>
> So it might be more efficient to compute the
> factor you need by row updates to the QR.
> Look at qrupdate or qrinsert. A nice feature
> of this approach is it will be much more
> accurate since you need never compute A'*A,
> an accuracy destroying computation, besides
> the time wasted to build it.
>
> Unfortunately, since you need to make n
> rank 1 updates, my guess is that the total
> time may be similar in the end, but at least
> you should gain in accuracy.
>
> John
