interp - cubic spline evaluation function
Given three vectors (x,y,d) defining a spline or sub-spline function (see splin ) with yi=s(xi), di = s'(xi) this function evaluates s (and s', s'', s''' if needed) at xp(i) :
yp(i) = s(xp(i)) or yp(i,j) = s(xp(i,j))
yp1(i) = s'(xp(i)) or yp1(i,j) = s'(xp(i,j))
yp2(i) = s''(xp(i)) or yp2(i,j) = s''(xp(i,j))
yp3(i) = s'''(xp(i)) or yp3(i,j) = s'''(xp(i,j))
The out_mode parameter set the evaluation rule for extrapolation, i.e. for xp(i) not in [x1,xn] :
s(x) = y1 for x < x1
s(x) = yn for x > xn
s(x) = p_1(x) for x < x1
s(x) = p_{n-1}(x) for x > xn
s(x) = y1 + s'(x1)(x-x1) for x < x1
s(x) = yn + s'(xn)(x-xn) for x > xn
// see the examples of splin and lsq_splin
// an example showing C2 and C1 continuity of spline and subspline
a = -8; b = 8;
x = linspace(a,b,20)';
y = sinc(x);
dk = splin(x,y); // not_a_knot
df = splin(x,y, "fast");
xx = linspace(a,b,800)';
[yyk, yy1k, yy2k] = interp(xx, x, y, dk);
[yyf, yy1f, yy2f] = interp(xx, x, y, df);
xbasc()
subplot(3,1,1)
plot2d(xx, [yyk yyf])
plot2d(x, y, style=-9)
legends(["not_a_knot spline","fast sub-spline","interpolation points"],...
[1 2 -9], "ur",%f)
xtitle("spline interpolation")
subplot(3,1,2)
plot2d(xx, [yy1k yy1f])
legends(["not_a_knot spline","fast sub-spline"], [1 2], "ur",%f)
xtitle("spline interpolation (derivatives)")
subplot(3,1,3)
plot2d(xx, [yy2k yy2f])
legends(["not_a_knot spline","fast sub-spline"], [1 2], "lr",%f)
xtitle("spline interpolation (second derivatives)")
// here is an example showing the different extrapolation possibilities
x = linspace(0,1,11)';
y = cosh(x-0.5);
d = splin(x,y);
xx = linspace(-0.5,1.5,401)';
yy0 = interp(xx,x,y,d,"C0");
yy1 = interp(xx,x,y,d,"linear");
yy2 = interp(xx,x,y,d,"natural");
yy3 = interp(xx,x,y,d,"periodic");
xbasc()
plot2d(xx,[yy0 yy1 yy2 yy3],style=2:5,frameflag=2,leg="C0@linear@natural@periodic")
xtitle(" different way to evaluate a spline outside its domain")
B. Pincon