Fits a spline y = spl(x) of degree k to the provided x, y data. t specifies the internal knots of the spline
The number of data points must be larger than the spline degree k.
Knots t must satisfy the Schoenberg-Whitney conditions, i.e., there must be a subset of data points x[j]
such that t[j] < x[j] < t[j+k+1]
, for j=0, 1,...,n-k-2
.
Input dimension of data points -- must be increasing
Input dimension of data points
interior knots of the spline. Must be in ascending order and
bbox[0] < t[0] < ... < t[-1] < bbox[-1]
weights for spline fitting. Must be positive. If None (default), weights are all 1.
2-sequence specifying the boundary of the approximation interval. If None (default), bbox = [x[0], x[-1]]
.
Controls the extrapolation mode for elements not in the interval defined by the knot sequence.
The default value is 0.
Whether to check that the input arrays contain only finite numbers. Disabling may give a performance gain, but may result in problems (crashes, non-termination or non-sensical results) if the inputs do contain infinities or NaNs. Default is False.
If the interior knots do not satisfy the Schoenberg-Whitney conditions
1-D spline with explicit internal knots.
InterpolatedUnivariateSpline
UnivariateSpline
spalde
splev
splint
splrep
sproot
import numpy as np
from scipy.interpolate import LSQUnivariateSpline, UnivariateSpline
import matplotlib.pyplot as plt
rng = np.random.default_rng()
x = np.linspace(-3, 3, 50)
y = np.exp(-x**2) + 0.1 * rng.standard_normal(50)
t = [-1, 0, 1]
spl = LSQUnivariateSpline(x, y, t)
xs = np.linspace(-3, 3, 1000)
plt.plot(x, y, 'ro', ms=5)
plt.plot(xs, spl(xs), 'g-', lw=3)
plt.show()
spl.get_knots()
x = np.arange(10)
s = UnivariateSpline(x, x, s=0)
s.get_knots()
knt = s.get_knots()
s1 = LSQUnivariateSpline(x, x, knt[1:-1]) # Chop 1st and last knot
s1.get_knots()
Hover to see nodes names; edges to Self not shown, Caped at 50 nodes.
Using a canvas is more power efficient and can get hundred of nodes ; but does not allow hyperlinks; , arrows or text (beyond on hover)
SVG is more flexible but power hungry; and does not scale well to 50 + nodes.
All aboves nodes referred to, (or are referred from) current nodes; Edges from Self to other have been omitted (or all nodes would be connected to the central node "self" which is not useful). Nodes are colored by the library they belong to, and scaled with the number of references pointing them