Hello everybody

Can anyone advise me how to make octave's "chol" function work according to common sense?

I have the sparse matrix A 3565x119 with the density 0.016955 (just an example), and I need to factor A'*A, which is 119x119 100% dense.

Nevertheless, "chol" factored it very nicely in 0.00199413 seconds.

However, the full-dense character of A'*A is caused just by the single dense row. So I deleted it and obtained the sparse matrix AS

3564x119 with the density of 0.016679 (slightly less) and the product AS'*AS as 119*119 sparse matrix with 7139 nonzeros only (density

0.50413). Still rather dense but nevertheless about twice less memory consumption. As I am looking forward to matrices with 10^6 rows, it

is essential.

However, in this case, "chol" factored the sparse product in 0.350877 seconds! About 180 times slower !!! OK, when you do it like

chol(full(AS'*AS)),

you obtain the expected 0.000941992 seconds, but I suspect that octave

will not like extra memory consumption.

So my questions are: is there somewhere in the dark octave corner the sparse Cholesky factorization? I do not particularly like writing

anything like

sparse(chol(full(AS'*AS)));

This finally saves me about 60% of memory but will not probably work for huge matrices. Or is there any trick to avoid explicit conversion

to a full matrix for "chol" without sacrifying too much of runtime?