Common Tasks
Use this page when you know what you want to do, but want the right class, tutorial, or code pattern quickly. If you are still choosing between the main classes, start with Which Class Should I Use?.
Interpolate exact data in one dimension
- Use
InterpolatingSpline - Start with Spline Interpolation
t = linspace(0, 1, 20)';
x = sin(2*pi*t);
f = InterpolatingSpline.fromGriddedValues(t, x, S=3);
xq = f(linspace(t(1), t(end), 200)');
Interpolate exact data on a rectilinear grid
- Use
InterpolatingSpline - Pass one grid vector per dimension
F = InterpolatingSpline.fromGriddedValues({x, y}, V, S=[3 3]);
Vq = F(Xq, Yq);
Fit noisy data
- Use
ConstrainedSpline - Start with Fitting Noisy Data
noiseModel = NormalDistribution(0.05);
fit = ConstrainedSpline.fromData(t, xObs, S=3, splineDOF=12, distribution=noiseModel);
To match the least-squares polynomial fit from polyfit(t, x, N-1), use S=N-1 and splineDOF=N. For rectilinear grids in two or more dimensions, use ConstrainedSpline.fromGriddedValues(...).
Fit noisy data with outliers
- Use
ConstrainedSplinewithStudentTDistribution - Start with Robust Fitting with Outliers
fit = ConstrainedSpline.fromData(t, xObs, S=3, splineDOF=12, ...
distribution=StudentTDistribution(sigma=0.05, nu=3));
Add local value or derivative constraints
- Use
PointConstraint - Start with Local Point Constraints
constraints = [
PointConstraint.equal(0.5, value=1)
PointConstraint.equal(0.5, D=1, value=0)
];
fit = ConstrainedSpline.fromData(t, xObs, S=3, splineDOF=12, constraints=constraints);
Add global positivity or monotonicity constraints
- Use
GlobalConstraint - Start with Global Shape Constraints
fit = ConstrainedSpline.fromData(t, xObs, S=3, splineDOF=12, ...
constraints=GlobalConstraint.monotonicIncreasing());
Add a 2D constraint on a rectilinear grid
- Use
ConstrainedSplinewithGlobalConstraint.monotonicIncreasing - Start with 2D Constraints
fit = ConstrainedSpline.fromGriddedValues({x, y}, VObs, S=[3 3], splineDOF=[10 10], ...
constraints=GlobalConstraint.monotonicIncreasing(dimension=2));
Fit a planar trajectory from shared-parameter samples
- Use
TrajectorySpline - Start with the
TrajectorySplineclass reference
trajectory = TrajectorySpline.fromData(t, x, y, S=3);
tq = linspace(t(1), t(end), 200)';
xq = trajectory.x(tq);
yq = trajectory.y(tq);
uq = trajectory.u(tq);
vq = trajectory.v(tq);
For persisted restart or prefit component splines, construct the canonical state directly with TrajectorySpline(t=t, x=xSpline, y=ySpline).
Work directly with basis matrices
- Use
BSpline.matrixForDataPointsorTensorSpline.matrixForPointMatrix - Start with BSpline Foundations or TensorSpline Foundations
knotPoints = BSpline.knotPointsForDataPoints(t, S=3);
B = BSpline.matrixForDataPoints(t, knotPoints=knotPoints, S=3);
xi = B \ x;