PDA

View Full Version : Cubic Spline Interpolation Tutorial


hotvette
Jul31-07, 11:14 PM
Attached below are two cubic spline tutorials:

1. Explanation of the classic tri-diagonal cubic spline formulation. Included are 2 example problems.

2. Extension to parametric cubic splines. Included are 2 example problems
.
:smile:

Drager
Oct19-07, 02:51 AM
wow,

After a very long search in google i found this tutorial.

And it was the first one, which describes parametric cubic splines in a good way.

Thank you very much :-)

Now i can lay streets through my landscape :-)

Cyko007
Oct31-07, 10:29 PM
Sigh....Thank You!

I was missing something very stupid and now I know what it is!

emer
Jan15-08, 11:20 AM
Thank you for tutorials. This has helped me very mush.

harshm
Mar2-08, 02:21 AM
Hey there -
Thanks for the great tutorials - they really helped me! I'm trying to duplicate your results for cubic interpolation of a circle with 4 points and I got the same solution for the 2nd derivatives in the x and y directions. However, when I solve for the coefficients and plot the cubic polynomials I can't seem to get the same result as you - Heres the code that calculates the coefficients (in MATLAB)

mx - x''
my - y''
Sx - x coefficients
Sy - y coefficients
s - arc length [0 0.25 0.5 0.75 1]

for i = 1:n-1
Sx(i,1) = (mx(i+1) - mx(i))/6*h;
Sx(i,2) = mx(i)/2;
Sx(i,3) = (x(i+1) - x(i))/h - h*(mx(i+1) + 2*mx(i))/6;
Sx(i,4) = x(i);

Sy(i,1) = (my(i+1) - my(i))/6*h;
Sy(i,2) = my(i)/2;
Sy(i,3) = (y(i+1) - y(i))/h - h*(my(i+1) + 2*my(i))/6;
Sy(i,4) = y(i);

end


%Plotting the function
ds = 0.01;
m=1;
i=1;
for i = 1:n-1
for k = s(i):ds:s(i+1)
genpnx(m) = Sx(i,1)*(k - s(i))^3 + Sx(i,2)*(k-s(i))^2 + Sx(i,3)*(k-s(i)) + Sx(i,4);
genpny(m) = Sy(i,1)*(k - s(i))^3 + Sy(i,2)*(k-s(i))^2 + Sy(i,3)*(k-s(i)) + Sy(i,4);
m = m+1;
end
i
end

plot(genpnx,genpny,'r')

Do you have any idea what I might be doing wrong? (Ive attached an image of what the spline looks like for 4 points)

Thanks!

hotvette
Mar3-08, 03:22 PM
Though I'm not a MATLAB person, your expressions for calculating the coefficients look correct. Make sure you are using 0.25 for h. Also, for plotting, t should vary from 0 to 0.25 for each segment.

Here are the coefficient values I got for the 1st segment:

ax = 32
bx = -24
cx = 0
dx = 1

ay = -32
by = 0
cy = 6
dy = 0

Actually, this isn't the best way to fit a circle with cubic polynomials. It is better to fit a quarter circle with a single parametric cubic. The tutorial has been updated - check it out.

harshm
Mar3-08, 07:08 PM
Thanks for the coefficients - they helped me figure out what the problem was - a syntax problem - the correct expression for the coefficients are

Sx(i,1) = (mx(i+1) - mx(i))/(6*h)

while I had

Sx(i,1) = (mx(i+1) - mx(i))/6*h

Thanks a ton!

hotvette
Mar3-08, 07:35 PM
Glad to help. Fyi, the problem can be made even simpler by making h = 1, meaning s = [0 1 2 3 4]. Second deriveratives are x" = [-3 0 3 -3], y" = [0 -3 0 3 0] and plotting can be done for t varying from 0 to 1 for each segment.

I encourage you to review the updated tutorial on circle fitting.

hotvette
Mar12-08, 02:10 PM
Attached is an update to the Cubic Spline Tutorial.

To Staff,

Would someone be willing to replace the 1st attachment in this thread with the below? Thanks.

vimspal
Nov22-08, 03:08 AM
thanks a lot buddy.

spacecamel
Dec17-08, 12:29 PM
Hi hotvette,
I have been looking for a good tutorial on Cubic Splines, nice work. I have found what I think might be an error in one of your examples, however. Example Problem #1 shows c2 = 0, but when I plug in the values:
y3 = 1
y2 = 0.125
h2 = .5
y3" = 0
y2" = 4.5
I come up with c2 = 1, not 0. Plugging 0.5 into the second polynomial with c2 = 1, I get y2 = 1, thus resulting in a discontinuity with the first polynomial. I'm too lazy to try to work out the root of the problem, but I figured I'd flag the discrepancy.
Cheers

hotvette
Dec17-08, 07:35 PM
Agree that C2 = 1.0 (typo), but I think the evaluation of the 2nd poly is OK:

y = a2(x - x_2)^3 + b2(x - x_2)^2 + c2(x - x_2) + d2

Update with typo fixed is attached.

spacecamel
Dec17-08, 07:38 PM
Yep, my mistake. I used ax^3 + bx^2 + cx + d rather than using (x-x0), etc.
Thanks again for the excellent tutorial.

goslar
Dec29-08, 10:54 PM
For the cubic spline interpolation if we have
A=(x2-x)/h; B=(x-x1/h); C=1/6*(A^3-A)*h^2; D=1/6*(B^3-B)*h^2;
y=A y1 + B y2 + C y1'' + D y2''

What is the interpolation error of above?


For example for Hermitian cubic spline it is smaller than 5/384 ||f^{(4)}|| h^4

cpile
Apr8-09, 02:51 PM
Thanks very much my friend! The tutorial for the parametric C Splines was very helpful to me!
You see, every book I ve read doesn t say how we can relate the derivatives of the actual curve to the derivatives of the parametric equations of x & y. Ok, its easy to proof with the chain rule but what about the values of these derivatives on bounds!! Simply, x'(t)/y'(t) must be constant on bounds, so give x'(t),y'(t) any value you want to keep this ratio constant! HAHAHAH, i feel stupid...
Very helpful!
Thanks again!

$am!
Oct16-09, 05:19 AM
Thanks! Just what i was looking for! :)

ark5230
Nov15-09, 02:31 PM
Any reading suggestion to smooth out a curve using spline or similar approach.