diff options
Diffstat (limited to 'numpy/polynomial/chebyshev.py')
-rw-r--r-- | numpy/polynomial/chebyshev.py | 47 |
1 files changed, 29 insertions, 18 deletions
diff --git a/numpy/polynomial/chebyshev.py b/numpy/polynomial/chebyshev.py index 662f664a9..2b6d7b4bb 100644 --- a/numpy/polynomial/chebyshev.py +++ b/numpy/polynomial/chebyshev.py @@ -846,25 +846,29 @@ def chebder(cs, m=1, scl=1) : array([ 12., 96.]) """ - # cs is a trimmed copy - [cs] = pu.as_series([cs]) - if m < 0 : - raise ValueError, "The order of derivation must be positive" + cnt = int(m) + + if cnt != m: + raise ValueError, "The order of derivation must be integer" + if cnt < 0 : + raise ValueError, "The order of derivation must be non-negative" if not np.isscalar(scl) : raise ValueError, "The scl parameter must be a scalar" - if m == 0 : + # cs is a trimmed copy + [cs] = pu.as_series([cs]) + if cnt == 0: return cs - elif m >= len(cs) : + elif cnt >= len(cs): return cs[:1]*0 else : zs = _cseries_to_zseries(cs) - for i in range(m) : + for i in range(cnt): zs = _zseries_der(zs)*scl return _zseries_to_cseries(zs) -def chebint(cs, m=1, k=[], lbnd=0, scl=1) : +def chebint(cs, m=1, k=[], lbnd=0, scl=1): """ Integrate a Chebyshev series. @@ -941,11 +945,15 @@ def chebint(cs, m=1, k=[], lbnd=0, scl=1) : array([-1., 1., -1., -1.]) """ + cnt = int(m) if np.isscalar(k) : k = [k] - if m < 1 : - raise ValueError, "The order of integration must be positive" - if len(k) > m : + + if cnt != m: + raise ValueError, "The order of integration must be integer" + if cnt < 0 : + raise ValueError, "The order of integration must be non-negative" + if len(k) > cnt : raise ValueError, "Too many integration constants" if not np.isscalar(lbnd) : raise ValueError, "The lbnd parameter must be a scalar" @@ -954,13 +962,16 @@ def chebint(cs, m=1, k=[], lbnd=0, scl=1) : # cs is a trimmed copy [cs] = pu.as_series([cs]) - k = list(k) + [0]*(m - len(k)) - for i in range(m) : - zs = _cseries_to_zseries(cs)*scl - zs = _zseries_int(zs) - cs = _zseries_to_cseries(zs) - cs[0] += k[i] - chebval(lbnd, cs) - return cs + if cnt == 0: + return cs + else: + k = list(k) + [0]*(cnt - len(k)) + for i in range(cnt) : + zs = _cseries_to_zseries(cs)*scl + zs = _zseries_int(zs) + cs = _zseries_to_cseries(zs) + cs[0] += k[i] - chebval(lbnd, cs) + return cs def chebval(x, cs): """Evaluate a Chebyshev series. |