From: Brendan M. <mc...@cs...> - 2002-11-19 23:41:54
|
G'day, I've just come across an interesting problem which I thought someone might be interested in. I have been trying to calculate the inverse of a 625x625 covariance matrix (ie real and symmetric) via vnl_svd. But I kept getting errors from the netlib code vnl_linpack_svdc. The variable info was non-zero on return (624 in fact) and the return matrix was definitely not an inverse. I suspected it might be the compiler I was using (gcc version 3.0.4 (Red Hat Linux 7.2 3.0.4-1) - on a Pentium III) so I recompiled netlib with optimisation off and -ffloat-store as suggested in vnl_svd.txx. This made no difference. As a last resort, I increased the number of iterations in dsvdc.c from maxit=30 to maxit=100 and the inverses now work! No reason for choosing a 100, it was just a nice round number. Anyway, matlab had no problems calculating the inverses or the svd, so I knew it was in the code somewhere. Anyway, I don't know whether something should be done about this or not. I don't know why maxit=30 was originally chosen, nor if it's a good number in general, so I can't really comment on whether it should be increased. I just thought everyone should be informed. -- Cheers, Brendan. ---------------------------------------------------------------------------- Brendan McCane Email: mc...@cs... Department of Computer Science Phone: +64 3 479 8588/8578. University of Otago Fax: +64 3 479 8529 Box 56, Dunedin, New Zealand. There's only one catch - Catch 22. |