pub struct CubicSpline<T: Float> { /* private fields */ }Expand description
Cubic spline 1-D interpolator.
Precomputes polynomial coefficients for each segment at construction time. Each evaluation is O(log n) via binary search.
Implementations§
Source§impl<T: Float> CubicSpline<T>
impl<T: Float> CubicSpline<T>
Sourcepub fn new(
xs: &[T],
ys: &[T],
boundary: SplineBoundary<T>,
extrap: Extrapolate,
) -> Result<Self>
pub fn new( xs: &[T], ys: &[T], boundary: SplineBoundary<T>, extrap: Extrapolate, ) -> Result<Self>
Construct a cubic spline interpolator.
§Errors
xsandysmust have the same length (>= 3).xsmust be strictly increasing.- All values must be finite.
§Examples
let xs = [0.0_f64, 1.0, 2.0, 3.0];
let ys = [0.0, 1.0, 4.0, 9.0]; // roughly x²
let spline = CubicSpline::new(&xs, &ys, SplineBoundary::Natural, Extrapolate::Error).unwrap();
let y = spline.eval(1.5).unwrap();
assert!((y - 2.25).abs() < 0.5); // close to 1.5²Sourcepub fn eval(&self, x: T) -> Result<T>
pub fn eval(&self, x: T) -> Result<T>
Evaluate the spline at a single point.
§Examples
let spline = CubicSpline::new(
&[0.0_f64, 1.0, 2.0, 3.0], &[0.0, 1.0, 4.0, 9.0],
SplineBoundary::Natural, Extrapolate::Error,
).unwrap();
let y = spline.eval(1.5).unwrap();
assert!((y - 2.25).abs() < 0.5);Sourcepub fn eval_many(&self, xs: &[T]) -> Result<Vec<T>>
pub fn eval_many(&self, xs: &[T]) -> Result<Vec<T>>
Evaluate at many points.
§Examples
let spline = CubicSpline::new(
&[0.0_f64, 1.0, 2.0, 3.0], &[0.0, 1.0, 4.0, 9.0],
SplineBoundary::Natural, Extrapolate::Error,
).unwrap();
let ys = spline.eval_many(&[0.5, 1.5, 2.5]).unwrap();
assert_eq!(ys.len(), 3);Sourcepub fn derivative(&self, x: T) -> Result<T>
pub fn derivative(&self, x: T) -> Result<T>
Evaluate the first derivative at a single point.
§Examples
let spline = CubicSpline::new(
&[0.0_f64, 1.0, 2.0, 3.0], &[0.0, 1.0, 4.0, 9.0],
SplineBoundary::Natural, Extrapolate::Error,
).unwrap();
let dy = spline.derivative(1.0).unwrap();
assert!(dy > 0.0); // increasing functionSourcepub fn second_derivative(&self, x: T) -> Result<T>
pub fn second_derivative(&self, x: T) -> Result<T>
Evaluate the second derivative at a single point.
§Examples
let spline = CubicSpline::new(
&[0.0_f64, 1.0, 2.0, 3.0], &[0.0, 1.0, 4.0, 9.0],
SplineBoundary::Natural, Extrapolate::Error,
).unwrap();
let d2y = spline.second_derivative(0.0).unwrap();
// Natural boundary: second derivative = 0 at endpoints
assert!(d2y.abs() < 1e-10);Trait Implementations§
Source§impl<T: Clone + Float> Clone for CubicSpline<T>
impl<T: Clone + Float> Clone for CubicSpline<T>
Source§fn clone(&self) -> CubicSpline<T>
fn clone(&self) -> CubicSpline<T>
Returns a duplicate of the value. Read more
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreAuto Trait Implementations§
impl<T> Freeze for CubicSpline<T>
impl<T> RefUnwindSafe for CubicSpline<T>where
T: RefUnwindSafe,
impl<T> Send for CubicSpline<T>
impl<T> Sync for CubicSpline<T>
impl<T> Unpin for CubicSpline<T>where
T: Unpin,
impl<T> UnsafeUnpin for CubicSpline<T>
impl<T> UnwindSafe for CubicSpline<T>where
T: UnwindSafe,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more