# Cubic spline fitting

If I have the following data:

 lengthscale1SB = {{0, 3.2921487465109793}};
lengthscale2SB = {{100, 2.9436520687559216}};
lengthscalemix1SB = {{79, 2.495395024671054}};
lengthscalemix2SB = {{30, 3.333075533653907}};
lengthscalemix3SB = {{45, 3.1442955345260786}};
lengthscalemix4SB = {{88, 2.009572697828747}};
lengthscalemix5SB = {{15, 3.3506633046912224}};


How can I fit it to a cubic spline?

The idea is to try to fit or provide a guide to the eye line to that data perhaps similar to this:

(* Plot can be generated as:

Show[
ListPlot[List /@ {lengthscale1SB[[1]]}, Frame -> True,
FrameStyle -> 16, Axes -> False, GridLines -> Automatic,
GridLinesStyle -> Lighter[Gray, .8],
FrameTicks -> {Automatic, Automatic}, ImageSize -> Large,
LabelStyle -> {Black, Bold, 14}, PlotStyle -> {Red, Cyan, Gray},
PlotLegends ->
Placed[PointLegend[Automatic, Defer /@ qDSClabel,
LegendMarkers -> {Row[{Style["\[FilledCircle]", 12],
Style["\[FilledUpTriangle]", 16]}, Spacer[2]], 12},
LegendMarkerSize -> {30, 20}, Spacings -> {.8, 0}], {0.12,
0.25}]],

ListPlot[List /@ {lengthscale2SB[[1]]},
PlotStyle -> {Red, Cyan, Gray}],

ListPlot[List /@ {lengthscalemix1SB[[1]]},
PlotStyle -> {Red, Cyan, Gray}],

ListPlot[List /@ {lengthscalemix2SB[[1]]},
PlotStyle -> {Red, Cyan, Gray}],

ListPlot[List /@ {lengthscalemix3SB[[1]]},
PlotStyle -> {Red, Cyan, Gray}],

ListPlot[List /@ {lengthscalemix4SB[[1]]},
PlotStyle -> {Red, Cyan, Gray}],

ListPlot[List /@ {lengthscalemix5SB[[1]]},
PlotStyle -> {Red, Cyan, Gray}],

PlotRange -> {{-1, 101}, All}

]


*)

• Did you see the Splines methods: reference.wolfram.com/language/guide/Splines.html?
– Moo
Jul 1 at 21:06
• There’s a resource function for that! It is called CubicSplineInterpolation. From the documentation page, it appears that many cubic spline methods are implemented within it! Jul 1 at 23:29
• I guess, the simplest way is to use the BSplineCurve@jointarray in Epilog. Where the jointarray is a list with all desired points included. Jul 2 at 7:58
• @Rom38 could you give me an example of how to do that? I specifically would want to do it with a Spline function/curve.
– John
Jul 2 at 13:59

The usage of BSpline is simple:

1. Just mix your points into the joint array

ar1=SortBy[
Flatten[{
lengthscale1SB,
lengthscale2SB,
lengthscalemix1SB,
lengthscalemix2SB,
lengthscalemix3SB,
lengthscalemix4SB,
lengthscalemix5SB,1],
First];

2. Draw it by BSplineCurve of desired order

ListPlot[ar1,
Frame -> True,
PlotStyle -> Blue,
Epilog -> {Dashed,
Red,BSplineCurve[ar1[[1 ;; -2]],SplineDegree->3],
Black,Line@ar1[[-2 ;; -1]]}]


1. You can access the spline points by

bsf = BSplineFunction[ar1[[1 ;; -2]],
SplineDegree -> 3]
bsf[0.5]
`

{38.0937, 3.21896}

Here 0.5 is parametric argument for spline that should be in the range [0,1]