summaryrefslogtreecommitdiff
path: root/numpy/polynomial
diff options
context:
space:
mode:
authorCharles Harris <charlesr.harris@gmail.com>2010-08-15 21:06:27 +0000
committerCharles Harris <charlesr.harris@gmail.com>2010-08-15 21:06:27 +0000
commit3ade0a810b185383e97428e8c6365da1951de436 (patch)
tree78b0cf0900368372c62ca395bd098888743a9fcf /numpy/polynomial
parent0a0248000491b40e03f29a98055a7546316cc92f (diff)
downloadnumpy-3ade0a810b185383e97428e8c6365da1951de436.tar.gz
Merge branch 'poly'
Diffstat (limited to 'numpy/polynomial')
-rw-r--r--numpy/polynomial/chebyshev.py67
-rw-r--r--numpy/polynomial/tests/test_chebyshev.py33
2 files changed, 99 insertions, 1 deletions
diff --git a/numpy/polynomial/chebyshev.py b/numpy/polynomial/chebyshev.py
index 61d7c7f68..23f8a728f 100644
--- a/numpy/polynomial/chebyshev.py
+++ b/numpy/polynomial/chebyshev.py
@@ -36,6 +36,8 @@ Misc Functions
- `chebroots` -- find the roots of a Chebyshev series.
- `chebvander` -- Vandermonde-like matrix for Chebyshev polynomials.
- `chebfit` -- least-squares fit returning a Chebyshev series.
+- `chebpts1` -- Chebyshev points of the first kind.
+- `chebpts2` -- Chebyshev points of the second kind.
- `chebtrim` -- trim leading coefficients from a Chebyshev series.
- `chebline` -- Chebyshev series of given straight line.
- `cheb2poly` -- convert a Chebyshev series to a polynomial.
@@ -78,7 +80,8 @@ from __future__ import division
__all__ = ['chebzero', 'chebone', 'chebx', 'chebdomain', 'chebline',
'chebadd', 'chebsub', 'chebmulx', 'chebmul', 'chebdiv', 'chebval',
'chebder', 'chebint', 'cheb2poly', 'poly2cheb', 'chebfromroots',
- 'chebvander', 'chebfit', 'chebtrim', 'chebroots', 'Chebyshev']
+ 'chebvander', 'chebfit', 'chebtrim', 'chebroots', 'chebpts1',
+ 'chebpts2', 'Chebyshev']
import numpy as np
import numpy.linalg as la
@@ -1332,6 +1335,68 @@ def chebroots(cs):
return roots
+def chebpts1(npts):
+ """Chebyshev points of the first kind.
+
+ Chebyshev points of the first kind are the set ``{cos(x_k)}``,
+ where ``x_k = pi*(k + .5)/npts`` for k in ``range(npts}``.
+
+ Parameters
+ ----------
+ npts: int
+ Number of sample points desired.
+
+ Returns
+ -------
+ pts: ndarray
+ The Chebyshev points of the second kind.
+
+ Notes
+ -----
+ .. versionadded:: 1.5.0
+
+ """
+ _npts = int(npts)
+ if _npts != npts:
+ raise ValueError("npts must be integer")
+ if _npts < 1:
+ raise ValueError("npts must be >= 1")
+
+ x = np.linspace(-np.pi, 0, _npts, endpoint=False) + np.pi/(2*_npts)
+ return np.cos(x)
+
+
+def chebpts2(npts):
+ """Chebyshev points of the second kind.
+
+ Chebyshev points of the second kind are the set ``{cos(x_k)}``,
+ where ``x_k = pi*/(npts - 1)`` for k in ``range(npts}``.
+
+ Parameters
+ ----------
+ npts: int
+ Number of sample points desired.
+
+ Returns
+ -------
+ pts: ndarray
+ The Chebyshev points of the second kind.
+
+ Notes
+ -----
+ .. versionadded:: 1.5.0
+
+ """
+ _npts = int(npts)
+ if _npts != npts:
+ raise ValueError("npts must be integer")
+ if _npts < 2:
+ raise ValueError("npts must be >= 2")
+
+ x = np.linspace(-np.pi, 0, _npts)
+ return np.cos(x)
+
+
#
# Chebyshev series class
#
diff --git a/numpy/polynomial/tests/test_chebyshev.py b/numpy/polynomial/tests/test_chebyshev.py
index cc23ba701..b80ff61de 100644
--- a/numpy/polynomial/tests/test_chebyshev.py
+++ b/numpy/polynomial/tests/test_chebyshev.py
@@ -345,6 +345,39 @@ class TestMisc(TestCase) :
for i in range(10) :
assert_equal(ch.poly2cheb(Tlist[i]), [0]*i + [1])
+ def test_chebpts1(self):
+ #test exceptions
+ yield assert_raises(ValueError, ch.chebpts1, 1.5)
+ yield assert_raises(ValueError, ch.chebpts1, 0)
+
+ #test points
+ tgt = [0]
+ yield assert_almost_equal(ch.chebpts1(1), tgt)
+ tgt = [-0.70710678118654746, 0.70710678118654746]
+ yield assert_almost_equal(ch.chebpts1(2), tgt)
+ tgt = [-0.86602540378443871, 0, 0.86602540378443871]
+ yield assert_almost_equal(ch.chebpts1(3), tgt)
+ tgt = [-0.9238795325, -0.3826834323, 0.3826834323, 0.9238795325]
+ yield assert_almost_equal(ch.chebpts1(4), tgt)
+
+
+ def test_chebpts2(self):
+ #test exceptions
+ yield assert_raises(ValueError, ch.chebpts2, 1.5)
+ yield assert_raises(ValueError, ch.chebpts2, 1)
+
+ #test points
+ tgt = [-1, 1]
+ yield assert_almost_equal(ch.chebpts2(2), tgt)
+ tgt = [-1, 0, 1]
+ yield assert_almost_equal(ch.chebpts2(3), tgt)
+ tgt = [-1 -0.5, .5, 1]
+ yield assert_almost_equal(ch.chebpts2(4), tgt)
+ tgt = [-1.0, -0.707106781187, 0, 0.707106781187, 1.0]
+ yield assert_almost_equal(ch.chebpts2(5), tgt)
+
+
+
class TestChebyshevClass(TestCase) :