#15712: Fix determinant for RR
------------------------------+----------------------------
   Reporter:  ppurka          |            Owner:
       Type:  defect          |           Status:  new
   Priority:  major           |        Milestone:  sage-6.1
  Component:  linear algebra  |         Keywords:
  Merged in:                  |          Authors:
  Reviewers:                  |  Report Upstream:  N/A
Work issues:                  |           Branch:
     Commit:                  |     Dependencies:
   Stopgaps:                  |
------------------------------+----------------------------
 Refer to [https://groups.google.com/d/topic/sage-
 devel/Oeg6dpPkfxw/discussion this sage-devel post]

 {{{
 A = matrix([[              1.0,    -1.50614628068,     2.26847661882,
 -3.41665762226,     5.14598617013,     -7.7506079306,     11.6735493077,
 -17.5820728722],
 [              1.0,   -0.936702701875,    0.877411951699,
 -0.821874145813,    0.769851732984,   -0.721122198329,    0.675477111557,
 -0.632721235449],
 [              1.0,   -0.443181140009,     0.19640952286,
 -0.0870449962496,     0.03857670067,  -0.0170964661807,  0.00757683137208,
 -0.00335790876514],
 [              1.0,    0.352786603689,    0.124458387743,
 0.0439072519123,   0.0154898902795,  0.00546462578321,  0.00192784677049,
 0.000680118514595],
 [              1.0,    0.647213396311,    0.418885180364,
 0.271108100248,    0.175464794329,     0.11356316547,     0.07349960202,
 0.0475699270508],
 [              1.0,     1.44318114001,     2.08277180288,
 3.00581698486,     4.33793838286,     6.26043086067,     9.03493574645,
 13.0390488705],
 [              1.0,     1.93670270187,     3.75081735545,
 7.26421810653,     14.0686308339,     27.2467553477,     52.7688646993,
 102.197602838],
 [              1.0,     2.50614628068,     6.28076918019,
 15.7405263208,     39.4480614948,     98.8626125954,     247.764168855,
 620.933250262]])

 B = A.change_ring(RDF)
 print "det(A) = {}, det(B) = {}".format(A.determinant(), B.determinant())

 det(A) = -4.19430400000000e6, det(B) = 16801.7979988
 }}}

 According to Peter Bruin, a possible fix is to use pari:

 ''Well, it should also be fixed for a RealField of higher precision.  An
 easy solution for that is to use PARI, which uses a numerically more
 stable algorithm (Gaussian elimination, choosing pivots of maximal
 absolute value; I don't know about proven error bounds).  Example:''
 {{{
 sage: A._pari_().matdet()
 16801.7979988279  # same as when doing the computation over QQ
 }}}
 ''Sage's determinant() already uses PARI over Z/nZ for n less than the
 machine word size; it would be trivial to adapt it to work also over the
 reals.''

--
Ticket URL: <http://trac.sagemath.org/ticket/15712>
Sage <http://www.sagemath.org>
Sage: Creating a Viable Open Source Alternative to Magma, Maple, Mathematica, 
and MATLAB

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

Reply via email to