Function adas.xxsple

def xxsple(xin, yin, xout, opt=0, log=False, drop_zero=False, return_info=False)

Interpolates and extrapolates with cubic splines.

Parameters

xin : float
independent variable array.
yin : float
dependent variable array.
yxout : float
requested data array.
opt : int
control of interpolation/extrapolation
-------------------------------------------------------
| opt   |  dy(1)  ddy(1)  |  dy(n)   ddy(n)  |extrap'n|
|-------|-----------------|------------------|--------|
| < 0   |    -     0.0    |    -      0.0    |  No    |
|   0   |    -     0.0    |    -      0.0    |  Yes   |
|   1   |    -     0.0    |  -1.5      -     |  Yes   |
|   2   |   0.0     -     |   1.0      -     |  Yes   |
|   3   |  -0.5     -     |  -1.5      -     |  Yes   |
|   4   |   0.0     -     |    -      0.0    |  Yes   |
|   5   |  -4.5     -     |  -1.5      -     |  Yes   |
|   6   |  +0.5     -     |    -      0.0    |  Yes   |
|   7   |  -3.5     -     |    -      0.0    |  Yes   |
-------------------------------------------------------
log : bool
if log=True spline on log(xin) vs log(yin).
drop_zero : bool
if True do not include points with yin=0.0 in the evaluation.
return_info : bool
If True also return a dictionary of information on the transition. The default is False.

Returns

yout : float
splined point corresponding to xin array.
info : dict
extra information about the configuration only return if return_info=True
'dy'     : float array of derivatives at input knots
'extrap' : array True if point extrapolated
'interp' : array True if point interpolated

Notes

With opt < 0 no extrapolation takes place and returned yout values for xout outside the xin range are set to None.

Pure python translation of xxsple.for.

Version History

  • Martin O'Mullane, 14-07-2018

    • First version
  • Martin O'Mullane, 14-08-2019

    • Handle case when xout is a scalar.
  • Martin O'Mullane, 13-05-2022

    • Add drop_zero option.
  • Martin O'Mullane, 05-10-2022

    • Make returning the info dictionary optional.
    • For no-extrapolation (opt<0) set the yout values for xout outside the xin range to be None/nan rather than 0.0.

Example

Example of function were transforming to log-space is essential.

>>> import adas as adas
>>> xin=[1, 10, 100, 1000]
>>> yin=[10.0, 20.0, 30.0, 40.0]
>>> xout=[0.5, 10.0, 500.0]
>>> yout, info = adas.xxsple(xin, yin, xout, log=True, return_info=True)
>>> yout
array([ 7.95020064, 20.        , 36.80473467])
>>> info['extrap']
array([ True, False, False])

Spline in linear space

>>> yout = adas.xxsple(xin, yin, xout)
>>> yout
array([  9.42134318,  20.        , -22.43944366])

But care is required if no extrapolation is requested (opt<0)

>>> yout, info = adas.xxsple(xin, yin, xout, opt=-1)
>>> yout
array([  0.        ,  20.        , -22.43944366])
>>> yout, info = adas.xxsple(xin, yin, xout, log=True, opt=-1)
>>> yout
array([ 1.        , 20.        , 36.80473467])