|
|
@ -21,7 +21,7 @@ from __future__ import absolute_import
|
|
|
|
import warnings # @UnusedImport
|
|
|
|
import warnings # @UnusedImport
|
|
|
|
from functools import reduce
|
|
|
|
from functools import reduce
|
|
|
|
from numpy.polynomial import polyutils as pu
|
|
|
|
from numpy.polynomial import polyutils as pu
|
|
|
|
from .plotbackend import plotbackend as plt
|
|
|
|
from wafo.plotbackend import plotbackend as plt
|
|
|
|
import numpy as np
|
|
|
|
import numpy as np
|
|
|
|
from numpy import (newaxis, arange, pi)
|
|
|
|
from numpy import (newaxis, arange, pi)
|
|
|
|
from scipy.fftpack import dct, idct as _idct
|
|
|
|
from scipy.fftpack import dct, idct as _idct
|
|
|
@ -70,33 +70,33 @@ def polyint(p, m=1, k=None):
|
|
|
|
Examples
|
|
|
|
Examples
|
|
|
|
--------
|
|
|
|
--------
|
|
|
|
The defining property of the antiderivative:
|
|
|
|
The defining property of the antiderivative:
|
|
|
|
|
|
|
|
>>> import wafo.polynomial as wp
|
|
|
|
>>> p = np.poly1d([1,1,1])
|
|
|
|
>>> p = wp.poly1d([1,1,1])
|
|
|
|
>>> P = np.polyint(p)
|
|
|
|
>>> P = wp.polyint(p)
|
|
|
|
>>> P
|
|
|
|
>>> P
|
|
|
|
poly1d([ 0.33333333, 0.5 , 1. , 0. ])
|
|
|
|
poly1d([ 0.33333333, 0.5 , 1. , 0. ])
|
|
|
|
>>> np.polyder(P) == p
|
|
|
|
>>> wp.polyder(P) == p
|
|
|
|
True
|
|
|
|
True
|
|
|
|
|
|
|
|
|
|
|
|
The integration constants default to zero, but can be specified:
|
|
|
|
The integration constants default to zero, but can be specified:
|
|
|
|
|
|
|
|
|
|
|
|
>>> P = np.polyint(p, 3)
|
|
|
|
>>> P = wp.polyint(p, 3)
|
|
|
|
>>> P(0)
|
|
|
|
>>> P(0)
|
|
|
|
0.0
|
|
|
|
0.0
|
|
|
|
>>> np.polyder(P)(0)
|
|
|
|
>>> wp.polyder(P)(0)
|
|
|
|
0.0
|
|
|
|
0.0
|
|
|
|
>>> np.polyder(P, 2)(0)
|
|
|
|
>>> wp.polyder(P, 2)(0)
|
|
|
|
0.0
|
|
|
|
0.0
|
|
|
|
>>> P = np.polyint(p, 3, k=[6, 5, 3])
|
|
|
|
>>> P = wp.polyint(p, 3, k=[6, 5, 3])
|
|
|
|
>>> P
|
|
|
|
>>> P
|
|
|
|
poly1d([ 0.01666667, 0.04166667, 0.16666667, 3. , 5. , 3. ])
|
|
|
|
poly1d([ 0.01666667, 0.04166667, 0.16666667, 3. , 5. , 3. ])
|
|
|
|
|
|
|
|
|
|
|
|
Note that 3 = 6 / 2!, and that the constants are given in the order of
|
|
|
|
Note that 3 = 6 / 2!, and that the constants are given in the order of
|
|
|
|
integrations. Constant of the highest-order polynomial term comes first:
|
|
|
|
integrations. Constant of the highest-order polynomial term comes first:
|
|
|
|
|
|
|
|
|
|
|
|
>>> np.polyder(P, 2)(0)
|
|
|
|
>>> wp.polyder(P, 2)(0)
|
|
|
|
6.0
|
|
|
|
6.0
|
|
|
|
>>> np.polyder(P, 1)(0)
|
|
|
|
>>> wp.polyder(P, 1)(0)
|
|
|
|
5.0
|
|
|
|
5.0
|
|
|
|
>>> P(0)
|
|
|
|
>>> P(0)
|
|
|
|
3.0
|
|
|
|
3.0
|
|
|
@ -160,9 +160,9 @@ def polyder(p, m=1):
|
|
|
|
Examples
|
|
|
|
Examples
|
|
|
|
--------
|
|
|
|
--------
|
|
|
|
The derivative of the polynomial :math:`x^3 + x^2 + x^1 + 1` is:
|
|
|
|
The derivative of the polynomial :math:`x^3 + x^2 + x^1 + 1` is:
|
|
|
|
|
|
|
|
>>> import wafo.polynomial as wp
|
|
|
|
>>> p = np.poly1d([1,1,1,1])
|
|
|
|
>>> p = wp.poly1d([1,1,1,1])
|
|
|
|
>>> p2 = np.polyder(p)
|
|
|
|
>>> p2 = wp.polyder(p)
|
|
|
|
>>> p2
|
|
|
|
>>> p2
|
|
|
|
poly1d([3, 2, 1])
|
|
|
|
poly1d([3, 2, 1])
|
|
|
|
|
|
|
|
|
|
|
@ -179,11 +179,11 @@ def polyder(p, m=1):
|
|
|
|
|
|
|
|
|
|
|
|
The fourth-order derivative of a 3rd-order polynomial is zero:
|
|
|
|
The fourth-order derivative of a 3rd-order polynomial is zero:
|
|
|
|
|
|
|
|
|
|
|
|
>>> np.polyder(p, 2)
|
|
|
|
>>> wp.polyder(p, 2)
|
|
|
|
poly1d([6, 2])
|
|
|
|
poly1d([6, 2])
|
|
|
|
>>> np.polyder(p, 3)
|
|
|
|
>>> wp.polyder(p, 3)
|
|
|
|
poly1d([6])
|
|
|
|
poly1d([6])
|
|
|
|
>>> np.polyder(p, 4)
|
|
|
|
>>> wp.polyder(p, 4)
|
|
|
|
poly1d([ 0.])
|
|
|
|
poly1d([ 0.])
|
|
|
|
|
|
|
|
|
|
|
|
"""
|
|
|
|
"""
|
|
|
@ -234,15 +234,16 @@ def polydeg(x, y):
|
|
|
|
|
|
|
|
|
|
|
|
Example:
|
|
|
|
Example:
|
|
|
|
-------
|
|
|
|
-------
|
|
|
|
|
|
|
|
>>> import wafo.polynomial as wp
|
|
|
|
>>> x = np.linspace(0,10,300)
|
|
|
|
>>> x = np.linspace(0,10,300)
|
|
|
|
>>> noise = 0.05 * np.random.randn(x.size)
|
|
|
|
>>> noise = 0.05 * np.random.randn(x.size)
|
|
|
|
>>> noise = 0.05 * np.sin(100*x)
|
|
|
|
>>> noise = 0.05 * np.sin(100*x)
|
|
|
|
>>> y = np.sin(x ** 3 / 100) ** 2 + noise
|
|
|
|
>>> y = np.sin(x ** 3 / 100) ** 2 + noise
|
|
|
|
>>> n = polydeg(x,y)
|
|
|
|
>>> n = wp.polydeg(x,y)
|
|
|
|
>>> n
|
|
|
|
>>> n
|
|
|
|
21
|
|
|
|
21
|
|
|
|
|
|
|
|
|
|
|
|
ys = orthofit(x,y,n);
|
|
|
|
ys = wp.orthofit(x,y,n);
|
|
|
|
plt.plot(x, y, '.', x, ys, 'k')
|
|
|
|
plt.plot(x, y, '.', x, ys, 'k')
|
|
|
|
|
|
|
|
|
|
|
|
See also
|
|
|
|
See also
|
|
|
@ -350,16 +351,17 @@ def ortho2poly(p):
|
|
|
|
Examples
|
|
|
|
Examples
|
|
|
|
--------
|
|
|
|
--------
|
|
|
|
>>> import numpy as np
|
|
|
|
>>> import numpy as np
|
|
|
|
|
|
|
|
>>> import wafo.polynomial as wp
|
|
|
|
>>> x = np.array([0.0, 1.0, 2.0, 3.0, 4.0, 5.0])
|
|
|
|
>>> x = np.array([0.0, 1.0, 2.0, 3.0, 4.0, 5.0])
|
|
|
|
>>> y = np.array([0.0, 0.8, 0.9, 0.1, -0.8, -1.0])
|
|
|
|
>>> y = np.array([0.0, 0.8, 0.9, 0.1, -0.8, -1.0])
|
|
|
|
>>> p = orthofit(x, y, 3)
|
|
|
|
>>> p = wp.orthofit(x, y, 3)
|
|
|
|
>>> p
|
|
|
|
>>> p
|
|
|
|
array([[ 0. , -0.30285714, -0.16071429, 0.08703704],
|
|
|
|
array([[ 0. , -0.30285714, -0.16071429, 0.08703704],
|
|
|
|
[ 0. , 2.5 , 2.5 , 2.5 ],
|
|
|
|
[ 0. , 2.5 , 2.5 , 2.5 ],
|
|
|
|
[ 0. , 0. , 2.91666667, 2.13333333]])
|
|
|
|
[ 0. , 0. , 2.91666667, 2.13333333]])
|
|
|
|
>>> ortho2poly(p)
|
|
|
|
>>> wp.ortho2poly(p)
|
|
|
|
array([ 0.08703704, -0.81349206, 1.69312169, -0.03968254])
|
|
|
|
array([ 0.08703704, -0.81349206, 1.69312169, -0.03968254])
|
|
|
|
>>> np.polyfit(x, y, 3)
|
|
|
|
>>> wp.polyfit(x, y, 3)
|
|
|
|
array([ 0.08703704, -0.81349206, 1.69312169, -0.03968254])
|
|
|
|
array([ 0.08703704, -0.81349206, 1.69312169, -0.03968254])
|
|
|
|
|
|
|
|
|
|
|
|
References
|
|
|
|
References
|
|
|
@ -410,10 +412,11 @@ def orthofit(x, y, n):
|
|
|
|
|
|
|
|
|
|
|
|
Example:
|
|
|
|
Example:
|
|
|
|
-------
|
|
|
|
-------
|
|
|
|
|
|
|
|
>>> import wafo.polynomial as wp
|
|
|
|
>>> x = np.linspace(0,10,300);
|
|
|
|
>>> x = np.linspace(0,10,300);
|
|
|
|
>>> y = np.sin(x**3/100)**2 + 0.05*np.random.randn(x.size)
|
|
|
|
>>> y = np.sin(x**3/100)**2 + 0.05*np.random.randn(x.size)
|
|
|
|
>>> p = orthofit(x, y, 25)
|
|
|
|
>>> p = wp.orthofit(x, y, 25)
|
|
|
|
>>> ys = orthoval(p, x)
|
|
|
|
>>> ys = wp.orthoval(p, x)
|
|
|
|
|
|
|
|
|
|
|
|
plot(x, y,'.',x, ys, 'k')
|
|
|
|
plot(x, y,'.',x, ys, 'k')
|
|
|
|
|
|
|
|
|
|
|
@ -481,15 +484,16 @@ def polyreloc(p, x, y=0.0):
|
|
|
|
Example
|
|
|
|
Example
|
|
|
|
-------
|
|
|
|
-------
|
|
|
|
>>> import numpy as np
|
|
|
|
>>> import numpy as np
|
|
|
|
|
|
|
|
>>> import wafo.polynomial as wp
|
|
|
|
>>> p = np.arange(6); p.shape = (2,-1)
|
|
|
|
>>> p = np.arange(6); p.shape = (2,-1)
|
|
|
|
>>> np.polyval(p,0)
|
|
|
|
>>> wp.polyval(p,0)
|
|
|
|
array([3, 4, 5])
|
|
|
|
array([3, 4, 5])
|
|
|
|
>>> np.polyval(p,1)
|
|
|
|
>>> wp.polyval(p,1)
|
|
|
|
array([3, 5, 7])
|
|
|
|
array([3, 5, 7])
|
|
|
|
>>> r = polyreloc(p,-1) # move to the left along x-axis
|
|
|
|
>>> r = polyreloc(p,-1) # move to the left along x-axis
|
|
|
|
>>> np.polyval(r,-1) # = polyval(p,0)
|
|
|
|
>>> wp.polyval(r,-1) # = polyval(p,0)
|
|
|
|
array([3, 4, 5])
|
|
|
|
array([3, 4, 5])
|
|
|
|
>>> np.polyval(r,0) # = polyval(p,1)
|
|
|
|
>>> wp.polyval(r,0) # = polyval(p,1)
|
|
|
|
array([3, 5, 7])
|
|
|
|
array([3, 5, 7])
|
|
|
|
"""
|
|
|
|
"""
|
|
|
|
|
|
|
|
|
|
|
@ -534,15 +538,16 @@ def polyrescl(p, x, y=1.0):
|
|
|
|
Example
|
|
|
|
Example
|
|
|
|
-------
|
|
|
|
-------
|
|
|
|
>>> import numpy as np
|
|
|
|
>>> import numpy as np
|
|
|
|
|
|
|
|
>>> import wafo.polynomial as wp
|
|
|
|
>>> p = np.arange(6); p.shape = (2,-1)
|
|
|
|
>>> p = np.arange(6); p.shape = (2,-1)
|
|
|
|
>>> np.polyval(p,0)
|
|
|
|
>>> wp.polyval(p,0)
|
|
|
|
array([3, 4, 5])
|
|
|
|
array([3, 4, 5])
|
|
|
|
>>> np.polyval(p,1)
|
|
|
|
>>> wp.polyval(p,1)
|
|
|
|
array([3, 5, 7])
|
|
|
|
array([3, 5, 7])
|
|
|
|
>>> r = polyrescl(p,2) # scale by 2 along x-axis
|
|
|
|
>>> r = wp.polyrescl(p,2) # scale by 2 along x-axis
|
|
|
|
>>> np.polyval(r,0) # = polyval(p,0)
|
|
|
|
>>> wp.polyval(r,0) # = polyval(p,0)
|
|
|
|
array([ 3., 4., 5.])
|
|
|
|
array([ 3., 4., 5.])
|
|
|
|
>>> np.polyval(r,2) # = polyval(p,1)
|
|
|
|
>>> wp.polyval(r,2) # = polyval(p,1)
|
|
|
|
array([ 3., 5., 7.])
|
|
|
|
array([ 3., 5., 7.])
|
|
|
|
"""
|
|
|
|
"""
|
|
|
|
|
|
|
|
|
|
|
@ -577,11 +582,12 @@ def polytrim(p):
|
|
|
|
|
|
|
|
|
|
|
|
Example
|
|
|
|
Example
|
|
|
|
-------
|
|
|
|
-------
|
|
|
|
|
|
|
|
>>> import wafo.polynomial as wp
|
|
|
|
>>> p = [0,1,2]
|
|
|
|
>>> p = [0,1,2]
|
|
|
|
>>> polytrim(p)
|
|
|
|
>>> wp.polytrim(p)
|
|
|
|
array([1, 2])
|
|
|
|
array([1, 2])
|
|
|
|
>>> p1 = [[0,0],[1,2],[3,4]]
|
|
|
|
>>> p1 = [[0,0],[1,2],[3,4]]
|
|
|
|
>>> polytrim(p1)
|
|
|
|
>>> wp.polytrim(p1)
|
|
|
|
array([[1, 2],
|
|
|
|
array([[1, 2],
|
|
|
|
[3, 4]])
|
|
|
|
[3, 4]])
|
|
|
|
"""
|
|
|
|
"""
|
|
|
@ -620,7 +626,8 @@ def poly2hstr(p, variable='x'):
|
|
|
|
|
|
|
|
|
|
|
|
Examples
|
|
|
|
Examples
|
|
|
|
--------
|
|
|
|
--------
|
|
|
|
>>> poly2hstr([1, 1, 2], 's' )
|
|
|
|
>>> import wafo.polynomial as wp
|
|
|
|
|
|
|
|
>>> wp.poly2hstr([1, 1, 2], 's' )
|
|
|
|
'(s + 1)*s + 2'
|
|
|
|
'(s + 1)*s + 2'
|
|
|
|
|
|
|
|
|
|
|
|
See also
|
|
|
|
See also
|
|
|
@ -710,7 +717,8 @@ def poly2str(p, variable='x'):
|
|
|
|
|
|
|
|
|
|
|
|
Examples
|
|
|
|
Examples
|
|
|
|
--------
|
|
|
|
--------
|
|
|
|
>>> poly2str([1, 1, 2], 's' )
|
|
|
|
>>> import wafo.polynomial as wp
|
|
|
|
|
|
|
|
>>> wp.poly2str([1, 1, 2], 's' )
|
|
|
|
's**2 + s + 2'
|
|
|
|
's**2 + s + 2'
|
|
|
|
"""
|
|
|
|
"""
|
|
|
|
thestr = "0"
|
|
|
|
thestr = "0"
|
|
|
@ -787,11 +795,12 @@ def polyshift(py, a=-1, b=1):
|
|
|
|
|
|
|
|
|
|
|
|
Example
|
|
|
|
Example
|
|
|
|
-------
|
|
|
|
-------
|
|
|
|
|
|
|
|
>>> import wafo.polynomial as wp
|
|
|
|
>>> py = [1, 0]
|
|
|
|
>>> py = [1, 0]
|
|
|
|
>>> px = polyshift(py,0,5)
|
|
|
|
>>> px = wp.polyshift(py,0,5)
|
|
|
|
>>> polyval(px,[0, 2.5, 5]) #% This is the same as the line below
|
|
|
|
>>> wp.polyval(px,[0, 2.5, 5]) #% This is the same as the line below
|
|
|
|
array([-1., 0., 1.])
|
|
|
|
array([-1., 0., 1.])
|
|
|
|
>>> polyval(py,[-1, 0, 1 ])
|
|
|
|
>>> wp.polyval(py,[-1, 0, 1 ])
|
|
|
|
array([-1, 0, 1])
|
|
|
|
array([-1, 0, 1])
|
|
|
|
"""
|
|
|
|
"""
|
|
|
|
|
|
|
|
|
|
|
@ -830,11 +839,12 @@ def polyishift(px, a=-1, b=1):
|
|
|
|
|
|
|
|
|
|
|
|
Example
|
|
|
|
Example
|
|
|
|
-------
|
|
|
|
-------
|
|
|
|
|
|
|
|
>>> import wafo.polynomial as wp
|
|
|
|
>>> px = [1, 0]
|
|
|
|
>>> px = [1, 0]
|
|
|
|
>>> py = polyishift(px,0,5);
|
|
|
|
>>> py = wp.polyishift(px,0,5);
|
|
|
|
>>> polyval(px,[0, 2.5, 5]) #% This is the same as the line below
|
|
|
|
>>> wp.polyval(px,[0, 2.5, 5]) #% This is the same as the line below
|
|
|
|
array([ 0. , 2.5, 5. ])
|
|
|
|
array([ 0. , 2.5, 5. ])
|
|
|
|
>>> polyval(py,[-1, 0, 1])
|
|
|
|
>>> wp.polyval(py,[-1, 0, 1])
|
|
|
|
array([ 0. , 2.5, 5. ])
|
|
|
|
array([ 0. , 2.5, 5. ])
|
|
|
|
"""
|
|
|
|
"""
|
|
|
|
if (a == -1) & (b == 1):
|
|
|
|
if (a == -1) & (b == 1):
|
|
|
@ -892,9 +902,10 @@ def poly2cheb(p, a=-1, b=1):
|
|
|
|
Examples
|
|
|
|
Examples
|
|
|
|
--------
|
|
|
|
--------
|
|
|
|
>>> import numpy as np
|
|
|
|
>>> import numpy as np
|
|
|
|
|
|
|
|
>>> import wafo.polynomial as wp
|
|
|
|
>>> p = np.arange(5)
|
|
|
|
>>> p = np.arange(5)
|
|
|
|
>>> ck = poly2cheb(p)
|
|
|
|
>>> ck = wp.poly2cheb(p)
|
|
|
|
>>> cheb2poly(ck)
|
|
|
|
>>> wp.cheb2poly(ck)
|
|
|
|
array([ 1., 2., 3., 4.])
|
|
|
|
array([ 1., 2., 3., 4.])
|
|
|
|
|
|
|
|
|
|
|
|
Reference
|
|
|
|
Reference
|
|
|
@ -934,12 +945,12 @@ def cheb2poly(ck, a=-1, b=1):
|
|
|
|
Examples
|
|
|
|
Examples
|
|
|
|
--------
|
|
|
|
--------
|
|
|
|
>>> import numpy as np
|
|
|
|
>>> import numpy as np
|
|
|
|
|
|
|
|
>>> import wafo.polynomial as wp
|
|
|
|
>>> p = np.arange(5)
|
|
|
|
>>> p = np.arange(5)
|
|
|
|
>>> ck = poly2cheb(p)
|
|
|
|
>>> ck = wp.poly2cheb(p)
|
|
|
|
>>> cheb2poly(ck)
|
|
|
|
>>> wp.cheb2poly(ck)
|
|
|
|
array([ 1., 2., 3., 4.])
|
|
|
|
array([ 1., 2., 3., 4.])
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
References
|
|
|
|
References
|
|
|
|
----------
|
|
|
|
----------
|
|
|
|
http://en.wikipedia.org/wiki/Chebyshev_polynomials
|
|
|
|
http://en.wikipedia.org/wiki/Chebyshev_polynomials
|
|
|
@ -990,8 +1001,9 @@ def chebextr(n):
|
|
|
|
|
|
|
|
|
|
|
|
Examples
|
|
|
|
Examples
|
|
|
|
--------
|
|
|
|
--------
|
|
|
|
>>> x = chebextr(4)
|
|
|
|
>>> import wafo.polynomial as wp
|
|
|
|
>>> chebpoly(4,x)
|
|
|
|
>>> x = wp.chebextr(4)
|
|
|
|
|
|
|
|
>>> wp.chebpoly(4,x)
|
|
|
|
array([ 1., -1., 1., -1., 1.])
|
|
|
|
array([ 1., -1., 1., -1., 1.])
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -1021,15 +1033,16 @@ def chebroot(n, kind=1):
|
|
|
|
Examples
|
|
|
|
Examples
|
|
|
|
--------
|
|
|
|
--------
|
|
|
|
>>> import numpy as np
|
|
|
|
>>> import numpy as np
|
|
|
|
>>> x = chebroot(3)
|
|
|
|
>>> import wafo.polynomial as wp
|
|
|
|
>>> np.abs(chebpoly(3,x))<1e-15
|
|
|
|
>>> x = wp.chebroot(3)
|
|
|
|
array([ True, True, True], dtype=bool)
|
|
|
|
>>> np.allclose(wp.chebpoly(3,x), [0, 0, 0])
|
|
|
|
>>> chebpoly(3)
|
|
|
|
True
|
|
|
|
|
|
|
|
>>> wp.chebpoly(3)
|
|
|
|
array([ 4., 0., -3., 0.])
|
|
|
|
array([ 4., 0., -3., 0.])
|
|
|
|
>>> x2 = chebroot(4,kind=2)
|
|
|
|
>>> x2 = wp.chebroot(4, kind=2)
|
|
|
|
>>> np.abs(chebpoly(4,x2,kind=2))<1e-15
|
|
|
|
>>> np.allclose(wp.chebpoly(4,x2,kind=2), [0, 0, 0, 0])
|
|
|
|
array([ True, True, True, True], dtype=bool)
|
|
|
|
True
|
|
|
|
>>> chebpoly(4,kind=2)
|
|
|
|
>>> wp.chebpoly(4,kind=2)
|
|
|
|
array([ 16., 0., -12., 0., 1.])
|
|
|
|
array([ 16., 0., -12., 0., 1.])
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -1071,15 +1084,16 @@ def chebpoly(n, x=None, kind=1):
|
|
|
|
Examples
|
|
|
|
Examples
|
|
|
|
--------
|
|
|
|
--------
|
|
|
|
>>> import numpy as np
|
|
|
|
>>> import numpy as np
|
|
|
|
>>> x = chebroot(3)
|
|
|
|
>>> import wafo.polynomial as wp
|
|
|
|
>>> np.abs(chebpoly(3,x))<1e-15
|
|
|
|
>>> x = wp.chebroot(3)
|
|
|
|
array([ True, True, True], dtype=bool)
|
|
|
|
>>> np.allclose(wp.chebpoly(3,x), [0, 0, 0])
|
|
|
|
>>> chebpoly(3)
|
|
|
|
True
|
|
|
|
|
|
|
|
>>> wp.chebpoly(3)
|
|
|
|
array([ 4., 0., -3., 0.])
|
|
|
|
array([ 4., 0., -3., 0.])
|
|
|
|
>>> x2 = chebroot(4,kind=2)
|
|
|
|
>>> x2 = wp.chebroot(4,kind=2)
|
|
|
|
>>> np.abs(chebpoly(4,x2,kind=2))<1e-15
|
|
|
|
>>> np.allclose(wp.chebpoly(4,x2,kind=2), [0, 0, 0, 0])
|
|
|
|
array([ True, True, True, True], dtype=bool)
|
|
|
|
True
|
|
|
|
>>> chebpoly(4,kind=2)
|
|
|
|
>>> wp.chebpoly(4,kind=2)
|
|
|
|
array([ 16., 0., -12., 0., 1.])
|
|
|
|
array([ 16., 0., -12., 0., 1.])
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -1131,14 +1145,15 @@ def chebfit(fun, n=10, a=-1, b=1, trace=False):
|
|
|
|
Fit exp(x)
|
|
|
|
Fit exp(x)
|
|
|
|
|
|
|
|
|
|
|
|
>>> import matplotlib.pyplot as plt
|
|
|
|
>>> import matplotlib.pyplot as plt
|
|
|
|
|
|
|
|
>>> import wafo.polynomial as wp
|
|
|
|
>>> a = 0; b = 2
|
|
|
|
>>> a = 0; b = 2
|
|
|
|
>>> ck = chebfit(np.exp,7,a,b);
|
|
|
|
>>> ck = wp.chebfit(np.exp,7,a,b);
|
|
|
|
>>> x = np.linspace(0,4);
|
|
|
|
>>> x = np.linspace(0,4);
|
|
|
|
>>> x1 = chebroot(9)*(b-a)/2+(b+a)/2
|
|
|
|
>>> x1 = wp.chebroot(9)*(b-a)/2+(b+a)/2
|
|
|
|
>>> ck1 = chebfit(np.exp(x1))
|
|
|
|
>>> ck1 = wp.chebfit(np.exp(x1))
|
|
|
|
|
|
|
|
|
|
|
|
h=plt.plot(x, np.exp(x), 'r', x, chebval(x,ck,a,b), 'g.')
|
|
|
|
h=plt.plot(x, np.exp(x), 'r', x, wp.chebval(x,ck,a,b), 'g.')
|
|
|
|
h = plt.plot(x,np.exp(x), 'r', x, chebval(x,ck1,a,b),'g.')
|
|
|
|
h = plt.plot(x,np.exp(x), 'r', x, wp.chebval(x,ck1,a,b),'g.')
|
|
|
|
plt.close()
|
|
|
|
plt.close()
|
|
|
|
|
|
|
|
|
|
|
|
See also
|
|
|
|
See also
|
|
|
@ -1209,22 +1224,23 @@ def chebfit_dct(f, n=(10, ), domain=None):
|
|
|
|
Fit exponential function
|
|
|
|
Fit exponential function
|
|
|
|
|
|
|
|
|
|
|
|
>>> import matplotlib.pyplot as plt
|
|
|
|
>>> import matplotlib.pyplot as plt
|
|
|
|
|
|
|
|
>>> import wafo.polynomial as wp
|
|
|
|
>>> domain = (0, 2)
|
|
|
|
>>> domain = (0, 2)
|
|
|
|
>>> ck = chebfit_dct(np.exp, 7, domain)
|
|
|
|
>>> ck = wp.chebfit_dct(np.exp, 7, domain)
|
|
|
|
>>> np.allclose(ck, [3.44152387e+00, 3.07252345e+00, 7.38000848e-01,
|
|
|
|
>>> np.allclose(ck, [3.44152387e+00, 3.07252345e+00, 7.38000848e-01,
|
|
|
|
... 1.20520053e-01, 1.48805268e-02, 1.47579673e-03,
|
|
|
|
... 1.20520053e-01, 1.48805268e-02, 1.47579673e-03,
|
|
|
|
... 1.21719524e-04])
|
|
|
|
... 1.21719524e-04])
|
|
|
|
True
|
|
|
|
True
|
|
|
|
>>> x1 = map_to_interval(chebroot(9), *domain)
|
|
|
|
>>> x1 = wp.map_to_interval(wp.chebroot(9), *domain)
|
|
|
|
>>> ck1 = chebfit(np.exp(x1))
|
|
|
|
>>> ck1 = wp.chebfit(np.exp(x1))
|
|
|
|
>>> np.allclose(ck1, [5.40019009e-07, 8.69418381e-06, 1.22261037e-04,
|
|
|
|
>>> np.allclose(ck1, [5.40019009e-07, 8.69418381e-06, 1.22261037e-04,
|
|
|
|
... 1.47582673e-03, 1.48805283e-02, 1.20520053e-01,
|
|
|
|
... 1.47582673e-03, 1.48805283e-02, 1.20520053e-01,
|
|
|
|
... 7.38000848e-01, 3.07252345e+00, 3.44152387e+00])
|
|
|
|
... 7.38000848e-01, 3.07252345e+00, 3.44152387e+00])
|
|
|
|
True
|
|
|
|
True
|
|
|
|
|
|
|
|
|
|
|
|
x = np.linspace(0,4)
|
|
|
|
x = np.linspace(0,4)
|
|
|
|
h = plt.plot(x, np.exp(x), 'r', x, chebvalnd(ck, x,ck,a,b), 'g.')
|
|
|
|
h = plt.plot(x, np.exp(x), 'r', x, wp.chebvalnd(ck, x,ck,a,b), 'g.')
|
|
|
|
h = plt.plot(x, np.exp(x), 'r', x, chebvalnd(ck1, x,ck1,a,b),'b.')
|
|
|
|
h = plt.plot(x, np.exp(x), 'r', x, wp.chebvalnd(ck1, x,ck1,a,b),'b.')
|
|
|
|
plt.close()
|
|
|
|
plt.close()
|
|
|
|
|
|
|
|
|
|
|
|
See also
|
|
|
|
See also
|
|
|
@ -1280,11 +1296,12 @@ def idct(x, n=None):
|
|
|
|
Examples
|
|
|
|
Examples
|
|
|
|
--------
|
|
|
|
--------
|
|
|
|
>>> import numpy as np
|
|
|
|
>>> import numpy as np
|
|
|
|
|
|
|
|
>>> import wafo.polynomial as wp
|
|
|
|
>>> x = np.arange(5)*1.0
|
|
|
|
>>> x = np.arange(5)*1.0
|
|
|
|
>>> np.abs(x-idct(dct(x)))<1e-14
|
|
|
|
>>> np.allclose(idct(dct(x)), x)
|
|
|
|
array([ True, True, True, True, True], dtype=bool)
|
|
|
|
True
|
|
|
|
>>> np.abs(x-dct(idct(x)))<1e-14
|
|
|
|
>>> np.allclose(dct(idct(x)), x)
|
|
|
|
array([ True, True, True, True, True], dtype=bool)
|
|
|
|
True
|
|
|
|
|
|
|
|
|
|
|
|
Reference
|
|
|
|
Reference
|
|
|
|
---------
|
|
|
|
---------
|
|
|
@ -1358,18 +1375,19 @@ def chebval(x, ck, a=-1, b=1, kind=1, fill=None):
|
|
|
|
--------
|
|
|
|
--------
|
|
|
|
Plot Chebychev polynomial of the first kind and order 4:
|
|
|
|
Plot Chebychev polynomial of the first kind and order 4:
|
|
|
|
>>> import matplotlib.pyplot as plt
|
|
|
|
>>> import matplotlib.pyplot as plt
|
|
|
|
|
|
|
|
>>> import wafo.polynomial as wp
|
|
|
|
>>> x = np.linspace(-1,1)
|
|
|
|
>>> x = np.linspace(-1,1)
|
|
|
|
>>> ck = np.zeros(5); ck[-1]=1
|
|
|
|
>>> ck = np.zeros(5); ck[-1]=1
|
|
|
|
>>> y = chebval(x,ck)
|
|
|
|
>>> y = wp.chebval(x,ck)
|
|
|
|
|
|
|
|
|
|
|
|
h = plt.plot(x, y, x, chebpoly(4,x),'.')
|
|
|
|
h = plt.plot(x, y, x, wp.chebpoly(4,x),'.')
|
|
|
|
plt.close()
|
|
|
|
plt.close()
|
|
|
|
|
|
|
|
|
|
|
|
Fit exponential function:
|
|
|
|
Fit exponential function:
|
|
|
|
>>> import matplotlib.pyplot as plt
|
|
|
|
>>> import matplotlib.pyplot as plt
|
|
|
|
>>> ck = chebfit(np.exp,7,0,2)
|
|
|
|
>>> ck = wp.chebfit(np.exp,7,0,2)
|
|
|
|
>>> x = np.linspace(0,4);
|
|
|
|
>>> x = np.linspace(0,4);
|
|
|
|
>>> y2 = chebval(x,ck,0,2)
|
|
|
|
>>> y2 = wp.chebval(x,ck,0,2)
|
|
|
|
|
|
|
|
|
|
|
|
h=plt.plot(x, y2, 'g', x, np.exp(x))
|
|
|
|
h=plt.plot(x, y2, 'g', x, np.exp(x))
|
|
|
|
plt.close()
|
|
|
|
plt.close()
|
|
|
@ -1417,10 +1435,11 @@ def chebder(ck, a=-1, b=1):
|
|
|
|
|
|
|
|
|
|
|
|
Fit exponential function:
|
|
|
|
Fit exponential function:
|
|
|
|
>>> import matplotlib.pyplot as plt
|
|
|
|
>>> import matplotlib.pyplot as plt
|
|
|
|
>>> ck = chebfit(np.exp,7,0,2)
|
|
|
|
>>> import wafo.polynomial as wp
|
|
|
|
|
|
|
|
>>> ck = wp.chebfit(np.exp,7,0,2)
|
|
|
|
>>> x = np.linspace(0,4)
|
|
|
|
>>> x = np.linspace(0,4)
|
|
|
|
>>> ck2 = chebder(ck,0,2)
|
|
|
|
>>> ck2 = wp.chebder(ck,0,2)
|
|
|
|
>>> y = chebval(x,ck2,0,2)
|
|
|
|
>>> y = wp.chebval(x,ck2,0,2)
|
|
|
|
|
|
|
|
|
|
|
|
h = plt.plot(x, y, 'g', x, np.exp(x), 'r')
|
|
|
|
h = plt.plot(x, y, 'g', x, np.exp(x), 'r')
|
|
|
|
plt.close()
|
|
|
|
plt.close()
|
|
|
@ -1470,10 +1489,11 @@ def chebint(ck, a=-1, b=1):
|
|
|
|
--------
|
|
|
|
--------
|
|
|
|
Fit exponential function:
|
|
|
|
Fit exponential function:
|
|
|
|
>>> import matplotlib.pyplot as plt
|
|
|
|
>>> import matplotlib.pyplot as plt
|
|
|
|
>>> ck = chebfit(np.exp,7,0,2)
|
|
|
|
>>> import wafo.polynomial as wp
|
|
|
|
|
|
|
|
>>> ck = wp.chebfit(np.exp, 7, 0, 2)
|
|
|
|
>>> x = np.linspace(0,4)
|
|
|
|
>>> x = np.linspace(0,4)
|
|
|
|
>>> ck2 = chebint(ck,0,2);
|
|
|
|
>>> ck2 = wp.chebint(ck, 0, 2);
|
|
|
|
>>> y =chebval(x,ck2,0,2)
|
|
|
|
>>> y = wp.chebval(x, ck2, 0, 2)
|
|
|
|
|
|
|
|
|
|
|
|
h = plt.plot(x, y, 'g', x, np.exp(x), 'r.')
|
|
|
|
h = plt.plot(x, y, 'g', x, np.exp(x), 'r.')
|
|
|
|
plt.close()
|
|
|
|
plt.close()
|
|
|
@ -1713,8 +1733,9 @@ def padefit(c, m=None):
|
|
|
|
Pade approximation to exp(x)
|
|
|
|
Pade approximation to exp(x)
|
|
|
|
>>> import scipy.special as sp
|
|
|
|
>>> import scipy.special as sp
|
|
|
|
>>> import matplotlib.pyplot as plt
|
|
|
|
>>> import matplotlib.pyplot as plt
|
|
|
|
>>> c = poly1d(1./sp.gamma(np.r_[6+1:0:-1]))
|
|
|
|
>>> import wafo.polynomial as wp
|
|
|
|
>>> [p, q] = padefit(c)
|
|
|
|
>>> c = wp.poly1d(1./sp.gamma(np.r_[6+1:0:-1]))
|
|
|
|
|
|
|
|
>>> [p, q] = wp.padefit(c)
|
|
|
|
>>> p; q
|
|
|
|
>>> p; q
|
|
|
|
poly1d([ 0.00277778, 0.03333333, 0.2 , 0.66666667, 1. ])
|
|
|
|
poly1d([ 0.00277778, 0.03333333, 0.2 , 0.66666667, 1. ])
|
|
|
|
poly1d([ 0.03333333, -0.33333333, 1. ])
|
|
|
|
poly1d([ 0.03333333, -0.33333333, 1. ])
|
|
|
@ -1781,13 +1802,14 @@ def padefitlsq(fun, m, k, a=-1, b=1, trace=False, x=None, end_points=True):
|
|
|
|
|
|
|
|
|
|
|
|
Pade approximation to exp(x) between 0 and 2
|
|
|
|
Pade approximation to exp(x) between 0 and 2
|
|
|
|
>>> import matplotlib.pyplot as plt
|
|
|
|
>>> import matplotlib.pyplot as plt
|
|
|
|
>>> [c1, c2] = padefitlsq(np.exp,3,3,0,2)
|
|
|
|
>>> import wafo.polynomial as wp
|
|
|
|
|
|
|
|
>>> [c1, c2] = wp.padefitlsq(np.exp,3,3,0,2)
|
|
|
|
>>> c1; c2
|
|
|
|
>>> c1; c2
|
|
|
|
poly1d([ 0.01443847, 0.128842 , 0.55284547, 0.99999962])
|
|
|
|
poly1d([ 0.01443847, 0.128842 , 0.55284547, 0.99999962])
|
|
|
|
poly1d([-0.0049658 , 0.07610473, -0.44716929, 1. ])
|
|
|
|
poly1d([-0.0049658 , 0.07610473, -0.44716929, 1. ])
|
|
|
|
|
|
|
|
|
|
|
|
x = np.linspace(0,4)
|
|
|
|
x = np.linspace(0,4)
|
|
|
|
h = plt.plot(x, polyval(c1,x)/polyval(c2,x),'g')
|
|
|
|
h = plt.plot(x, wp.polyval(c1,x)/wp.polyval(c2,x),'g')
|
|
|
|
h = plt.plot(x, np.exp(x), 'r')
|
|
|
|
h = plt.plot(x, np.exp(x), 'r')
|
|
|
|
|
|
|
|
|
|
|
|
See also
|
|
|
|
See also
|
|
|
|