#853: Add a pslq implementation to Sage
--------------------------------------------+-------------------------------
Reporter: was | Owner: was
Type: enhancement | Status: needs_info
Priority: major | Milestone: sage-wishlist
Component: number theory | Keywords:
Author: Paul Zimmermann, Alex Ghitza | Upstream: N/A
Reviewer: David Kirkby | Merged:
Work_issues: need advice on interface |
--------------------------------------------+-------------------------------
Comment(by zimmerma):
I got some more information about PSLQ by David Bailey, who agreed that I
forward it to the Sage
developers (the references [1] and [2] are those from pslq-1.0.c):
{{{
Comments: Reference [1] in your note is the original PSLQ paper, but
the algorithm as presented there is quite cumbersome, as it involves
(needlessly) many full-matrix operations. Reference [2] stated an
abbreviated but equivalent version; unfortunately, however, it includes
one bug. Thus I strongly suggest that you base your implementation on
the following paper:
David H. Bailey and David J. Broadhurst, "Parallel Integer Relation
Detection: Techniques and Applications," /Mathematics of Computation/,
vol. 70, no. 236 (Oct 2000), pg. 1719-1736. Our preprint copy is
available at:
http://crd.lbl.gov/~dhbailey/dhbpapers/ppslq.pdf
The basic PSLQ algorithm is stated on page 2, and should work well as
stated (please let me know if you have any problems). A two-level and a
three-level variant are also described, which are faster but quite a bit
more complicated.
However, if you are really serious, I suggest that you try the
"multi-pair" variant of PSLQ, which is presented in the above paper
beginning on page 10. Although we devised this scheme originally to be
suitable for parallel processing, we have found that even on a single
processor system it runs significantly faster, and is significantly more
effective in recovering relations when the input data is given only to
limited precision. Two- and a three-level variants of the multi-pair
scheme, in analogy to the two- and three-level versions of the regular
PSLQ, are also given in the paper. These are much faster than the basic
multi-pair PSLQ scheme, because they perform most operations using
ordinary double-precision arithmetic, updating the multi-precision
arrays only occasionally when needed.
In my own work, I always use the multi-pair PSLQ. I use the basic
multi-pair PSLQ for n up to 10 or 20 and for modest precision. For
larger n, and, say, 500-digit or more precision, I generally use
two-level multi-pair scheme. For truly "heroic" calculations (e.g., n >
100 and precision level > 2000 digits), I use the three-level multi-pair
scheme, since it has advantages for very large calculations and runs
well on a parallel system -- see some case studies mentioned in the
above paper.
Please let me know if it works for you. And if you have any questions,
I would be pleased to respond. If you wish, you can look at the
implementations of PSLQ and the multi-pair PSLQ schemes (in both C++ and
Fortran-90) that we have bundled with our ARPREC package:
http://crd.lbl.gov/~dhbailey/mpdist
}}}
I will try to modify my code to use the "basic PSLQ algorithm" described
in the paper
mentioned above. However in the short term I won't be able to implement
the multi-pair
variant. Thus if somebody wants to do it, please proceed. Alternatively,
one might use
the PSLQ variants from ARPREC (if the license is ok).
--
Ticket URL: <http://trac.sagemath.org/sage_trac/ticket/853#comment:17>
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 post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/sage-trac?hl=en.