diff options
-rw-r--r-- | numpy/polynomial/chebyshev.py | 67 | ||||
-rw-r--r-- | numpy/polynomial/tests/test_chebyshev.py | 33 |
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) : |