• Non ci sono risultati.

Interpolazione spline in Matlab

N/A
N/A
Protected

Academic year: 2021

Condividi "Interpolazione spline in Matlab"

Copied!
16
0
0

Testo completo

(1)

Interpolazione spline in Matlab

Alvise Sommariva Universit`a degli Studi di Padova Dipartimento di Matematica Pura e Applicata

19 aprile 2019

(2)

Splines

Sia [a, b] ⊂ R chiuso e limitato, e sia a = x0< x1< . . . < xn= b. Unaspline

di grado m(o ordine m + 1) `e una funzione in Cm−1([a, b]) che in ogni

intervallo [xi, xi +1], con i = 0, . . . , n − 1, `e un polinomio di grado m. Alcuni esempi:

spline di grado 1 (lineari): una funzione in C ([a, b]) che in ogni intervallo [xi, xi +1], con i = 0, . . . , n − 1, `e un polinomio di grado 1.

spline di grado 3 (cubiche): una funzione in C2([a, b]) che in ogni

intervallo [xi, xi +1], con i = 0, . . . , n − 1, `e un polinomio di grado 3.

(3)

Interpolazione con splines

Si dimostra che

la spline interpolante di grado 1 esiste ed `e unica,

la spline interpolante di grado 3 esiste ed `e unica, qualora si aggiungano due opportune condizioni aggiuntive.

In quest’ultimo caso, classiche richieste aggiuntive sono Spline naturale: s3(2)(a) = s3(2)(b) = 0.

Spline periodica: s3(1)(a) = s (1) 3 (b), s (2) 3 (a) = s (2) 3 (b). Spline vincolata: s3(1)(a) = ya0, s

(1) 3 (b) = y 0 b (con y 0 a, y 0 b assegnati).

(4)

Splines cubiche di tipo not-a-knot

La spline cubica s3NAK con vincolonot-a-knot`e definita come segue: Interpola le coppie (x0, y0), . . ., (xn, yn);

E’ un polinomio di grado 3 nell’intervallo [x0, x2]; E’ un polinomio di grado 3 nell’intervallo [xn−2, xn] Si dimostra che una tale spline di grado n = 3 esiste ed `e unica. Nota.

Si osservi che per le spline cubiche generiche s3non `e detto che la restrizione di s3a [x0, x1] e [x1, x2] siano lo stesso polinomio,

similmente che la restrizione di s3a [xn−2, xn−1] e [xn−1, xn] siano lo stesso polinomio.

(5)

Interpolanti splines in Matlab

In questa sezione vediamo come determinare le interpolanti splines lineari e cubiche in Matlab. La tentazione `e usare l’help di Matlab relativamente al comando spline da cui otteniamo:

>> h e l p s p l i n e

s p l i n e C u b i c s p l i n e d a t a i n t e r p o l a t i o n .

PP = s p l i n e( X , Y ) p r o v i d e s the p i e c e w i s e p o l y n o m i a l form of the c u b i c s p l i n e i n t e r p o l a n t to the d a t a v a l u e s Y at the d a t a s i t e s

X ,

f o r use w i t h the e v a l u a t o r P P V A L and the s p l i n e u t i l i t y U N M K P P . X m u s t be a v e c t o r .

. . . E x a m p l e :

T h i s i l l u s t r a t e s the use of c l a m p e d or c o m p l e t e s p l i n e i n t e r p o l a t i o n w h e r e

end s l o p e s are p r e s c r i b e d . In t h i s example , z e r o s l o p e s at the e n d s of an i n t e r p o l a n t to the v a l u e s of a c e r t a i n d i s t r i b u t i o n are e n f o r c e d : x = − 4 : 4 ; y = [ 0 . 1 5 1 . 1 2 2 . 3 6 2 . 3 6 1 . 4 6 . 4 9 . 0 6 0 ] ; cs = s p l i n e( x , [ 0 y 0 ] ) ; xx = l i n s p a c e( − 4 , 4 , 1 0 1 ) ; p l o t( x , y ,’ o ’, xx , ppval ( cs , xx ) ,’− ’) ; . . .

See a l s o i n t e r p 1, pchip , ppval , mkpp , unmkpp . . . .

>>

(6)

Interpolanti splines in Matlab

Come suggerito proviamo anche qualche altro comando, quale interp1:

>> h e l p i n t e r p 1

i n t e r p 1 1−D i n t e r p o l a t i o n ( table lookup )

Vq = i n t e r p 1( X , V , Xq ) i n t e r p o l a t e s to f i n d Vq , the v a l u e s of the u n d e r l y i n g f u n c t i o n V=F ( X ) at the q u e r y p o i n t s Xq .

. . .

Vq = i n t e r p 1( X , V , Xq , METHOD ) s p e c i f i e s the i n t e r p o l a t i o n m ethod . The a v a i l a b l e m e t h o d s are :

’ l i n e a r ’ − ( default ) linear i n t e r p o l a t i o n

’ n e a r e s t ’ − nearest neighbor i n t e r p o l a t i o n

’ n e x t ’ − next neighbor i n t e r p o l a t i o n

’ p r e v i o u s ’ − previous neighbor i n t e r p o l a t i o n

’ s p l i n e ’ − piecewise cubic s p l i n e i n t e r p o l a t i o n ( SPLINE )

’ p c h i p ’ − shape−preserving piecewise cubic i n t e r p o l a t i o n

’ c u b i c ’ − same as ’ p c h i p ’

’ v 5 c u b i c ’ − the cubic i n t e r p o l a t i o n from MATLAB 5 , w h i c h d o e s not

e x t r a p o l a t e and u s e s ’ s p l i n e ’ i f X is not e q u a l l y s p a c e d .

’ makima ’ − modified Akima cubic i n t e r p o l a t i o n . . .

For example , g e n e r a t e a c o a r s e s i n e c u r v e and i n t e r p o l a t e o v e r a f i n e r a b s c i s s a :

X = 0 : 1 0 ; V = s i n( X ) ; Xq = 0 : . 2 5 : 1 0 ;

Vq = i n t e r p 1( X , V , Xq ) ; p l o t( X , V ,’ o ’, Xq , Vq ,’ : . ’) . . .

>>

(7)

Interpolanti splines in Matlab

Di conseguenza, il comando giusto per calcolare l’interpolante spline sembra essereinterp1.

Lo si capisce in particolare quando l’help dice

Vq = i n t e r p 1( X , V , Xq , METHOD ) s p e c i f i e s the i n t e r p o l a t i o n m ethod .

ovvero che con ulteriori specifiche METHOD, quali linear o spline, permette di valutare la spline interpolante (rispettivamente lineare e cubica con condizioni not-a-knot) nelle coppie (Xk, Vk), k = 1, . . . , m nei punti Xqs, s = 1, . . . , M e assegna tale risultato a Vqs.

(8)

Interpolanti spline lineari in Matlab

Registriamo nel file demo spline lineare.m: f u n c t i o n d e m o _ s p l i n e _ l i n e a r e % O g g e t t o : % I n t e r p o l a z i o n e d e l l a f u n z i o n e ” s i n ” i n [ 0 , 2∗ p i ] , % m e d i a n t e s p l i n e s l i n e a r i a =0; b=2∗p i; f=@ ( x ) s i n( x ) ; % numero s u b i n t e r v a l l i N =7; % p u n t i e q u i s p a z i a t i i n c u i i n t e r p o l a r e ” f ” . hx=(b−a ) / N ; x=a : hx : b ; y=f e v a l( f , x ) ; % v a l o r e f u n z i o n e i n ” x ” % p u n t i t e s t i n c u i v a l u t a r e g l i e r r o r i f o r n i t i t r a % f u n z i o n e e i n t e r p o l a n t e ht = 1 / 1 0 0 0 0 ; t=a : ht : b ;

(9)

Interpolanti spline lineari in Matlab

% v a l o r i a s s u n t i d a l l ’ i n t e r p o l a n t e s p l i n e l i n e a r e % n e i p u n t i t e s t ” t x ” z = i n t e r p 1( x , y , t ,’ l i n e a r ’) ; % v a l o r e d e l l a f u n z i o n e ” f ” n e i n o d i t e s t ftx=f e v a l( f , t ) ; % v a l u t a z i o n e e r r o r e d i i n t e r p o l a z i o n e n e i n o d i t e s t m a x e r r=max(a b s( ftx−z ) ) ; % s t am p a r i s u l t a t i a v i d e o f p r i n t f(’ \n \ t massimo e r r o r e d i i n t e r p o l a z i o n e : %1.2 e ’, maxerr ) ; f p r i n t f(’ \n \n ’) ; % −−−−−−−−−−−−− p l o t −−−−−−−−−−−−− c l f; p l o t( t , ftx , t , z ,’ L i n e W i d t h ’, 2 ) ; h o l d on ; % g r a f i c o d e l l e c o p p i e da i n t e r p o l a r e p l o t( x , y ,’ ko ’,’ L i n e W i d t h ’, 1 ,’ M a r k e r F a c e C o l o r ’,’ c ’,’ M a r k e r S i z e ’, 8 ) ; % l e g e n d a e t i t o l o t i t l e(’ E s e m p i o i n t e r p o l a n t e s p l i n e l i n e a r e ’) ; l e g e n d(’ s i n ( x ) ’,’ i n t p . s p l i n e l i n e a r e ’,’ c o p p i e da i n t p . ’) ; h o l d off

(10)

Interpolanti spline lineari in Matlab

La lettura del codice dice che

Data la funzione f (x ) = sin(x ) si calcola l’interpolante lineare spline s1 nelle coppie (xk, yk), dove

xk= 2π(k − 1)

7 , k = 1, . . . , 8 e la si valuta nei nodi test

tk=2π(k − 1)

10000 , k = 1, . . . , 10001 ponendo tale risultato in zk.

A video viene scritto il massimo errore di interpolazione max

k=1,...,10001|f (tk) − s1(tk)| =k=1,...,10001max |f (tk) − zk|.

Di seguito si esegue il grafico sia di f che di s1, evidenziando le coppie da interpolare.

Da command-window:

>> d e m o _ s p l i n e _ l i n e a r e

m a s s i m o e r r o r e di i n t e r p o l a z i o n e : 9 . 6 6 e−02 >>

(11)

Interpolanti spline lineari in Matlab

Quale risultato otteniamo il grafico in figura.

0 1 2 3 4 5 6 7 -1 -0.8 -0.6 -0.4 -0.2 0 0.2 0.4 0.6 0.8

1 Esempio interpolante spline lineare

sin(x) intp. spline lineare coppie da intp.

Figura:Grafici della funzione f (x ) = sin(x ) e dell’interpolante spline lineare s1.

(12)

Interpolanti spline cubiche in Matlab

Modifichiamo la demo precedente in una nuova function demo spline cubica.m, sostituendo

ty = i n t e r p 1( x , y , tx ,’ l i n e a r ’) ;

con

ty = i n t e r p 1( x , y , tx ,’ s p l i n e ’) ;

Data la funzione f (x ) = sin(x ), la routine

calcola l’interpolante spline cubica (con condizioni not-a-knot) s7(3)nelle coppie (xk, yk), dove xk= 2π(k−1)7 , k = 1, . . . , 8,

valuta s7(3) nei nodi test txk=2π(k−1)10000 , k = 1, . . . , 10001, ponendo tale risultato in tyk.

Da command-window:

>> d e m o _ s p l i n e _ c u b i c a

m a s s i m o e r r o r e di i n t e r p o l a z i o n e : 1 . 4 5 e−02 >>

(13)

Interpolanti spline cubiche in Matlab

Quale risultato otteniamo il grafico in figura.

0 1 2 3 4 5 6 7 -1 -0.8 -0.6 -0.4 -0.2 0 0.2 0.4 0.6 0.8

1 Esempio interpolante spline cubica not-a-knot

sin(x) intp. spline lineare coppie da intp.

Figura:Grafici della funzione f (x ) = sin(x ) e dell’interpolante spline cubica s3con condizioni not-a-knot.

(14)

Interpolanti spline cubiche in Matlab

Un paragone visivo e geometrico mostra con evidenza la miglior qualit`a dell’approssimazione mediante spline cubica (con condizione not-a-knot). Qualora intendiamo determinare la spline cubica naturale (ovvero con

s3(2)(0) = s3(2)(2π) = 0), che sia interpolante nei nodi prefissati, basta sostituire

ty = i n t e r p 1( x , y , tx ,’ s p l i n e ’) ;

con

pp=c s a p e ( x , y ,’ v a r i a t i o n a l ’) ; ty=ppval ( pp , tx ) ;

Salvata la modifica nel filedemo spline cubica naturale.mabbiamo

>> d e m o _ s p l i n e _ c u b i c a _ n a t u r a l e

m a s s i m o e r r o r e di i n t e r p o l a z i o n e : 2 . 0 0 e−03 >>

Quale risultato otteniamo il grafico in figura, non molto diverso dal precedente ottenuto mediante una spline cubica interpolante con condizione not-a-knot. Per altri tipi di splines cubiche, si veda [1].

(15)

Interpolanti spline cubiche in Matlab

0 1 2 3 4 5 6 7 -1 -0.8 -0.6 -0.4 -0.2 0 0.2 0.4 0.6 0.8

1 Esempio interpolante spline cubica naturale

sin(x) intp. spline lineare coppie da intp.

Figura:Grafici della funzione f (x ) = sin(x ) e dell’interpolante spline cubica s3con condizioni naturali.

(16)

Bibliografia I

Mathworks, Cubic spline interpolation with end conditions, https://www.mathworks.com/help/curvefit/csape.html

Riferimenti

Documenti correlati

Grafico che illustra l’interpolazione su nodi equispaziati nell’intervallo [0, 2π] della funzione sin (x) mediante una spline lineari a tratti e una spline cubica con vincolo

per qualche numero naturale s, le splines di grado m sono definite su un insieme di punti arbitrari , indipendentemente dal grado.... tratti di grado 3 Spline cubica

Si noti come in quest’ultimo teorema si afferma come non solo come la spline ap- prossima la funzione, ma come pure le sue derivate convergano uniformemente alle rispettive

Osserviamo che non sempre le funzioni polinomiali a tratti di grado m sono di classe C m−1 come invece lo sono le splines.. Mentre le funzioni a tratti di grado m richiedono che

Quale risultato otteniamo il grafico in figura, non molto diverso dal precedente ottenuto mediante una spline cubica interpolante con condizione not-a-knot. Per altri tipi di

Si noti come in quest’ultimo teorema si afferma come non solo come la spli- ne approssima la funzione, ma come pure le sue derivate convergano uniformemente alle rispettive

L’unicit´a dell’interpolante `e legata (ma non solo!) all’aggiungere alcune propriet´a della spline agli estremi x 0 , x n.. tratti di grado 3 Spline cubica naturale intp.. 301)..

restituisce i valori della spline cubica interpolante (x,y) in xx calcolata con le condizioni agli estremi not a knot (nel secondo e penultimo nodo si impone la continuita‘