[Numpy-tickets] [NumPy] #664: more accurate representation of polynomials

NumPy numpy-tickets@scipy....
Fri Feb 22 14:25:38 CST 2008

#664: more accurate representation of polynomials
 Reporter:  pv           |       Owner:  somebody
     Type:  enhancement  |      Status:  new     
 Priority:  normal       |   Milestone:  1.1     
Component:  numpy.lib    |     Version:  none    
 Severity:  normal       |    Keywords:          
 numpy.poly1d represents polynomials by storing the polynomial
 coefficients. I believe that for high-order polynomials, this is not
 always the optimal way to represent them.

 Consider one of the orthogonal polynomial functions in scipy.special:
 >>> import scipy, scipy.special
 >>> for n in xrange(0,70,10): print n,
 scipy.special.chebyt(n)(scipy.cos(z)) - scipy.cos(n*z)
 0 0.0
 10 3.80806497446e-14
 20 1.94978477808e-10
 30 2.65364360286e-06
 40 -0.0237953834481
 50 -114.714051465
 60 272370.465462
 It can be seen that as the order of the polynomial increases, the accuracy
 of evaluation decreases very rapidly, and for n > 40 the result is
 basically numerical noise.

 The scipy.special.chebyt function generates a poly1d object by passing the
 roots of the polynomial to poly1d. In poly1d.__init__, polynomial
 coefficients are calculated from the roots. For high-order Chebyshev
 polynomials, the coefficients are large and of varying sign which leads to
 loss of precision when evaluating the polynomial.

 It might be useful if there was a poly1d-compatible object that would
 retain a more accurate representation of the polynomial. (Using the roots,
 or a Horner scheme?) This would come useful when more information than the
 coefficients is initially available.

 See also http://scipy.org/scipy/scipy/ticket/581

Ticket URL: <http://scipy.org/scipy/numpy/ticket/664>
NumPy <http://projects.scipy.org/scipy/numpy>
The fundamental package needed for scientific computing with Python.

More information about the Numpy-tickets mailing list