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

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

F = InterpolatingSpline.fromGriddedValues({x, y}, V, S=[3 3]);
Vq = F(Xq, Yq);

Fit 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

fit = ConstrainedSpline.fromData(t, xObs, S=3, splineDOF=12, ...
    distribution=StudentTDistribution(sigma=0.05, nu=3));

Add local value or derivative 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

fit = ConstrainedSpline.fromData(t, xObs, S=3, splineDOF=12, ...
    constraints=GlobalConstraint.monotonicIncreasing());

Add a 2D constraint on a rectilinear grid

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

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

knotPoints = BSpline.knotPointsForDataPoints(t, S=3);
B = BSpline.matrixForDataPoints(t, knotPoints=knotPoints, S=3);
xi = B \ x;