5.1.4.3. numdifftools.limits.Residue¶
- class Residue(f, step=None, method='above', order=None, pole_order=1, full_output=False, **options)[source]¶
Compute residue of a function at a given point
- Parameters
- funcallable
function fun(z, *args, **kwds) to compute the Residue at z=z0. The function, fun, is assumed to return a result of the same shape and size as its input, z.
- step: float, complex, array-like or StepGenerator object, optional
Defines the spacing used in the approximation. Default is CStepGenerator(base_step=step, **options)
- method{‘above’, ‘below’}
defines if the limit is taken from above or below
- order: positive scalar integer, optional.
defines the order of approximation used to find the specified limit. The order must be member of [1 2 3 4 5 6 7 8]. 4 is a good compromise.
- pole_orderscalar integer
specifies the order of the pole at z0.
- full_output: bool
If true return additional info.
- options:
options to pass on to CStepGenerator
- Returns
- res_fz: array like
estimated residue, i.e., limit of f(z)*(z-z0)**pole_order as z –> z0 When the residue is estimated as approximately zero,
the wrong order pole may have been specified.
- info: namedtuple,
Only given if full_output is True and contains the following:
- error estimate: ndarray
95 % uncertainty estimate around the residue, such that abs(res_fz - lim z->z0 f(z)*(z-z0)**pole_order) < error_estimate Large uncertainties here suggest that the wrong order pole was specified for f(z0).
- final_step: ndarray
final step used in approximation
Notes
Residue computes the residue of a given function at a simple first order pole, or at a second order pole.
The methods used by residue are polynomial extrapolants, which also yield an error estimate. The user can specify the method order, as well as the order of the pole.
- z0 - scalar point at which to compute the residue. z0 may be
real or complex.
See the document DERIVEST.pdf for more explanation of the algorithms behind the parameters of Residue. In most cases, the user should never need to specify anything other than possibly the PoleOrder.
Examples
A first order pole at z = 0
>>> import numpy as np >>> from numdifftools.limits import Residue >>> def f(z): return -1./(np.expm1(2*z)) >>> res_f, info = Residue(f, full_output=True)(0) >>> np.allclose(res_f, -0.5) True >>> info.error_estimate < 1e-14 True
A second order pole around z = 0 and z = pi >>> def h(z): return 1.0/np.sin(z)**2 >>> res_h, info = Residue(h, full_output=True, pole_order=2)([0, np.pi]) >>> np.allclose(res_h, 1) True >>> (info.error_estimate < 1e-10).all() True
- __init__(f, step=None, method='above', order=None, pole_order=1, full_output=False, **options)[source]¶
Methods
__init__
(f[, step, method, order, ...])limit
(x, *args, **kwds)Return lim f(z) as z-> x
Attributes
step
The step spacing(s) used in the approximation