Splines Alvise Sommariva Università degli Studi di Padova Dipartimento di Matematica Pura e Applicata 21 novembre 2011 Alvise Sommariva Splines 1/ 25
Interpolazione nodi equispaziati e problemi Si è visto che nel caso dell interpolazione polinomiale, dati N + 1 punti a = x 0 <... < x N = b, e i valori y 0,...,y N ivi assunti da una funzione y = f (x), esiste uno ed un solo polinomio p N di grado N tale che Nel caso di nodi equispaziati p N (x i ) = f i, i = 0,...,N. (1) x k = a + k (b a), k = 0,...,N; (2) N al crescere di N, non si puó garantire che f (x) p n (x) tenda a 0 (si ricordi il fenomeno di Runge!). Sorge spontaneo chiedersi se qualora si possegga un gran numero di punti, anche equispaziati, sia possibile calcolare un approssimante di tipo polinomiale per cui al crescere di N si abbia p N f. Alvise Sommariva Splines 2/ 25
Splines Sia [a,b] R chiuso e limitato, e sia a = x 0 < x 1 <... < x n = b. Una spline di grado m (o ordine m + 1) è una funzione in C m 1 ([a,b]) che in ogni intervallo [x i,x i+1 ], con i = 0,...,n 1, è un polinomio di grado m. Alcuni esempi: spline di grado 1 (lineari): una funzione in C([a,b]) che in ogni intervallo [x i,x i+1 ], con i = 0,...,n 1, è un polinomio di grado 1. spline di grado 3 (cubiche): una funzione in C 2 ([a,b]) che in ogni intervallo [x i,x i+1 ], con i = 0,...,n 1, è un polinomio di grado 3. Alvise Sommariva Splines 3/ 25
Splines di grado 1 e lineari a tratti Come anticipato sono funzioni C([a,b]) che in ogni intervallo [x i,x i+1 ], con i = 0,...,n 1, è un polinomio di grado 1. Di conseguenza sono funzioni continue lineari a tratti, essendo un segmento il grafico di un polinomio di grado 1 in [x i,x i+1 ]. 2 1.5 1 0.5 0 0.5 1 1.5 2 0 1 2 3 4 5 6 Figura: Esempio di splines grado 1 (n = 10 intervalli di uguale ampiezza). Alvise Sommariva Splines 4/ 25
Interpolazione con splines: grado 1. Esistenza e unicità Dati n + 1 punti in [a,b], diciamo a = x 0 < x 1 <... < x n 1 < x n = b, supponiamo di dover interpolare le coppie (x k,y k ) con k = 0,...,n, con una spline s 1 di grado 1 cioè determinare s 1 tale che s 1 (x k ) = y k per k = 0,...,n. Poichè per due punti assegnati (x j,y j ), (x j+1,y j+1 ) passa un unico segmento è evidente che tale funzione s 1 è unica. Alternativamente, basta osservare che in ogni subintervallo esiste ed è unico il polinomio di grado 1 che interpola 2 punti assegnati (x j,y j ), (x j+1,y j+1 ). Alvise Sommariva Splines 5/ 25
Interpolazione con splines: grado 3. Esistenza e unicità Dati n + 1 punti in [a,b], diciamo a = x 0 < x 1 <... < x n 1 < x n = b, supponiamo di dover interpolare le coppie (x k,y k ) con k = 0,...,n, con una spline s 3 di grado 3 cioè determinare s 3 tale che s 3 (x k ) = y k per k = 0,...,n. Questo caso è più complesso di quello delle splines di grado 1. Mostriamo che esistono splines s 3 interpolanti ma non sono uniche. Alvise Sommariva Splines 6/ 25
Interpolazione con splines: grado 3. Esistenza e unicità In ogni sottointervallo [x j,x j+1 ] una spline s 3 è un polinomio p 3,j (x) = 3 i=0 a jx j di grado 3 e quindi definita da 4 coefficienti a k. In totale i gradi di libertà sono 4n. Le condizioni di interpolazione nei punti x 0,...,x n sono n + 1. Le condizioni di regolarità fino alla derivata seconda nei punti x 1,..., x n 1 sono 3n 3 ed quindi le condizioni imposte sono in totale 4n 2 = (n + 1) + (3n 3). Dal confronto coi gradi di libertà, è quindi evidente che servano 2 ulteriori condizioni per determinare univocamente la spline s 3 interpolante. Alvise Sommariva Splines 7/ 25
Interpolazione con splines: grado 3. Esistenza e unicità Alcune classiche richieste aggiuntive. Spline naturale: s (2) 3 Spline periodica: s (1) 3 (a) = s(2) 3 (b) = 0. (a) = s(1) 3 (b), s(2) 3 (a) = s(2) 3 (b). Spline vincolata: s (1) 3 (a) = y a, s (1) 3 (b) = y b (con y a,y b assegnati). Alvise Sommariva Splines 8/ 25
Splines cubiche di tipo not-a-knot La spline cubica s NAK 3 con vincolo not-a-knot è definita come segue: Interpola le coppie (x 0,y 0 ),..., (x n,y n ); E un polinomio di grado 3 nell intervallo [x 0,x 2 ]; E un polinomio di grado 3 nell intervallo [x n 2,x n ] Si osservi che per le spline cubiche generiche s 3 non è detto che la restrizione di s 3 a [x 0,x 1 ] e [x 1,x 2 ] siano lo stesso polinomio, e similmente che la restrizione a [x n 2,x n 1 ] e [x n 1,x n ] siano lo stesso polinomio. Vediamo il confronto dei gradi di libertá. Richieste:Abbiamo n 2 polinomi da determinare e quindi 4(n 2) condizioni. Fornite:Interpolazione x 0,...,x n : n + 1 condizioni. Regolarità x 2,...,x n 2 : 3(n 3) condizioni. Quindi il numero di gradi di libertá richiesto e fornito è lo stesso. Alvise Sommariva Splines 9/ 25
Splines lineari: stima errore Sia s 1, : [a,b] R una spline di grado 1, che interpola le coppie (x i,f (x i )) dove x 0 = a < x 1 <... < x i < x i+1 <... < x N = b. = {x i } i=0,...,n indica la suddivisione [a,b] = n 1 i=0 [x i,x i+1 ]. Sia p i, = s 1, [xi,x i+1 ] P 1 dove P 1 è l insieme dei polinomi di primo grado. Dal teorema dell errore dell interpolazione polinomiale nel caso N = 1 abbiamo che puntualmente f (x) p i, (x) = f (2) (ξ) (x x i)(x x i+1 ), ξ (x i,x i + 1) (3) 2 da cui, posto h i, = (x i+1 x i ), M i, = max x (xi,x i+1 ) f (2) (x) è immediata la stima d errore per f C 2 ([a,b]) f (x) s 1, (x) = f (x) p i, (x) = f (2) (ξ) x x i x x i+1 2 M i h 2 i, 2, x [x i,x i+1 ] Alvise Sommariva Splines 10/ 25
Splines lineari: stima errore In realtà si può mostrare, con tecniche più precise, che f (x) s 1, (x) hi, 2 M i, 8, x [x i,x i+1 ] (4) Quindi, essendo f C 2 ([a,b]), per il teorema di Weierstrass esiste ed è finito M = max x [a,b] f (2) (x), ed evidentemente M i, := Di conseguenza max f (2) (x) max f (2) (x) := M. x [x i,x i+1 ] x [a,b] max f (x) s 1, (x) = max x [a,b] i=0,...,n 1 max f (x) s 1, (x) x [x i,x i +1] M i, max i=0,...,n 1 h2 i, 8 M 8 (max h i, ) 2. i Alvise Sommariva Splines 11/ 25
Splines lineari: convergenza uniforme Sia h = max i h i,. Sia fissata la famiglia di suddivisioni { n } con la proprietà che h n 0 (suddivisioni sempre più fini). Allora la convergenza della successioni di interpolanti s 1, n ad una funzione f C 2 ([a,b]) è uniforme. Infatti: f s 1, n M 8 (max h i, n ) 2 = M i 8 h2 n n 0. Alvise Sommariva Splines 12/ 25
Splines cubiche: stima errore Consideriamo di seguito spline cubiche s 3, n su una suddivisione n = {x i } di [a,b]. Poniamo h i, = x i+1 x i, f (k) derivata k-sima di f. Teorema. Supponiamo f C 4 ([a,b]). Posto h = max i h i,, si consideri una sudd. = {x i } di [a,b] con K = max i h /h i,. Esiste una costante c k indipendente da h tale che f (s) s (s) 3, c s Kh (4 s) f (4), s = 0,1,2,3 (5) dove f = max x [a,b] f (x). PS. Notare le componenti dell errore dovute alla suddivisione (cioè K e h ) e alla funzione f (cioè f (4) ). Alvise Sommariva Splines 13/ 25
Splines cubiche: stima errore Teorema. Supponiamo f C 4 ([a,b]). Si consideri la suddivisione = {x i } di [a,b] con h = h i, = h (cioè {x i } nodi equisp.). Allora esiste una costante c 0 indipendente da h tale che f s 3, c 0 h 4 f (4) (6) Inoltre esistono delle costanti c 1, c 2, c 3 indipendenti da h tali che dove f = max x [a,b] f (x). f (1) s (1) 3, c 1 h 3 f (4), (7) f (2) s (2) 3, c 2 h 2 f (4), (8) f (3) s (3) 3, c 3 h 1 f (4), (9) Nel caso di spline interpolanti e vincolate si ha c 0 = 5/384, c 1 = 1/24, c 2 = 3/8. Alvise Sommariva Splines 14/ 25
Splines cubiche: convergenza uniforme Sia h = max i h i,. Sia fissata la famiglia di suddivisioni { n } con la proprietà che h n 0 (suddivisioni sempre più fini). Allora la convergenza della successioni di interpolanti s 3, n ad una funzione f C 2 ([a,b]) è uniforme. Infatti da (5): f (s) s (s) 3, n c s Kh (4 s) n f (4) n 0. NB: Per s = 3, significa che la successione di funzioni a gradino s (3) 3, n converge a f (3) uniformemente. Alvise Sommariva Splines 15/ 25
Splines lineari: esempio di Runge. La funzione di Runge f (x) = 1/(1 + x 2 ) appartiene a C ([ 5,5]) e di conseguenza, nonostante la convergenza puntuale dell interpolazione polinomiale in nodi equispaziati non sia garantita, ciò non si può dire per l interpolazione mediante splines lineari o cubiche (sappiamo sussistere la conv. unif.!). Vediamo una stima dell errore più precisa. Nel caso lineare, se = {x i } è la sudd. equisp. di ampiezza h, se x [x i,x i+1 ] dove con f (x) s 1, (x) hi, 2 M i, = h 2 M i, 8 8 M i, = max f (2) (x). x (x i,x i+1 ) f (2) (x) = (8x 2 )/(x 2 + 1) 3 2/(x 2 + 1) 2. (10) Alvise Sommariva Splines 16/ 25
Splines lineari: esempio di Runge. Dal grafico di f (2) deduciamo che e quindi se x [x i,x i+1 ] M i M = f (2) = f (2) (0) = 2 f (x) s 1, (x) h 2 M i 8 M h2 8 h2 4 f s 1, h2 4. 2 1.8 1.6 1.4 1.2 1 0.8 0.6 0.4 0.2 0 5 0 5 Figura: Grafico di f (2) per f (x) = 1/(1 + x 2 ), in [ 5, 5]. Alvise Sommariva Splines 17/ 25
Splines cubiche: esempio di Runge. Usiamo le notazioni precedenti. Sappiamo che f s 3, c 0 h 4 f (4) e si può vedere che f (4) (x) = 24/(x 2 + 1) 3 288 x 2 /(x 2 + 1) 4 + 384 x 4 /(x 2 + 1) 5 il cui massimo modulo in [ 5,5] è f (4) (0) = 24. Quindi per splines cubiche intp. vincolate, essendo c 0 = 5/384 f s 3, c 0 h 4 f (4) (120/384)h 4. 25 20 15 10 5 0 5 0 5 Figura: Grafico di f (4) per f (x) = 1/(1 + x 2 ), in [ 5, 5]. Alvise Sommariva Splines 18/ 25
10 0 lineare Splines lineari e cubiche: confronto esempio di Runge. 10 10 cubica 10 20 10 30 10 40 10 50 10 60 10 70 0 5 10 15 Figura: Grafico stime errori intp. splines lineari e cubiche vincolate (ascissa: x = log 10 (h)). >> n =0:0.2:15; h=10.ˆ( n) ; >> e1=(h.ˆ2) /4; e3=(120/384) (h.ˆ4) ; >> semilogy (n,e1, r,n,e3, k ) ; >> legend ( l i n e a r e, cubica ) ; Alvise Sommariva Splines 19/ 25
Splines interpolanti in Matlab/Octave: spline Alcuni comandi per calcolare interpolazione spline in Matlab/Octave SPLINE Cubic s p l i n e data interpolation. YY = SPLINE (X,Y,XX) uses cubic s p l i n e interpolation to find YY, the values of the underlying function Y at the points in the vector XX. The vector X specifies the points at which the data Y is given.... Ordinarily, the not a knot end conditions are used. However, i f Y contains two more values than X has entries, then the first and last value in Y are used as the endslopes for the cubic s p l i n e.... Alvise Sommariva Splines 20/ 25
Splines interpolanti in Matlab/Octave: spline Example : This generates a sine curve, then samples the s p l i n e over a finer mesh : x = 0:10; y = sin (x) ; xx = 0 :. 2 5 : 1 0 ; yy = s p l i n e (x,y,xx) ; plot (x,y, o,xx,yy) Example : This illustrates the use of clamped or complete s p l i n e interpolation where end slopes are prescribed. Zero slopes at the ends of an interpolant to the values of a certain distribution are enforced : x = 4:4; y = [0.15 1.12 2.36 2.36 1.46.49.06 0 ] ; cs = s p l i n e (x, [ 0 y 0]) ; xx = linspace ( 4,4,101) ; plot (x,y, o,xx,ppval (cs,xx), ) ; See also INTERP1, PPVAL, SPLINES (The Spline Toolbox ). Alvise Sommariva Splines 21/ 25
Splines interpolanti in Matlab/Octave: interp1 INTERP1 1 D interpolation ( table lookup ). YI = INTERP1 (X,Y,XI) interpolates to find YI, the values of the underlying function Y at the points in the vector XI.The vector X specifies the points at which the data Y is given.... YI = INTERP1 (X,Y,XI, method ) specifies alternate methods. The default is linear interpolation. Available methods are : nearest nearest neighbor interpolation l i n e a r linear interpolation s p l i n e piecewise cubic s p l i n e interpolation ( SPLINE ) pchip piecewise cubic Hermite interpolation ( PCHIP ) cubic same as pchip v5cubic the cubic interpolation from MATLAB 5, which does not extrapolate and uses s p l i n e i f Xmis not equally spaced.... Alvise Sommariva Splines 22/ 25
Splines interpolanti in Matlab/Octave: interp1 For example, generate a coarse sine curve and interpolate over a finer abscissa : x = 0:10; y = sin (x) ; xi = 0 :. 2 5 : 1 0 ; yi = interp1 (x,y,xi) ; plot (x,y, o,xi,yi) See also INTERP1Q, INTERPFT, SPLINE, INTERP2, INTERP3, INTERPN. Quindi dall help di spline e interp1 deduciamo che: spline: calcola spline cubica intp. con vincolo not-a-knot e con qualche assegnazione anche vincolate; interp1: calcola spline lineare o spline cubica intp. con vincolo not-a-knot e con qualche assegnazione anche di altro tipo. Alvise Sommariva Splines 23/ 25
Splines interpolanti in Matlab/Octave: esempio di Runge Vediamo il comportamento della spl. lineare intp. la funzione di Runge in 13 nodi equisp., ricordando che l interpolante polinomiale p 12 su 13 nodi, aveva f p 12 3.66+00. Il file è runge lin.m. n=13; f=inline ( 1./(1+ x.ˆ2) ) ; % RUNGE. t=l inspa c e ( 5,5,1000) ; % NODI TEST. x=l inspa c e ( 5,5,n) ; % NODI SUDDIV. y=f e v a l (f,x) ; % ( x, y ) COPPIE INTP. st=interp1 (x,y,t, l i n e a r ) ; ft=f e v a l (f,t) ; err=norm(ft st,inf ) ; % ERRORE f s3 f p r i n t f ( \n \t e rr : %2.2e \n,err ) ; Otteniamo, come supposto, un migliore risultato rispetto a p 12 (stime: ((10/12) 2 )/4 0.17.) >> runge_lin err : 6.50e 02 >> Alvise Sommariva Splines 24/ 25
Splines interpolanti in Matlab/Octave: esempio di Runge Vediamo il comportamento delle spline cubiche not-a-knot interpolanti la funzione di Runge in 13 nodi equispaziati (avevamo f p 12 3.66 + 00). Il file è runge cub.m. n=13; f=inline ( 1./(1+ x.ˆ2) ) ; % RUNGE. t=l inspa c e ( 5,5,1000) ; % NODI TEST. x=l inspa c e ( 5,5,n) ; % NODI SUDDIV. y=f e v a l (f,x) ; % ( x, y ) COPPIE INTP. st=interp1 (x,y,t, s p l i n e ) ; ft=f e v a l (f,t) ; err=norm(ft st,inf ) ; % ERRORE f s3 f p r i n t f ( \n \t e rr : %2.2e \n,err ) ; Otteniamo, come supposto, un migliore risultato rispetto a p 12 e alle splines lineari (errore come h 4 e non h 2 ) >> runge_lin err : 6.91e 03 >> Alvise Sommariva Splines 25/ 25