
Ublas : 
Subject: [ublas] ublas double precision issues
From: Umut Tabak (u.tabak_at_[hidden])
Date: 20110613 08:11:32
Dear all,
I have implemented a lanczos solver in ublas, however there is a subtle
question from the point of view of accuracy related to floating point
operations.
My solver works fine and I could find the eigenvalues and eigenvectors
however comparing the eigenvalues that are found by the rayleigh
coefficients, and that is
\frac{\Phi^T K \Phi}{\Phi^T M \Phi},
for a generalized problem gives different result well on the first
eigenvalues on the order of 1e5 relative error.
I compute them with the computed vectors (these are also computed by
some matrixvector multiplications using axpy_prod inside the solver) by
using
axpy_prod(Mss, Phi_str[k], Mq, true);
axpy_prod(Kss, Phi_str[k], Kq, true);
cout << inner_prod( Phi_str[k], Kq ) /inner_prod( Phi_str[k], Mq )
<< endl;
I would expect that the differences between these two computed values to
be small, because in theory they should be equal. 1e5 error is not that
small still. Moreover the errors increases at higher eigenvalues and
vectors. I guess this is an internal problem with the operations used in
boost.
Is there a general way to increase accuracy of the general floating
point operations in boost? Is there a define macro that I should use or so?
Best regards,
Umut
 If I have a thousand ideas and only one turns out to be good, I am satisfied. Alfred Nobel