[Numpy-svn] r8643 - in branches/1.5.x: doc/release numpy/polynomial numpy/polynomial/tests

numpy-svn@scip... numpy-svn@scip...
Sun Aug 15 16:12:27 CDT 2010


Author: charris
Date: 2010-08-15 16:12:27 -0500 (Sun, 15 Aug 2010)
New Revision: 8643

Modified:
   branches/1.5.x/doc/release/1.5.0-notes.rst
   branches/1.5.x/numpy/polynomial/chebyshev.py
   branches/1.5.x/numpy/polynomial/tests/test_chebyshev.py
Log:
ENH: Backport r8641-r8642 from trunk.


Modified: branches/1.5.x/doc/release/1.5.0-notes.rst
===================================================================
--- branches/1.5.x/doc/release/1.5.0-notes.rst	2010-08-15 21:06:29 UTC (rev 8642)
+++ branches/1.5.x/doc/release/1.5.0-notes.rst	2010-08-15 21:12:27 UTC (rev 8643)
@@ -111,6 +111,7 @@
 * Weights can be used in both chebfit and Chebyshev.fit
 * A linspace method has been added to the Chebyshev class to ease plotting.
 * The chebmulx function was added.
+* Added functions for the Chebyshev points of the first and second kind.
 
 
 histogram

Modified: branches/1.5.x/numpy/polynomial/chebyshev.py
===================================================================
--- branches/1.5.x/numpy/polynomial/chebyshev.py	2010-08-15 21:06:29 UTC (rev 8642)
+++ branches/1.5.x/numpy/polynomial/chebyshev.py	2010-08-15 21:12:27 UTC (rev 8643)
@@ -36,6 +36,8 @@
 - `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 @@
 __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 @@
     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
 #

Modified: branches/1.5.x/numpy/polynomial/tests/test_chebyshev.py
===================================================================
--- branches/1.5.x/numpy/polynomial/tests/test_chebyshev.py	2010-08-15 21:06:29 UTC (rev 8642)
+++ branches/1.5.x/numpy/polynomial/tests/test_chebyshev.py	2010-08-15 21:12:27 UTC (rev 8643)
@@ -345,7 +345,40 @@
         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) :
 
     p1 = ch.Chebyshev([1,2,3])



More information about the Numpy-svn mailing list