Constructing cubic spline interpolation polynomials

4 replies · 2K views · last reply
bremenfallturm
Messages
81
Reaction score
13
Homework Statement
Given the following points:
(-5,1.561), (-4,2) and (-3, 2.56).
Construct cubic spline interpolation polynomials between them.
Relevant Equations
General equations for a third-degree / cubic polynomial:
##y=ax^3+bx^2+cx+d##
##\frac{dy}{dx}=3ax^2+2bx+c##
##\frac{d^2y}{dx^2}=6ax+2b##
My attempt at a solution: We have three points, hence we will have two polynomials ##p_1(x)## for ##x\in [-5,-4]## and ##p_2(x)## for ##x\in [-4,-3]##. Define: ##p_1(x)=c_1x^3+c_2x^2+c_3x+c_4## and ##p_2(x)=c_5x^3+c_6x^2+c_7x+c_8## where the ##c_n## stuff are coefficients for the polynomial.

I came up with the following equations:
  1. For ##p_1##, it must pass through the first two points:
    1. ##1,5610=c_1(-5)^3+c_2(-5)^2+c_3(-5)+c_4##
    2. ##2=c_1(-4)^3+c_2(-4)^2+c_3(-4)+c_4##
  2. For ##p_2##, it must pass through the middle point and the last point:
    1. ##2=c_5(-4)^3+c_6(-4)^2+c_7(-4)+c_8##
    2. ##2,56=c_1(-3)^3+c_2(-3)^2+c_3(-3)+c_8##
  3. 1st and 2nd order derivatives of the polynomials should be equal at the middle point, i.e. ##(-4,2)##
    1. ##3\cdot (-4^2)c_1+2\dot(-4)c_2+c_3-3\cdot (-4^2)c_5-2\cdot (-4)c_6-c_7=0##
    2. ##6c_1\cdot (-4)+2c_2-6c_5\cdot (-4)-2c_6=0##
  4. Finally I make the decision that the 2nd derivatives should be equal to 0 at the endpoints.
    1. ##6c_1\cdot (-5)+2c_2=0##
    2. ##6c_5\cdot (-3)+2_6 =0##
I turned all equations into matrix form and plugged it into an online matrix calculator. The matrix form is this:
Augmented matrix with 8 rows and 9 columns for cubic spline coefficients; the first entry -125 is circled, and the last column reads 1561/1000, 2, 2, 64/25, 0, 0, 0, 0 with an arrow linking rows.

The matrix calculator gave me the following solutions:
Handwritten answer listing eight fractions x1 through x8 as the solution coefficients: -121/392000, -363/78400, 999/2000, 23913/6125, 121/392000, 1089/392000, 10371/19600, 25607/6125.

If I try to plot it, it looks *almost* right but it's certainly not what I expected.
I assume it's a calculation problem, maybe it's even trival but I can not find it.
The plots look like below by the way, and you can find them using this link.
Graph of two line segments on a grid: a blue segment from (-5, 1.561) up to (-4, 2) and a green segment from (-4, 2) up to (-3, 2.56), with the three points labelled.

Many thanks for help!
 
bremenfallturm said:
Many thanks for help!
Check your arithmetic.
Here's the 8x8 matrix I get in Mathematica using your method of solution:
8 by 8 matrix of numbers in Mathematica output, with rows of coefficients including 125, -25, 5, -1, 64, -16, 4, -1, and zeros, plus entries 27, -9, 3, 48, -8, 1, 24, -2, 30, 18, -24, and 2.

Using this to solve your system results in the cubic-spline plot:
Line graph of a cubic spline through three points: red at (-5, 1.56), blue at (-4, 2.0) and green at (-3, 2.56), with blue and green segments curving upward on a grid.

This looks correct to me.
 
  • Like
Likes   Reactions: bremenfallturm and FactChecker
Why not start with the acutal expression for a cubic bezier curve with control points [itex]\mathbf{x}_i[/itex], [tex]\mathbf{x}(t) = (1-t)^3\mathbf{x}_0 + 3(1-t)^2 \mathbf{x}_1 + 3(1-t)t\mathbf{x_2} + t^3\mathbf{x}_3[/tex] which has the properties that [itex]\mathbf{x}(0) = \mathbf{x}_0[/itex], [itex]\mathbf{x}(1) = \mathbf{x}_3[/itex], [itex]\mathbf{x}'(0) = 3(\mathbf{x}_1 - \mathbf{x}_0)[/itex] and [itex]\mathbf{x}'(1) = 3(\mathbf{x}_3 - \mathbf{x}_2).[/itex] Fitting two of these to the curve in question gives you eight unknowns; fixing the end points immediately determines four of them. Continuity of the derivative gives you a fifth equation. For the other three, we have only three points so we should fit them with a quadratic. The conditions therefore are that the coefficients of [itex]t^3[/itex] each vanish and the coefficients of [itex]t^2[/itex] are equal.
 
renormalize said:
Check your arithmetic.
Here's the 8x8 matrix I get in Mathematica using your method of solution:
View attachment 348354
Using this to solve your system results in the cubic-spline plot:
View attachment 348355
This looks correct to me.
Haha what I silly mistake I made, I forgot a parenthesis when feeding the equations into the matrix calculator. All worked out now, thank you!
 
pasmith said:
Why not start with the acutal expression for a cubic bezier curve with control points [itex]\mathbf{x}_i[/itex], [tex]\mathbf{x}(t) = (1-t)^3\mathbf{x}_0 + 3(1-t)^2 \mathbf{x}_1 + 3(1-t)t\mathbf{x_2} + t^3\mathbf{x}_3[/tex] which has the properties that [itex]\mathbf{x}(0) = \mathbf{x}_0[/itex], [itex]\mathbf{x}(1) = \mathbf{x}_3[/itex], [itex]\mathbf{x}'(0) = 3(\mathbf{x}_1 - \mathbf{x}_0)[/itex] and [itex]\mathbf{x}'(1) = 3(\mathbf{x}_3 - \mathbf{x}_2).[/itex] Fitting two of these to the curve in question gives you eight unknowns; fixing the end points immediately determines four of them. Continuity of the derivative gives you a fifth equation. For the other three, we have only three points so we should fit them with a quadratic. The conditions therefore are that the coefficients of [itex]t^3[/itex] each vanish and the coefficients of [itex]t^2[/itex] are equal.
The reason I didn't start with that is because I didn't learn about it yet 😁 I am currently looking into more math regarding curve fitting so hopefully I will get there soon:)