[Maxima] bfloat roots of polynomials

Raymond Toy (RT/EUS) raymond.toy at ericsson.com
Wed Sep 5 08:46:58 CDT 2007


Richard Fateman wrote:
> Rat() and ratcoef are so much faster, that I would suggest the user consider
> using rat() prior to calling this function, if the coefficients are in fact
> exact or floats and keepfloat:true is the case.  If they are bigfloats or
> who knows what else  (quad-double? ) that rat might not know about, maybe
> expand is better..
> list_of_poly_coeffs(p,x) := (if(ratp(p) then
> makelist(ratcoef(p,x,k),k,0,hipow(p,x)) else (p : expand(p),
> makelist(coeff(p,x,k),k,0,hipow(p,x)))$ 

With fixes and suggestions from Stavros, Barton, and Richard, I've fixed 
up the root finder, and you can find a copy at 
http://common-lisp.net/~rtoy/jtroot3.mac

polyroots(p,x) finds the roots of the polynomial p in the variable x.

poly_root_error(x, p, r) gives an estimate, if possible, of the 
approximate error in the roots.  r is a list of roots, p is the 
polynomial, and x is the variable.

I've added 5 tests of some special polynomials given in TOMS 419.  These 
work.  I also tested P(7), a 64-th order polynomial, from Adam Majewski. 
  This appears to work, and all roots have magnitude less than 2.  (I 
used fpprec = 64.  32 might work.)

I don't have any plans to really do anything else.  It was a fun 
project.  If someone one wants to add this to maxima in some contrib or 
share package, you have my permission.  The code is public domain.

Ray


More information about the Maxima mailing list