Hermite Splines, created using Lagrange’s strategy:

Data:

x0=1;
y0=2;
x1=2;
y1=4;
m0=3;
m1=4;
m=(y1-y0)/(x1-x0);

The cubic that interpolates this data ((x0,y0), (x1,y1), m0, m1):

We use the lagrange linear interpolator to fit the function values, and then special “get out of the way” cubics to handle the slopes at the end points.

l[x_]:=y0(x-x1)/(x0-x1)+y1(x-x0)/(x1-x0);
c[x_]:=l[x]+((x-x0)/(x1-x0))^2(x-x1)(m1-m)+((x-x1)/(x0-x1))^2(x-x0)(m0-m);

Plots:

p1=Plot[{l[x],c[x]},{x,x0-.1,x1+.1}];
p2=ListPlot[{{x0,y0},{x1,y1}}];
Show[p1,p2]

Now let’s choose an example function and the abscissa to work on:

f[x_]:=Sin[x]
x0=1
x1 =3
y0=N[f[x0]]
y1=N[f[x1]]
m0=N[f'[x0]]
m1=N[f'[x1]]
m=(y1-y0)/(x1-x0);

l[x_]:=y0(x-x1)/(x0-x1)+y1(x-x0)/(x1-x0);
c[x_]:=l[x]+((x-x0)/(x1-x0))^2(x-x1)(m1-m)+((x-x1)/(x0-x1))^2(x-x0)(m0-m);

Plots:

p1=Plot[{f[x],l[x],c[x]},{x,x0-.1,x1+.1}];
p2=ListPlot[{{x0,y0},{x1,y1}},PlotMarkers->{Automatic,Medium}];
Show[p1,p2]
Plot[{f[x]-c[x]},{x,x0,x1}]

p1=Plot[{f[x],p[x]},{x,0,4}];
p2=ListPlot[{{x1,y1},{x2,y2}},PlotMarkers->{Automatic,Medium}];
Show[p1,p2]