Common Splines

advertisement
1
Chapter 4. Common Splines
A spline function is a piecewise polynomial function joined together with certain
continuity conditions satisfied.
4.1. Linear Spline
For a set of data points usually termed knots: ( xi , yi , i  1, 2, , n) , the linear
spline is
si ( x)  ai x  bi , for x  xi , xi 1  , i  1, 2, , n  1
(4.1.1)
The C0 conditions, si ( xi )  yi and si ( xi 1 )  yi 1 yield 2(n  2) equations at interior
points. These along with one condition at each end point give a total of 2n  2 equations
to match the 2n  2 unknowns: ai , bi , i  1, 2, , n  1 . By applying these, we get
s i ( x)  y i
x  xi 1
x  xi
y  yi
 yi 1
 yi  i 1
( x  xi ), x  xi , xi 1 
xi  xi 1
xi 1  xi
xi 1  xi
(4.1.2)
which results in straight lines joining neighboring points.
Clearly, si (x) is the Lagrange interpolation formula for the data set consisting of
the following two points: ( xi , yi ) and ( xi 1 , yi 1 ) . Hence it is the solution approximation
for linear finite elements in one dimension.
Example 4.1.1. Find the linear splines for the following data set
i 1 2 3 4 5
x 0 5 7 8 10
y 0 2 -1 -2 20
Linear spline fit
s1 ( x)  0
x5
x0
2
 2.5 x , x  [0, 5]
05
50
s 2 ( x)  2
x7
x5
1
 1.5 x  9.5 , x  [5, 7]
57
75
2
s3 ( x)  1
x 8
x7
2
  x  6 , x  [7, 8]
7 8
87
s 4 ( x)  2
x  10
x 8
 20
 11x  90 , x  [8, 10]
8  10
10  8
Linear Spline Interpolation
20
data points
linear spline
interp1: linear
15 interp1: MATLAB function.
Type "help interp1" in MATLAB
window for its usage and options.
y
10
5
0
-5
0
1
2
3
4
5
x
6
7
8
9
10
Figure 4.1.1 Linear Splines for data set 1.
A MATLAB code “linear_spline_examples.m” is used to generate Figure 4.1.1.
Here is a brief algorithm for the code
(1)
(2)
Input the data points x(i) ,y(i), i = 1,n; Plot them as symbols using plot;
For i = 1, n-1, do
A = linspace(x(i),x(i+1),nint) % Divide each data interval into nint points
Call c1=linear_spline % Call the linear_spline.m function
Call c2=interp1 % Call the MATLAB function (default option: linear)
Plot c1
Plot c2
Enddo
3
The “linear_spline.m” function is built according to the following algorithm:
(1)
(2)
(3)
Input x where the interpolation value y is needed;
Check to see if x is out of range; if yes, abort the program; if no, proceed;
Find the data interval in which x resides;
Calculate y according to Equation 4.1.2.
Example 4.1.2 Finding the linear splines for the following data set
i 1 2 3 4 5 6
x 0 1 2 3 4 5
y 1 1 1 -1 -1 -1
We will use the same MATLAB code for this example. The only change needed
in “linear_spline_examples.m” is to replace the data set x and y with that in the table
above. The splines are plotted in Figure 4.1.2.
Linear Spline Interpolation
data points
linear spline
interp1: linear
1
0.8
0.6
0.4
y
0.2
0
-0.2
-0.4
-0.6
-0.8
-1
0
0.5
1
1.5
2
2.5
x
3
3.5
4
4.5
5
Figure 4.1.2 Linear Splines for data set 2.
Clearly the splines in both examples are just straight lines. We will use the two
data point sets above throughout this chapter and compare the splines due to different
methods.
4
4.2. Quadratic Spline
A quadratic spline has a quadratic function for each data interval
si ( x)  ai x 2  bi x  ci ,
for x  xi , xi 1  , i  1, 2, , n  1
which is constrained to satisfy the C0 and C1 conditions.
For the C0 condition, we get
si ( xi )  yi , si ( xi 1 )  yi 1 , i  1,2,...n  1
For the C1 condition, we get
si ( xi 1 )  si1 ( xi 1 ), i  1, 2, , n  2
(4.2.1)
(4.2.2)
(4.2.3)
From the above three requirements, there are 3n-4 constraint conditions. But the
splines require a total of 3n-3 conditions, so we are one condition short and the problem
is not completely defined. Usually, s1(x1) = 0 is used for the additional condition. This
results in the so-called natural quadratic spline. Certainly other conditions can be used,
such as s1(x1) = sn-1(xn ).
To find the formula of the splines, first denote di = si (xi ), then since s(x) is a
linear spline for the data set (xi, di, i = 1,2, , n), we have
x  xi
x  x (d i 1  d i ) x  d i 1 xi  d i xi 1
 d i i 1

xi 1  xi
xi 1  xi
xi 1  xi
d  di
 i 1
( x  xi )  d i
xi 1  xi
which is of course is the linear equation for the slope.
Integrating over x, we get
d  di
si ( x)  i 1
( x  x i ) 2  d i ( x  xi )  y i
2( xi 1  xi )
si ( x)  d i 1
(4.2.4)
after solving for the constant of integration using the C0 boundary condition: si ( xi )  yi .
So the quadratic spline is defined once we have the d i ’s.
Letting x = xi+1, we get
d  di
yi 1  i 1
( xi 1  xi ) 2  d i ( xi 1  xi )  yi
2( xi 1  xi )
which leads to
y  yi
d i 1  2 i 1
 d i , i  1, 2, , n  1
xi 1  xi
(4.2.5)
5
which is a recursive scheme. If d1 is known, then di can be derived from the above
equation.
Various conditions can be imposed to obtain d1:
 For the natural spline, d1  0 .
 If d1 = d2, then d1 can be calculated by
y  y1
y  y1
(4.2.6)
d1  d 2  2 2
 d1  d1  2
x2  x1
x2  x1
 If d1 = dn, then d1 can be calculated by

d1  d n  2  (1) n i 1
i 2 
n 1
n 1


y  yi
 (1) n i 1 i 1
d



1
y i 1  y i 

xi 1  xi
i 2 
  (1) n d1  
xi 1  xi 


no solution ,


 , n is even




n is odd 
(4.2.7)
This condition can not be applied when n is an odd number.
The algorithm of the MATLAB code “quadratic_spline_examples.m” is as
follows
(1)
Input the data points x(i) ,y(i), i = 1,n; Plot them as symbols using plot;
(2)
For i = 1, n-1, do
A = linspace(x(i),x(i+1),nint) % Divide each data interval into nint points
Call c1=quadratic_spline with d1 = 0; % Natural quadratic spline
Call c2=quadratic_spline with d1 = d2;
Plot c1
Plot c2
Enddo
The “quadratic_spline.m” function is built according to the following algorithm
(1) Input x where the interpolation value y is needed;
Check to see if x is out of range; if yes, abort the program; if no, proceed;
(2) Find the data interval where x belongs;
(3) Calculate d1; Calculate di (Equation 4.2.5);
(4) Calculate y according to Equation 4.2.4.
Example 4.2.1. Given the same data points in Example 4.1.1, derive the quadratic splines.
Using the natural quadratic splines, where d1 = 0, then we have
d2  2
20
1 2
 0  0.8, d 3  2
 0.8  3.8
50
75
d4  2
 2 1
20  2
 3.8  1.8, d 5  2
 1.8  20.2
87
10  8
6
s1 ( x) 
0.8  0
( x  0) 2  0( x  0)  0  0.08 x 2 , x  [0, 5]
2(5  0)
s 2 ( x) 
 3.8  0.8
( x  5) 2  0.8( x  5)  2  1.15 x 2  12.3x  289.5, x  [5, 7]
2(7  5)
s3 ( x) 
1.8  3.8
( x  7) 2  3.8( x  7)  1  2.8 x 2  9.4 x  162.8, x  [7, 8]
2(8  7)
s 4 ( x) 
20.2  1.8
( x  8) 2  1.8( x  8)  2  4.6 x 2  71.8 x  273.6, x  [8, 10]
2(10  8)
The results and the splines due to d1 = d2, are plotted in Figure 4.2.1. Near x = 0,
the natural spline has a flatter curve due to zero slope at x = 0. The other spline has a
linear slope in the first interval. Throughout all the data intervals, these two splines are
different, although the differences are small for the most part.
Quadratic Spline Interpolation
20
data points
natural quadratic spline
quadratic spline with d1=d2
15
y
10
5
0
-5
0
1
2
3
4
5
x
6
7
Figure 4.2.1. Quadratic Splines for data set 1.
8
9
10
7
Example 4.2.2. Given the same data points in Example 4.1.2, obtain the quadratic splines.
The only change needed in “quadratic_spline_examples.m” is to replace the data
set x and y with the table in Example 4.1.2. The splines are plotted in Figure 4.2.2. Note
that the natural splines and splines due to d1 = d2 are exactly the same. This is caused by
the fact that both options produce the same result: d1 = 0.
Also, the splines in the 4th and 5th intervals have large oscillations. We would like
a smooth transition in the 3rd interval ideally and the splines do have this feature. But
because of the under-shoot at interval 4, there are oscillations in the 4th and 5th intervals.
Generally, when the order of polynomial splines goes up, this problem can become very
severe.
Quadratic Spline Interpolation
1.5
data points
natural quadratic spline
quadratic spline with d1=d2
1
0.5
y
0
-0.5
-1
-1.5
-2
0
0.5
1
1.5
2
2.5
x
3
3.5
4
4.5
5
Figure 4.2.2. Quadratic Splines for data set 2.
4.3. Natural Cubic Splines
Generally, a function s is called a spline of degree k on x1  x2    xn if
(1) s  x1 , x n ;
(2) s ( j ) , j  0, 1, 2, , k  1 are all continuous functions on x1 , xn  where s(j) is the
jth derivative;
8
(3) s is a polynomial of degree  k on each interval xi , xi 1  .
If k  3 , the spline is called a cubic spline. Then the curvatures are linear in an
interval and denoting values at the points xi as ei  si( xi ), i  1, 2, , n , they comprise a
linear spline for the data set ( xi , ei , i  1, 2, , n) . Therefore
si( x)  ei 1
x  xi
x x
 ei i 1
, i  1, 2, , n  1
xi 1  xi
xi 1  xi
(4.3.1)
Integrating over x twice, we get
s i ( x) 
ei 1
e
( x  xi ) 3  i ( xi 1  x) 3  c( x  xi )  d ( xi 1  x)
6hi
6hi
(4.3.2)
where hi = xi+1 - xi and c and d are constants of integration.
Applying the C0 conditions, we get
c
yi 1 ei 1hi
y eh

; d i  i i
hi
6
hi
6
(4.3.3)
which leads to
s i ( x) 
ei 1
e
y
e h
y eh
( x  xi ) 3  i ( xi 1  x) 3  ( i 1  i 1 i )( x  xi )  ( i  i i )( xi 1  x) (4.3.4)
6hi
6hi
hi
6
hi
6
So the cubic spline is defined once we have the ei‘s.
The values of ei can be derived from the C1 continuity condition. Differentiating
the above equation, we get
si ( x) 
ei 1
e
y
e h
y eh
( x  xi ) 2  i ( xi 1  x) 2  ( i 1  i 1 i )  ( i  i i )
2hi
2hi
hi
6
hi
6
and
si ( xi )  
ei 2
y
e h
y eh
e h eh
hi  ( i 1  i 1 i )  ( i  i i )   i 1 i  i i  bi
2hi
hi
6
hi
6
6
3
where
bi 
yi 1  yi
, i  1, 2, , n  1
hi
(4.3.5)
9
Also
si1 ( xi ) 
ei 2
y
eh
y
e h
e h
eh
hi 1  ( i  i i 1 )  ( i 1  i 1 i 1 )  i 1 i 1  i i 1  bi 1
2hi 1
hi 1
6
hi 1
6
6
3
By setting si( xi )  si1 ( xi ) at all interior points, we have
hi 1ei 1  2(hi 1  hi )ei  hi ei 1  6(bi  bi 1 ), i  2, 3, , n  1
(4.3.6)
which is a tridiagonal system of equations in terms of the unknowns e i ’s. There are n
unknowns and n  2 equations. Two additional conditions are needed to determine the
cubic splines. When they are e1  en  0 , the resulting splines are called the natural
cubic splines. These equations can be rearranged as
e1  0
hi 1ei 1  u i ei  hi ei 1  vi
i  2, 3, , n  1
(4.3.7)
en  0
where
u i  2(hi 1  hi )
i  2, 3, , n  1
vi  6(bi  bi 1 )
(4.3.8)
The algorithm of the code “cubic_spline_examples.m” is very similar to
“linear_spline_examples.m”, so only the algorithm for the function “cubic_spline.m” will
be presented here.
(1)
(2)
(3)
(4)
(5)
(6)
(7)
Input x where the interpolation value y is needed; % s = y here.
Check to see if x is out of range; if yes, abort the program; if no, proceed;
Calculate hi and bi (Equation 4.3.5);
Calculate ui and vi (Equations 4.3.8);
Assign e1 = 0, then calculate ei (Equation 4.3.7)
Find the data interval in which x resides;
Calculate y according to Equation 4.3.4.
Example 4.3.1. Given the data points in Example 4.1.1, obtain the natural cubic splines.
To calculate the 2nd derivatives, first determine
h1 = 5, h2 = 2, h3 = 1, h4 = 2
b1 = 0.4, b2 = -1.5, b3 = -1, b4 = 1
Using above we can calculate ui’s and vi’s as
10
u2 = 14, u3 = 6, u4= 6
v2 = -11.4, v3 = 3, v4 = 12
Then from equation 4.3.7, we get
14 2 0   e2    11.4 

  

 2 6 1   e3    3 
 0 1 6   e   12 

 4 

The values of e2, e3, and e4 can be obtained by using the tridiagonal solver. These
values along with e1= e5 = 0 can then be used to determine the splines.
The natural cubic splines are plotted in Figure 4.3.1. MATLAB functions “spline”
and “interp1” with option set to spline produce exactly the same splines. The additional
two constraints built into these two MATLAB functions are as follows
s1(3) ( x 2 )  s 2(3) ( x 2 ) , and s n(3)2 ( x n 1 )  s n(3)1 ( x n 1 )
Cubic Spline Interpolation
20
data points
natural cubic spline
interp1:spline
spline
15
y
10
5
0
-5
0
1
2
3
4
5
x
6
7
Figure 4.3.1. Cubic Splines for data set 1
8
9
10
11
Example 4.3.2. Given the data points in Example 4.1.2, obtain the cubic splines.
The splines are plotted in Figure 4.3.2. All of them did better than the quadratic
splines. The oscillations are smaller. The natural splines here did even better than the
ones due to “spline” and “interp1: spline” in the 1st and 5th intervals.
Cubic Spline Interpolation
1.5
data points
natural cubic spline
interp1:spline
spline
1
y
0.5
0
-0.5
-1
-1.5
0
0.5
1
1.5
2
2.5
x
3
3.5
4
4.5
5
Figure 4.3.2. Cubic Splines for data set 2.
4.4. Conclusion
Splines of increasing order are obtained by increasing the order of continuity in
the matching conditions across intervals at interior points: linear splines match the data,
quadratic splines match first derivatives, cubic splines match second derivatives, etc. We
stop there because the concept is set and because higher order splines are rarely used in
applications. But is an increase in order worth the extra mathematical effort required to
generate it?
Observation of the graphs reveals that splines of order greater one oscillate
through the data. A comparison of splines is shown in Figures 4.4.1 and 4.4.2. We
discover that the quadratic spline, in general, oscillates more than the cubic about the
linear spline which we use as a reference. So increasing the order does not always
increase the oscillations. So which spline do we choose?
Selection of an appropriate spline depends on the application. If we want to
interpolate the data itself, perhaps the linear is the best choice. If we have data that we
know is cubic in nature, then a cubic spline may be a better choice. If we want derivatives
12
of data, a linear spline creates jumps at data points, hence a degree of smoothness may be
necessary. So again, one must make a choice based upon the application and carefully
weigh the results. In design, splines allow local smoothing through data and the cubic
spline is the usual choice.
How do splines compare to Hermite interpolations which also treat derivatives? It
is very important to understand the following concept: splines match derivative
conditions at intersections of splines, not derivatives in the data itself. In other words,
splines are piecewise functions which approximate the data by filling in the voids
between data: their matching conditions insure smooth connections between themselves,
not the data. On the other hand, Hermite interpolations require derivatives of data, that is,
the derivatives are part of the data set, e.g., position, velocity, acceleration. The only
relation between spline and Hermite interpolation is that they are both polynomials.
Spline Comparison
20
data points
natural cubic spline
natural quadratic spline
linear spline
15
y
10
5
0
-5
0
1
2
3
4
5
x
6
7
Figure 4.4.1 Spline comparison for dataset 1
8
9
10
13
Spline Comparison
1.5
data points
natural cubic spline
natural quadratic spline
linear spline
1
0.5
y
0
-0.5
-1
-1.5
-2
0
0.5
1
1.5
2
2.5
x
3
3.5
Figure 4.4.2 Spline comparison for dataset 2
4
4.5
5
Download