You are on page 1of 7

pick a function:

Clamped vs Natural Cubic Spline Example

g ( x) := 3 x + x cos ( x)
30

gp ( x) := 3 + cos ( x) x sin ( x)
j := 5 , 5.25 .. 10

25

pick the data points

g ( j)

n := 3

20


7
xx :=
8.5

10

15

10

i := 0 , 1 .. n

k := 0 , 1 .. n 1

ai := g (xxi)

hk := xxk+ 1 xxk

Solve the interpolation using a cubic spline w/ N=8


kk := 1 , 2 .. n 1

k := 0 , 1 .. n

h0 := xx1 xx0

hkk := xxkk+ 1 xxkk


xxk =
5
7
8.5
10

THOMAS ( A , B , C , d , N) :=

B0

B0

A0

for i 1 .. N
Ai Ai Ci Bi1
Bi
d0

Bi
Ai

if i N

d0
A0

for i 1 .. N
di

di Ci di1
Ai

for i 1 .. N
k N i
dk dk Bk dk+ 1
d

yk := g (xxk)

yk =
16.418
26.277
20.383
21.609

solve the clamped spline equations


Spline_clamped ( n , h , x , a) :=

A0 2 h0
B0 h0
f0

3
(a1 a0) 3 gp (x0)
h0

An 2 hn1
Cn hn1
fn 3 gp (xn)

3
hn1

(an an1)

for i 1 .. n 1
Ci hi1
Ai 2 (hi1 + hi)
Bi hi
fi

3
3
(ai+ 1 ai)
(ai ai1)
hi
hi1

c THOMAS ( A , B , C , f , n)
for k 0 , 1 .. n 1
dk

1
(ck+ 1 ck)
3 hk

bk

hk
1
(ak+ 1 ak) (2 ck + ck+ 1)
hk
3

a

b
c

d

solve the natural spline equations


Spline_natural ( n , h , x , a) :=

A0 1
f0 0
An 1
Cn 0
fn 0
for i 1 .. n 1
Ci hi1
Ai 2 (hi1 + hi)
Bi hi
fi

3
3
(ai+ 1 ai)
(ai ai1)
hi
hi1

c THOMAS ( A , B , C , f , n)
for k 0 , 1 .. n 1
dk

1
(ck+ 1 ck)
3 hk

bk

hk
1
(ak+ 1 ak) (2 ck + ck+ 1)
hk
3

a

b
c

d

solve the mixed BC spline equations


Spline_mixed ( n , h , x , a) :=

A0 1
f0 0
An 2 hn1
Cn hn1
fn 3 gp (xn)

3
hn1

(an an1)

for i 1 .. n 1
Ci hi1
Ai 2 (hi1 + hi)
Bi hi
fi

3
3
(ai+ 1 ai)
(ai ai1)
hi
hi1

c THOMAS ( A , B , C , f , n)
for k 0 , 1 .. n 1
dk

1
(ck+ 1 ck)
3 hk

bk

hk
1
(ak+ 1 ak) (2 ck + ck+ 1)
hk
3

a

b
c

d

Solve for the clamped cubic Spline Coefficients


C_cl := Spline_clamped ( n , h , xx , y)
ac := C_cl0
bc := C_cl1
16.418

26.277

ac =
20.383

21.609

cc := C_cl2

dc := C_cl3

0.296

4.131

cc =
1.955

5.806

8.078
bc = 0.776
4.04

0.639
dc = 1.352
0.856

Solve for the natural cubic Spline Coefficients


C_nat := Spline_natural ( n , h , xx , y)
an := C_nat0

16.418

26.277

an =
20.383

21.609

bn := C_nat1

7.962
bn = 1.136
2.693

cn := C_nat2

dn := C_nat3

4.549

cn =
3.511

0.758
dn = 1.791
0.78

Solve for the mixed cubic Spline Coefficients


C_mixed := Spline_mixed ( n , h , xx , y)
am := C_mixed0

16.418

26.277

am =
20.383

21.609

bm := C_mixed1

7.744
bm = 0.699
4.06

Define Spline Interpolant:


Spline_int ( x , xx , a , b , c , d) :=

cm := C_mixed2

dm := C_mixed3

4.221

cm =
1.981

5.793

0.704
dm = 1.378
0.847

for i 0 , 1 .. n 1
check_left 0
check_left 1 if x xxi
check_right 0
check_right 1 if x xxi+ 1
check check_left check_right
k i if check = 1
value ak + bk (x xxk) + ck (x xxk) + dk (x xxk)
2

value

Check interpolations:
Spline_int ( 6 , xx , am , bm , cm , dm) = 23.458

Exact

Spline_int ( 6 , xx , ac , bc , cc , dc) = 23.561

g ( 6) = 23.761

Spline_int ( 6 , xx , an , bn , cn , dn) = 23.622

Reproduce the function with the Cubic Spline:


M := 20
j := 1 , 2 .. M

z j := xx0 + ( j 1)

xxn xx0
M1

CSP_clampedj := Spline_int (z j , xx , ac , bc , cc , dc)


CSP_natural j := Spline_int (z j , xx , an , bn , cn , dn)
CSP_mixed j := Spline_int (z j , xx , am , bm , cm , dm)

j =
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

zj =
5
5.263
5.526
5.789
6.053
6.316
6.579
6.842
7.105
7.368
7.632
7.895
8.158
8.421
8.684
8.947
9.211
9.474
9.737
10

CSP_clampedj =
16.418
18.512
20.495
22.297
23.848
25.079
25.919
26.299
26.151
25.498
24.48
23.245
21.94
20.713
19.71
19.043
18.806
19.092
19.995
21.609

CSP_natural j =
16.418
18.5
20.498
22.331
23.915
25.168
26.006
26.346
26.109
25.331
24.197
22.902
21.643
20.617
20.001
19.811
19.962
20.369
20.946
21.609

CSP_mixed j =
16.418
18.443
20.391
22.186
23.749
25.005
25.876
26.285
26.159
25.516
24.499
23.26
21.948
20.715
19.708
19.039

g (z j) =
16.418
18.544
20.597
22.467
24.05
25.26
26.03
26.327
26.152
25.544
24.578
23.363
22.032
20.74
19.643
18.895
18.632
18.959
19.944
21.609

27

26

25

24

g( z j)
CSP_clamped j

23

22

CSP_natural j
CSP_mixed j

21

yk
20

19

18

17

16

7
8
z j , z j , z j , z j , xxk

10

You might also like