Note that the splice slopes still match the functions at the interval endpoints, but now the splice is
above both functions.
Differentiating the splice
To differentiate the splice, do not expand the splice polynomial and differentiate it: accuracy will suffer
because of round-off error. Instead, first scale x to x
s
, find s'(x
s
), then scale this result. In other words,
[20]
d
dx
s
(
x
)
=
1
h
$
d
dx
s
a
$
x
s
4
+ b
$
x
s
3
+ c
$
x
s
2
+ d
$
x
s
+ e
or
[21]
d
dx
s
(
x
)
=
1
h
$
4
$
a
$
x
s
3
+ 3
$
b
$
x
s
2
+ 2
$
c
$
x
s
+ d
where
x
s
= k
$
(
x − x2
)
The higher-order derivatives are
[22]
d
2
dx
2
s
(
x
)
=
1
h
2
$
12 $ a $ x
s
2
+ 6 $ b $ x
s
+ 2 $ c
[23]
d
3
dx
3
s
(
x
)
=
1
h
3
$
(
24 $ a $ x
s
+ 6 $ b
)
[24]
d
4
dx
4
s
(
x
)
=
24
h
4
$ a
The following function can be used to find the splice derivative of any order.
spli4de(x,x2,h,cl,o)
Func
©(x,x2,h,k,{list},order) 4th-order splice derivative
©9apr02/dburkett@infinet.com
© Input arguments
©
© x The point at which to find the derivative
© x2 The splice interval midpoint
© h The splice interval half-width
© cl the list of splice function coefficients
© o the order of the derivative; o > 0
local xs,a,b,c,d,k
cl[1]→a © Extract polynomial coefficients
cl[2]→b
cl[3]→c
cl[4]→d
1/h→k © Invert half-width to simplify later calculations
k*(x-x2)→xs © Scale x
© Find derivative or return error string. The following when() is all on one line.
when(o≤0,"spli4de err",
when(o=1,k*polyeval({4*a,3*b,2*c,d},xs),
6 - 101