On Monday, July 1, 2013 10:45:36 AM UTC+2, David Ingerman wrote:
>
> The following matrix operation produces wrong answer in online Sage:
>
> M=matrix(RR,[[7,3,10,13],[1,1,2,2],[1,2,3,4],[1,3,5,7]]);det(M);invM=M^(-1);invM*M;det(invM)


RR stands for the "real numbers" with the usual 53bits of precision, e.g. 
5.123957322….
QQ are rational numbers where two large integers build up each number, 
e.g. 41000041/333000333000333000333000333000333000333
Therefore, QQ has a much higher precision … but is much slower and uses 
more memory.

In your case, the lack of precision in RR causes you troubles and you have 
to find a way to pose the problem you want to solve differently. You cannot 
rely on QQ, because in bad cases, the expressions blow up and eat all your 
memory. More generally, this is not a Sage related problem, but related to 
all calculations your are doing "natively" with your CPU.

To see in advance when this happens, you have to calculate the conditional 
number of the matrix. I think that's only in numpy (or I haven't found it).

sage: M=matrix(RR,[[7,3,10,13],[1,1,2,2],[1,2,3,4],[1,3,5,7]])
sage: import numpy as np
sage: np.linalg.cond(M)
104.85355762315329

http://en.wikipedia.org/wiki/Condition_number

Here are some decomposition methods that might help:

http://en.wikipedia.org/wiki/Matrix_decomposition

H


-- 
You received this message because you are subscribed to the Google Groups 
"sage-support" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sage-support+unsubscr...@googlegroups.com.
To post to this group, send email to sage-support@googlegroups.com.
Visit this group at http://groups.google.com/group/sage-support.
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to