diff options
author | Charles Harris <charlesr.harris@gmail.com> | 2013-06-20 16:49:49 -0600 |
---|---|---|
committer | Charles Harris <charlesr.harris@gmail.com> | 2013-06-20 17:31:35 -0600 |
commit | 12e06a261e8ea6b08002de8e9933fd43e5465df9 (patch) | |
tree | 527a2df97d58a190de018b4a917f3be06908f541 /numpy | |
parent | b3755926f5e5dc9fde273a8bf53bd98238e8e2b8 (diff) | |
download | numpy-12e06a261e8ea6b08002de8e9933fd43e5465df9.tar.gz |
BUG: Campanion Matrix was scalar, not matrix for degree 1.
The companion matrices returned by the various polynomial types was
a scalar in the degree one case instead of a 2-D array. Fix that and
add a test to check for that result.
Closes #3459.
Diffstat (limited to 'numpy')
-rw-r--r-- | numpy/polynomial/chebyshev.py | 2 | ||||
-rw-r--r-- | numpy/polynomial/hermite.py | 2 | ||||
-rw-r--r-- | numpy/polynomial/hermite_e.py | 2 | ||||
-rw-r--r-- | numpy/polynomial/laguerre.py | 2 | ||||
-rw-r--r-- | numpy/polynomial/legendre.py | 2 | ||||
-rw-r--r-- | numpy/polynomial/polynomial.py | 3 | ||||
-rw-r--r-- | numpy/polynomial/tests/test_chebyshev.py | 16 | ||||
-rw-r--r-- | numpy/polynomial/tests/test_hermite.py | 16 | ||||
-rw-r--r-- | numpy/polynomial/tests/test_hermite_e.py | 16 | ||||
-rw-r--r-- | numpy/polynomial/tests/test_laguerre.py | 16 | ||||
-rw-r--r-- | numpy/polynomial/tests/test_legendre.py | 16 | ||||
-rw-r--r-- | numpy/polynomial/tests/test_polynomial.py | 15 |
12 files changed, 102 insertions, 6 deletions
diff --git a/numpy/polynomial/chebyshev.py b/numpy/polynomial/chebyshev.py index dc1b27d76..db1b637fd 100644 --- a/numpy/polynomial/chebyshev.py +++ b/numpy/polynomial/chebyshev.py @@ -1795,7 +1795,7 @@ def chebcompanion(c): if len(c) < 2: raise ValueError('Series must have maximum degree of at least 1.') if len(c) == 2: - return np.array(-c[0]/c[1]) + return np.array([[-c[0]/c[1]]]) n = len(c) - 1 mat = np.zeros((n, n), dtype=c.dtype) diff --git a/numpy/polynomial/hermite.py b/numpy/polynomial/hermite.py index 9051bf533..13b9e6845 100644 --- a/numpy/polynomial/hermite.py +++ b/numpy/polynomial/hermite.py @@ -1573,7 +1573,7 @@ def hermcompanion(c): if len(c) < 2: raise ValueError('Series must have maximum degree of at least 1.') if len(c) == 2: - return np.array(-.5*c[0]/c[1]) + return np.array([[-.5*c[0]/c[1]]]) n = len(c) - 1 mat = np.zeros((n, n), dtype=c.dtype) diff --git a/numpy/polynomial/hermite_e.py b/numpy/polynomial/hermite_e.py index 13810c97f..9f10403dd 100644 --- a/numpy/polynomial/hermite_e.py +++ b/numpy/polynomial/hermite_e.py @@ -1570,7 +1570,7 @@ def hermecompanion(c): if len(c) < 2: raise ValueError('Series must have maximum degree of at least 1.') if len(c) == 2: - return np.array(-c[0]/c[1]) + return np.array([[-c[0]/c[1]]]) n = len(c) - 1 mat = np.zeros((n, n), dtype=c.dtype) diff --git a/numpy/polynomial/laguerre.py b/numpy/polynomial/laguerre.py index 1cc316bca..ea805e146 100644 --- a/numpy/polynomial/laguerre.py +++ b/numpy/polynomial/laguerre.py @@ -1571,7 +1571,7 @@ def lagcompanion(c): if len(c) < 2: raise ValueError('Series must have maximum degree of at least 1.') if len(c) == 2: - return np.array(1 + c[0]/c[1]) + return np.array([[1 + c[0]/c[1]]]) n = len(c) - 1 mat = np.zeros((n, n), dtype=c.dtype) diff --git a/numpy/polynomial/legendre.py b/numpy/polynomial/legendre.py index 1440cdf87..c7a1f2dd2 100644 --- a/numpy/polynomial/legendre.py +++ b/numpy/polynomial/legendre.py @@ -1596,7 +1596,7 @@ def legcompanion(c): if len(c) < 2: raise ValueError('Series must have maximum degree of at least 1.') if len(c) == 2: - return np.array(-c[0]/c[1]) + return np.array([[-c[0]/c[1]]]) n = len(c) - 1 mat = np.zeros((n, n), dtype=c.dtype) diff --git a/numpy/polynomial/polynomial.py b/numpy/polynomial/polynomial.py index 7a0b36cde..0b044e8e8 100644 --- a/numpy/polynomial/polynomial.py +++ b/numpy/polynomial/polynomial.py @@ -39,6 +39,7 @@ Misc Functions - `polyvander` -- Vandermonde-like matrix for powers. - `polyvander2d` -- Vandermonde-like matrix for 2D power series. - `polyvander3d` -- Vandermonde-like matrix for 3D power series. +- `polycompanion` -- companion matrix in power series form. - `polyfit` -- least-squares fit returning a polynomial. - `polytrim` -- trim leading coefficients from a polynomial. - `polyline` -- polynomial representing given straight line. @@ -1417,7 +1418,7 @@ def polycompanion(c): if len(c) < 2 : raise ValueError('Series must have maximum degree of at least 1.') if len(c) == 2: - return np.array(-c[0]/c[1]) + return np.array([[-c[0]/c[1]]]) n = len(c) - 1 mat = np.zeros((n, n), dtype=c.dtype) diff --git a/numpy/polynomial/tests/test_chebyshev.py b/numpy/polynomial/tests/test_chebyshev.py index 23a17b464..367d81f58 100644 --- a/numpy/polynomial/tests/test_chebyshev.py +++ b/numpy/polynomial/tests/test_chebyshev.py @@ -440,6 +440,22 @@ class TestFitting(TestCase): x = [1, 1j, -1, -1j] assert_almost_equal(cheb.chebfit(x, x, 1), [0, 1]) + +class TestCompanion(TestCase): + + def test_raises(self): + assert_raises(ValueError, cheb.chebcompanion, []) + assert_raises(ValueError, cheb.chebcompanion, [1]) + + def test_dimensions(self): + for i in range(1, 5): + coef = [0]*i + [1] + assert_(cheb.chebcompanion(coef).shape == (i, i)) + + def test_linear_root(self): + assert_(cheb.chebcompanion([1, 2])[0, 0] == -.5) + + class TestGauss(TestCase): def test_100(self): diff --git a/numpy/polynomial/tests/test_hermite.py b/numpy/polynomial/tests/test_hermite.py index 785f9b255..327283d0e 100644 --- a/numpy/polynomial/tests/test_hermite.py +++ b/numpy/polynomial/tests/test_hermite.py @@ -430,6 +430,22 @@ class TestFitting(TestCase): x = [1, 1j, -1, -1j] assert_almost_equal(herm.hermfit(x, x, 1), [0, .5]) + +class TestCompanion(TestCase): + + def test_raises(self): + assert_raises(ValueError, herm.hermcompanion, []) + assert_raises(ValueError, herm.hermcompanion, [1]) + + def test_dimensions(self): + for i in range(1, 5): + coef = [0]*i + [1] + assert_(herm.hermcompanion(coef).shape == (i, i)) + + def test_linear_root(self): + assert_(herm.hermcompanion([1, 2])[0, 0] == -.25) + + class TestGauss(TestCase): def test_100(self): diff --git a/numpy/polynomial/tests/test_hermite_e.py b/numpy/polynomial/tests/test_hermite_e.py index 84c952578..404a46fc7 100644 --- a/numpy/polynomial/tests/test_hermite_e.py +++ b/numpy/polynomial/tests/test_hermite_e.py @@ -427,6 +427,22 @@ class TestFitting(TestCase): x = [1, 1j, -1, -1j] assert_almost_equal(herme.hermefit(x, x, 1), [0, 1]) + +class TestCompanion(TestCase): + + def test_raises(self): + assert_raises(ValueError, herme.hermecompanion, []) + assert_raises(ValueError, herme.hermecompanion, [1]) + + def test_dimensions(self): + for i in range(1, 5): + coef = [0]*i + [1] + assert_(herme.hermecompanion(coef).shape == (i, i)) + + def test_linear_root(self): + assert_(herme.hermecompanion([1, 2])[0, 0] == -.5) + + class TestGauss(TestCase): def test_100(self): diff --git a/numpy/polynomial/tests/test_laguerre.py b/numpy/polynomial/tests/test_laguerre.py index b7268fe59..38fcce299 100644 --- a/numpy/polynomial/tests/test_laguerre.py +++ b/numpy/polynomial/tests/test_laguerre.py @@ -425,6 +425,22 @@ class TestFitting(TestCase): x = [1, 1j, -1, -1j] assert_almost_equal(lag.lagfit(x, x, 1), [1, -1]) + +class TestCompanion(TestCase): + + def test_raises(self): + assert_raises(ValueError, lag.lagcompanion, []) + assert_raises(ValueError, lag.lagcompanion, [1]) + + def test_dimensions(self): + for i in range(1, 5): + coef = [0]*i + [1] + assert_(lag.lagcompanion(coef).shape == (i, i)) + + def test_linear_root(self): + assert_(lag.lagcompanion([1, 2])[0, 0] == 1.5) + + class TestGauss(TestCase): def test_100(self): diff --git a/numpy/polynomial/tests/test_legendre.py b/numpy/polynomial/tests/test_legendre.py index ae86f65b6..379bdee31 100644 --- a/numpy/polynomial/tests/test_legendre.py +++ b/numpy/polynomial/tests/test_legendre.py @@ -428,6 +428,22 @@ class TestFitting(TestCase): x = [1, 1j, -1, -1j] assert_almost_equal(leg.legfit(x, x, 1), [0, 1]) + +class TestCompanion(TestCase): + + def test_raises(self): + assert_raises(ValueError, leg.legcompanion, []) + assert_raises(ValueError, leg.legcompanion, [1]) + + def test_dimensions(self): + for i in range(1, 5): + coef = [0]*i + [1] + assert_(leg.legcompanion(coef).shape == (i, i)) + + def test_linear_root(self): + assert_(leg.legcompanion([1, 2])[0, 0] == -.5) + + class TestGauss(TestCase): def test_100(self): diff --git a/numpy/polynomial/tests/test_polynomial.py b/numpy/polynomial/tests/test_polynomial.py index 3d9519679..583872978 100644 --- a/numpy/polynomial/tests/test_polynomial.py +++ b/numpy/polynomial/tests/test_polynomial.py @@ -383,6 +383,21 @@ class TestVander(TestCase): assert_(van.shape == (1, 5, 24)) +class TestCompanion(TestCase): + + def test_raises(self): + assert_raises(ValueError, poly.polycompanion, []) + assert_raises(ValueError, poly.polycompanion, [1]) + + def test_dimensions(self): + for i in range(1, 5): + coef = [0]*i + [1] + assert_(poly.polycompanion(coef).shape == (i, i)) + + def test_linear_root(self): + assert_(poly.polycompanion([1, 2])[0, 0] == -.5) + + class TestMisc(TestCase) : def test_polyfromroots(self) : |