I am trying to use the function BSplineFunction[] to create a natural cubic spline. Normally what is done is that you specify "SplineDegree -> 3" and include a list of points and it will carry out the interpolation. I have a slightly different scenario now where my knots are not known, some of the points are variable and some interpolation points are not specified but rather velocities are specified.

More specifically, I would like a natural cubic spline satisfying these constraints where the numbers $0 < b < a$ and where $p_{-1}, p_0$ and $p_1$ are fixed:

$$ \begin{align}x(-a) & = a(p_{-1} - p_0) & x^{(1)}(-a) & = p_0 - p_{-1} & x^{(2)}(-a) &= 0 \\ x(a) &= a(p_1 - p_0) & x^{(1)}(a) & = p_1 - p_{0} & x^{(2)}(a) &= 0 \\ & &x(0) &= p_0\end{align} $$

With the condition $x(t)$ needs $C^2$ at $t = -b$, $t = 0$ and $t=b$.

This will give me $4$ separate cubic polynomials on $[-a, -b], [-b, 0], [0, b], [b, a]$. I have a total of $16$ degrees of freedom and $16$ constraints so a unique solution should exist.

I could very easily put this into a matrix myself but it seems Mathematica already has it inbuilt, it would be a shame not to use it just because I couldn't figure out how. Is this possible and if so, can you please either let me know how or point me to relevant documentation that I might not have seen yet.


Edit: Additional details regarding the conversation between me and belisarius below. I have done a hand computation for such a problem and here is an example of a function I get:

$$ f_1 = -\frac{x^3 (-2 b \text{pC}+b \text{pL}+b \text{pR}-6 \text{pC})}{6 a^2 (a-b)}-\frac{x^2 (-2 b \text{pC}+b \text{pL}+b \text{pR}-6 \text{pC})}{2 a (a-b)}-\frac{x (-2 a \text{pC}+2 a \text{pL}-b \text{pL}+b \text{pR}-6 \text{pC})}{2 (a-b)}+\frac{a (2 b \text{pC}-b \text{pL}-b \text{pR}+6 \text{pC})}{6 (a-b)} $$

where pL = $p_{-1}$, pC = $p_0$ and pR = $p_1$. Here is a picture of $f_1, f_2, f_3, f_4$ for the parameters $b=3, a=6$ and $p_{-1} = 2, p_0 = 3$ and $p_1 = 5$:

Cubic spline

  • 2
    $\begingroup$ See the options for Interpolation: they allow you to specify derivatives. $\endgroup$
    – whuber
    Mar 19, 2013 at 20:47
  • $\begingroup$ Thanks, I will have another look. I probably missed something obvious, I did read through those before. $\endgroup$
    – muzzlator
    Mar 19, 2013 at 21:01
  • $\begingroup$ I seem to be missing something. Apart from the conditions $0<b<a$ and $C^2$ continuity at $\pm b$, there are no other conditions (e.g. values at $x=\pm b$)? $\endgroup$ Apr 20, 2013 at 18:47
  • $\begingroup$ Hm. I seem to have misworded the original question, it should be $C^2$ at $x = 0$ too. Will edit. $\endgroup$
    – muzzlator
    Apr 20, 2013 at 18:54
  • $\begingroup$ Still missing something. There's no prescription for, say, $x(b)$? $\endgroup$ Apr 20, 2013 at 19:01


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Browse other questions tagged or ask your own question.