Splines Dato l intervallo [a, b], si consideri una successione finita di numeri reali (nodi) appartenenti all intervallo, tali che a = x 0 < x 1 < x 2 < < x m+1 = b Si individua in tal modo una partizione dell intervallo [a, b] in m + 1 sottointervalli I i = [x i, x i+1 ], i = 0,..., m.
Polinomi a pezzi 3 2.5 2 1.5 1 0.5 0 0.5 1 0.5 0 0.5 1 1.5 2 2.5 3 3.5 4 Figure: Polinomi a pezzi di grado 2
Splines Definizione Si dice funzione spline di grado n o di ordine n + 1 relativa alla partizione {x i } m+1 i=0 di [a, b], una funzione s(x) che soddisfa le seguenti due proprietà: 1 s(x) è un polinomio s i (x) di grado non superiore a n in ciascun sottointervallo I i della partizione (i = 0,..., m) 2 s(x) C n 1 ([a, b]), ossia la funzione e le sue derivate fino all ordine n 1 sono continue sull intervallo [a, b]; ciò significa che per ogni nodo interno alla partizione valgono le seguenti condizioni s (k) i (x i+1 ) = s (k) i+1 (x i+1), i = 0,..., m 1, k = 0, 1,.., n 1
Splines In altre parole, una spline s(x) entro ciascun intervallo I i è un polinomio di grado al più n che in ogni punto interno all intervallo è C e agli estremi coincide con il polinomio relativo all intervallo precedente (se esiste) e con quello dell intervallo successivo (se esiste) fino alla derivata (n 1) esima.
Splines 3 2.5 2 1.5 1 0.5 0 0.5 1 1.5 2 2.5 3 3.5 4 Figure: Spline di grado 1
Splines 3.5 3 2.5 2 1.5 1 0.5 0 0 0.5 1 1.5 2 2.5 3 3.5 4 Figure: Spline di grado 3
Spline interpolante Dati i punti (x i, y i ), i = 0,..., m + 1 Vogliamo trovare una spline di grado n tale che s(x i ) = y i. (1) La partizione con cui definisco la spline coincide con le ascisse x i.
Spline interpolante Generalmente si usano le spline di grado 3. Esse hanno la seguente proprietà: Tra tutte le funzioni f (x) C 2 [a, b] che soddisfano le condizioni di interpolazione (1) e le condizioni agli estremi scelte, le spline cubiche corrispondenti sono le sole funzioni che minimizzano l integrale E(f ) = b a [f (x)] 2 dx E(f ) rappresenta una misura approssimata della curvatura totale di f in [a, b]. Quindi la spline cubica è tra tutte le funzioni che passano per i dati assegnati quella che ha la curvatura media inferiore ed è la più liscia.
Spline interpolante 5 4.5 4 3.5 3 2.5 2 1.5 1 0.5 0 0 0.5 1 1.5 2 2.5 3 3.5 4 Figure: Spline interpolante di grado 3 (blu) e polinomio interpolante (verde)
Comandi di Matlab x=ascisse dei punti da interpolare y=ordinate dei punti da interpolare xx=vettore di ascisse in cui valutare la spline interpolante yy=spline(x,y,xx) 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 continuità della derivata terza)
Alcuni comandi del Toolbox splines csapi: spline cubica interpolante con condizioni not-a-knot PP = csapi(x,y) restituisce la spline cubica interpolante nella ppform (piecewise polynomial form). Per ottenere i valori della spline nei punti del vettore xx si usa il comando fnval: yy=fnval(pp,xx) Perché usare csapi al posto di spline? Perchè fornisce in PP i vari pezzi di polinomi che formano la spline... utile perché posso manipolarli calcolando derivate, integrali: dpp=fnder(pp) (comando per derivata) N.B. Per fare il plot della spline, i comandi plot(xx,yy) e fnplt(pp) sono equivalenti.
Alcuni comandi del Toolbox splines csape: fornisce la spline cubica interpolante, s(x), nella ppform con condizioni agli estremi dell intervallo [a, b] specificate dall utente. In particolare: pp=csape(x,y, v ) restituisce la spline naturale (s (a) = s (b) = 0) pp=csape(x,y, p ) restituisce la spline periodica (s (a) = s (b), s (a) = s (b)) pp=csape(x,[y (a) y y (b)], clamped ) restituisce la spline completa (s (a) = y (a), s (b) = y (b)) pp=csape(x,y, not a knot ) restituisce la spline not-a-knot
Spline ai minimi quadrati spap2 costruisce la spline di ordine k (espressa in termini della base B-spline associata a una data partizione) secondo il criterio dei minimi quadrati. x, y dati k = ordine (grado+1) knots=nodi della partizione che definiscono lo spazio delle spline che si vuole usare sp = spap2(knots,k,x,y) Esiste un unica soluzione se la partizione è tale da soddisfare la condizione di Whitney-Schomberg: le ascisse dei punti di interpolazione devono essere nella seguente relazione con i nodi knots(j) < x(j) < knots(j + k), j = 1,..., length(x) = length(knots) k. Problema: scelta dei nodi della partizione.
Volendo evitare di specificare il vettore dei nodi, si può usare il comando sp = spap2(n,k,x,y) dove n indica il numero di pezzi da cui deve essere costituita la spline ai minimi quadrati. Per valutare la spline in xx si usa sempre fnval(sp,xx) oppure spval(sp,xx).