[Numpy-tickets] [NumPy] #387: Small polynomial bug (with patch suggestion)
NumPy
numpy-tickets at scipy.net
Wed Nov 22 07:41:06 CST 2006
#387: Small polynomial bug (with patch suggestion)
----------------------+-----------------------------------------------------
Reporter: clovisgo | Owner: somebody
Type: defect | Status: new
Priority: normal | Milestone: 1.0 Release
Component: Other | Version:
Severity: normal | Keywords:
----------------------+-----------------------------------------------------
{{{
Subject: Small bug in polynomial
There seems to exist a small bug in the numpy.polynomial functions:
Consider the following script:
################################
import numpy
poly1 = numpy.poly1d([1.0])
poly2 = numpy.poly1d([1.0, 1.0])
poly3 = numpy.poly1d([2.0,1.0])
print "Poly1 is"
print poly1
print type(poly1)
print "Poly2 is"
print poly2
print type(poly2)
print "Poly3 is"
print poly3
print type(poly3)
print "Poly1+Poly2 = "
auxvar = numpy.polyadd(poly1,poly2)
print auxvar
print type(auxvar)
print "Poly2+Poly3 = "
auxvar = numpy.polyadd(poly2,poly3)
print auxvar
print type(auxvar)
################################
Raw output is given below:
Poly1 is
1
<class 'numpy.lib.polynomial.poly1d'>
Poly2 is
1 x + 1
<class 'numpy.lib.polynomial.poly1d '>
Poly3 is
2 x + 1
<class 'numpy.lib.polynomial.poly1d'>
Poly1+Poly2 =
1 x + 2
<class 'numpy.lib.polynomial.poly1d'>
Poly2+Poly3 =
[ 3. 2.]
<type 'numpy.ndarray'>
################################
Comments. The last test (Poly2+Poly3) is bad!
The result shoud be:
3 x + 2
and the type should be
<class 'numpy.lib.polynomial.poly1d'>
and not:
<type ' numpy.ndarray'>
The same problem exists with polysub.
The solution seems to be simple. The original
code for the polyadd function (with line numbers) is:
1 def polyadd(a1, a2):
2 """Adds two polynomials represented as sequences
3 """
4 truepoly = (isinstance(a1, poly1d) or isinstance(a2, poly1d))
5 a1 = atleast_1d(a1)
6 a2 = atleast_1d(a2)
7 diff = len(a2) - len(a1)
8 if diff == 0:
9 return a1 + a2
10 elif diff > 0:
11 zr = NX.zeros(diff, a1.dtype)
12 val = NX.concatenate((zr, a1)) + a2
13 else:
14 zr = NX.zeros(abs(diff), a2.dtype)
15 val = a1 + NX.concatenate((zr, a2))
16 if truepoly:
17 val = poly1d(val)
18 return val
In order to correct the problem is sufficient
to replace the original line #9 by:
9 val = a1 + a2
If this change is made, the return value
will be an array (if input variables are
arrays) or a poly1d (if one of the input
variables are polynomials).
A similar change should be made for the polysub function.
Clovis
}}}
--
Ticket URL: <http://projects.scipy.org/scipy/numpy/ticket/387>
NumPy <http://projects.scipy.org/scipy/numpy>
The fundamental package needed for scientific computing with Python.
More information about the Numpy-tickets
mailing list