arbitrary precision linear algebra

Ben123 ben.is.located at gmail.com
Wed Mar 2 22:40:40 EST 2011


On Mar 2, 1:34 pm, geremy condra <debat... at gmail.com> wrote:
> On Wed, Mar 2, 2011 at 10:47 AM, Ben123 <ben.is.loca... at gmail.com> wrote:
> > On Mar 2, 12:22 pm, geremy condra <debat... at gmail.com> wrote:
> >> On Wed, Mar 2, 2011 at 10:21 AM, geremy condra <debat... at gmail.com> wrote:
> >> > On Wed, Mar 2, 2011 at 6:42 AM, Ben123 <ben.is.loca... at gmail.com> wrote:
> >> >> Hello. I have a written Python program which currently uses numpy to
> >> >> perform linear algebra operations. Specifically, I do matrix*matrix,
> >> >> matrix*vector, numpy.linalg.inv(matrix), and linalg.eig(matrix)
> >> >> operations. Now I am interested in allowing arbitrary precision. I
> >> >> have tried gmpy, bigfloat, mpmath, and decimal but I have been unable
> >> >> to easily implement any with my current program. I suspect I have to
> >> >> change some commands but I am unsure what.
>
> >> >> My question is which of the arbitrary precision implementations will
> >> >> most easily handle linear algebra? I don't care about speed, just ease
> >> >> of use. Online tutorials for arbitrary precision linear algebra
> >> >> operations would be useful.
>
> >> >> For example, it looks like mpmath can handle matrix operations
> >> >>http://fredrik-j.blogspot.com/search?q=matrix
> >> >> but I was unable to find a clear tutorial. The tutorials for most of
> >> >> the arbitrary precision implementations demonstrate simple scalar
> >> >> examples.
>
> >> >> Thanks in advance
>
> >> > Have you looked at Sage[0]? I don't know for a fact, but you should be
> >> > able to define a matrix over RealField(precision_in_bits) and then
> >> > take the eigenvalue of it. I don't know if it will actually produce
> >> > the precision you need though.
>
> >> > Geremy Condra
>
> >> Apologies, forgot the links:
>
> >>http://www.sagemath.org/doc/constructions/linear_algebra.htmlhttp://w...
>
> >> Geremy Condra
>
> > I'm not sufficiently familiar with Sage, but from
> >http://www.sagemath.org/doc/constructions/linear_algebra.html
>
> > "currently Sage does not implement multiprecision numerical
> > eigenvalues/eigenvectors"
>
> > I'll ask on the Sage forums about this. In the mean time, I'm still
> > trying to get arbitrary precision linear algebra in Python
>
> I'd suggest you read that slightly more carefully. It's speaking
> specifically of RR and CC, ie, double-width reals and complex values.
> Using RealField and ComplexField- the arbitrary precision real and
> complex fields- seems to be working. Using the earlier example:
>
> sage: M1 = Matrix(RealField(1000), [[0, 2], [1, 0]])
> sage: M2 = Matrix(RR, [[0, 2], [1, 0]])
> sage: M1.eigenvalues()
> [1.414213562373095048801688724209698078569671875376948073176679737990732478 462107038850387534327641572735013846230912297024924836055850737212644121497 099935831413222665927505592755799950501152782060571470109559971605970274534 596862014728517418640889198609552329230484308714321450839762603627995251407 99,
> -1.414213562373095048801688724209698078569671875376948073176679737990732478 462107038850387534327641572735013846230912297024924836055850737212644121497 099935831413222665927505592755799950501152782060571470109559971605970274534 596862014728517418640889198609552329230484308714321450839762603627995251407 99]
> sage: M2.eigenvalues()
> [1.41421356237310, -1.41421356237310]
>
> Converting the first of the latter values to an element of
> RealField(1000) yields much what I would expect from higher precision
> arithmetic:
>
>  R = RealField(1000)
> sage: x = M1.eigenvalues()[0]
> sage: y = R(M2.eigenvalues()[0])
> sage: x
> 1.4142135623730950488016887242096980785696718753769480731766797379907324784 621070388503875343276415727350138462309122970249248360558507372126441214970 999358314132226659275055927557999505011527820605714701095599716059702745345 968620147285174186408891986095523292304843087143214508397626036279952514079 9
> sage: y
> 1.4142135623730951454746218587388284504413604736328125000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000 0
>
> So, while I don't know for a fact that it's using the precision you
> need, it certainly does seem to be using high precision arithmetic
> here. Furthermore, repeating it for various precisions seems to
> increase the difference, as would be expected from better
> approximations, and the number of digits in the result is consistent
> with the interpretation that it is using the specified precision.
>
> All of this to say that it seems to be doing what you want it to do.
>
> Geremy Condra

Hello. I was able to install Sage 4.6.1 and get your example to work.
I will update this thread once I get my program to work with Sage.



More information about the Python-list mailing list