On Mon, Dec 12, 2011 at 10:17 AM, Gregor Thalhammer < gregor.thalham...@gmail.com> wrote:
> > Am 12.12.2011 um 15:04 schrieb LASAGNA DAVIDE: > > > Hi, > > > > I have written a class for polynomials with negative > > exponents like: > > > > p(x) = a0 + a1*x**-1 + ... + an*x**-n > > > > The code is this one: > > > > class NegativeExpPolynomial( object ): > > def __init__ ( self, coeffs ): > > self.coeffs = np.array( coeffs ) > > > > def __call__( self, x ): > > return sum( (c*x**(-i) for i, c in enumerate( > > self.coeffs ) ) ) > > > > where coeffs = [a0, a1, ..., an]. > > > > I find that the way i evaluate the polynomial is kind of > > *slow*, especially for polynomial with order larger than > > ~200 and for arrays x large enough. > > I fear that such high orders create a lot of troubles since evaluating > them is very sensitive to numerical errors. > > > Do you have suggestions on how to speed up this code? > > > > Your polynomials with negative exponents are equivalent to a polynomial > with positive exponents, but evaluated at 1/x. Therefore you can make use > of the efficient polynomial functions of numpy. Try > > np.polyval(self.coeffs, x) > > Or numpy.polynomial.polynomial.polyval, which will use the coefficients in the same order. Or you could subclass numpy.polynomial.Polynomial and override the call to use 1/x instead of x. Chuck
_______________________________________________ NumPy-Discussion mailing list NumPy-Discussion@scipy.org http://mail.scipy.org/mailman/listinfo/numpy-discussion