On Mar 2, 1:34 pm, geremy condra <debat...@gmail.com> wrote: > On Wed, Mar 2, 2011 at 10:47 AM, Ben123 <ben.is.loca...@gmail.com> wrote: > > On Mar 2, 12:22 pm, geremy condra <debat...@gmail.com> wrote: > >> On Wed, Mar 2, 2011 at 10:21 AM, geremy condra <debat...@gmail.com> wrote: > >> > On Wed, Mar 2, 2011 at 6:42 AM, Ben123 <ben.is.loca...@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. -- http://mail.python.org/mailman/listinfo/python-list