Interpolazione a tratti, spline cubiche e minimi quadrati
In questa pagina 5
Prerequisiti: Interpolazione polinomiale - forma di Lagrange, differenze divise ed erroreDati n+1 punti con ascisse distinte esiste un unico polinomio p_n di grado ≤ n che passa per tutti. Forma di Lagrange p = Σ y_i L_i(x) (L_i(x_j) = δ_ij); forma di Newton p = Σ f[x_0..x_k] Π_{j<k}(x − x_j) con le differenze divise (si aggiunge un nodo senza rifare tutto). Errore f(x) − p_n(x) = f^(n+1)(ξ)/(n+1)! · ω(x), ω(x) = Π(x − x_i): dipende da f e dalla scelta dei nodi. Nodi equispaziati con n grande danno il fenomeno di Runge; i nodi di Chebyshev minimizzano max|ω| = 2^(−n) su [−1,1].Interpolazione polinomiale - forma di Lagrange, differenze divise ed errore → (errore di interpolazione, Runge), Complemento ortogonale e proiezioni ortogonaliL'ortogonale U⊥ di un sottospazio è un sottospazio di dimensione n − dim U, e R^n = U ⊕ U⊥; ogni vettore si scompone in proiezione su U più componente ortogonale; la proiezione è il punto di U più vicino e si calcola con un sistema o con la matrice di proiezione A(AᵀA)⁻¹Aᵀ.Complemento ortogonale e proiezioni ortogonali → (minimi quadrati), Eliminazione di GaussCon tre operazioni elementari sulle righe (scambio, moltiplicazione per uno scalare non nullo, somma di un multiplo di un'altra riga) ogni matrice si riduce a scala senza cambiare il rango; serve a calcolare ranghi, risolvere sistemi, trovare relazioni di dipendenza e matrici che riducono a scala.Eliminazione di Gauss → (sistemi lineari).
L'interpolazione con un unico polinomio di grado alto ha due difetti: il fenomeno di Runge e il cattivo condizionamento. Con molti dati, o con dati sperimentali affetti da errore, due strategie migliori sono dividere in tratti (interpolazione a tratti, spline) oppure non passare per tutti i punti (approssimazione ai minimi quadrati).
Interpolazione lineare a tratti
Dati i nodi e i valori , in ogni intervallo si prende il segmento che unisce i punti: È continua ma ha "spigoli" nei nodi (derivata discontinua).
Teorema (errore). Se e ,
Dimostrazione. In ogni intervallo è l'interpolazione con : e ha massimo nel punto medio, da cui ∎.
L'errore tende a come senza condizioni sui nodi (a differenza del polinomio unico): dimezzando si divide l'errore per .
Esempio. su , . Con ( intervalli): maggiorante ; errore effettivo (massimo calcolato su una griglia fine) . Per garantire : , , quindi , cioè intervalli (errore effettivo ✓).
| errore effettivo | maggiorante | ||
|---|---|---|---|
(Il rapporto tra errori successivi per dimezzato è : ordine .)
Spline cubiche
Per ottenere una curva liscia senza usare un polinomio di grado alto si usano, in ogni intervallo, polinomi di grado raccordati in modo da avere derivata prima e seconda continue.
Definizione (spline cubica interpolante). È una funzione tale che
- su ogni , è un polinomio di grado ;
- per ;
- : e per .
Conteggio. Incognite: coefficienti. Condizioni: (ogni passa per i suoi due estremi) (derivata prima) (derivata seconda) . Mancano due condizioni, che si assegnano agli estremi:
- spline naturale: (la curva diventa un segmento fuori dall'intervallo, come un'asta elastica a cui non si applicano momenti agli estremi);
- spline vincolata (clamped): si assegnano e ;
- not-a-knot: continua nei nodi e (equivale a un unico polinomio nei primi e negli ultimi due intervalli; è il default di MATLAB
spline).
Costruzione con i momenti. Si chiama . Poiché è lineare, vale con . Integrando due volte e imponendo , : La continuità di nel nodo dà un'equazione per i momenti: È un sistema tridiagonale a diagonale dominante (e quindi invertibile) nelle incognite , con le due condizioni agli estremi ( per la naturale). Si risolve in operazioni. Per nodi equispaziati (), moltiplicando l'equazione per , diventa
Esempio svolto. Nodi (), valori ; spline naturale: . Equazioni per : Dalla prima ; nella seconda , . Gli intervalli:
- (con , , );
- ;
- .
Controlli: ✓. Derivata in : e ✓ (continua). Derivata seconda: vale in ; vale in e in ✓ (continua). Valori: ; (centro di simmetria: ); .
Grafico interattivo: Spline cubica naturale per i punti (0,0), (1,1), (2,0), (3,1) e polinomio di grado 3 sugli stessi punti (tratteggiato): la spline resta nell'intervallo dei dati, il polinomio no
Il polinomio di grado sugli stessi dati è e vale in e in , mentre la spline dà e : il polinomio oscilla di più.
Accuratezza. Per e nodi con uniforme, la spline vincolata (o not-a-knot) soddisfa cioè errore (dimezzando si divide per ). La spline naturale impone agli estremi anche se : perde accuratezza vicino agli estremi (errore lì), a meno che sia nulla agli estremi.
Per su , errore massimo con intervalli equispaziati:
| lineare a tratti | spline naturale | polinomio unico | |
|---|---|---|---|
L'errore della spline diminuisce all'aumentare di , quello del polinomio unico esplode (Runge). In MATLAB: spline(x,y,t), interp1(x,y,t,'linear'), interp1(x,y,t,'spline'), pchip (a tratti che non oscilla). In Python: np.interp (lineare), scipy.interpolate.CubicSpline.
Approssimazione ai minimi quadrati
Con dati sperimentali ( misure affette da errore) non ha senso far passare un polinomio per tutti i punti: se è grande il polinomio oscilla seguendo il rumore. Si cerca un modello con pochi parametri (ad esempio una retta) che si avvicini ai dati nel senso dei minimi quadrati.
Problema ai minimi quadrati. Dati punti e funzioni di base (ad esempio ), trovare i coefficienti che minimizzano
Equazioni normali. descrive i vettori della forma "valori del modello nei punti", cioè il sottospazio generato dalle colonne di . Il vettore di quel sottospazio più vicino a è la proiezione ortogonale di (Complemento ortogonale e proiezioni ortogonaliL'ortogonale U⊥ di un sottospazio è un sottospazio di dimensione n − dim U, e R^n = U ⊕ U⊥; ogni vettore si scompone in proiezione su U più componente ortogonale; la proiezione è il punto di U più vicino e si calcola con un sistema o con la matrice di proiezione A(AᵀA)⁻¹Aᵀ.Complemento ortogonale e proiezioni ortogonali →): il residuo è ortogonale a tutte le colonne di , cioè : (Lo stesso risultato si ottiene ponendo a zero il gradiente di .) Se le colonne di sono linearmente indipendenti (per i polinomi di grado : almeno ascisse distinte) la matrice è simmetrica definita positiva e la soluzione è unica. Il minimo è .
Retta di regressione . Le equazioni normali si scrivono
Esempio svolto. Dati: , , , , , .
- , , , .
- Equazioni normali: e .
- ; .
- Retta: . Residui : . Somma ✓ (la prima equazione normale dice che i residui sommano a ) e ✓ (seconda equazione: ortogonalità a ).
- Somma dei quadrati dei residui: .
Passando a una parabola il residuo scende solo a (coefficienti ): il modello lineare è sufficiente. Con grado (cinque coefficienti per cinque punti) il polinomio interpola e il residuo è nullo: l'interpolazione è il caso limite dei minimi quadrati con .
Modelli linearizzabili. Il modello non è lineare nei parametri, ma sì: si fa la regressione lineare di su . (Attenzione: così si minimizzano i residui di , non di .)
Aspetti numerici. Formare eleva al quadrato il numero di condizionamento: nell'esempio e . Per polinomi di grado alto questo è disastroso, perciò i programmi risolvono il sistema con la fattorizzazione QR di (A\y in MATLAB con rettangolare, np.linalg.lstsq, polyfit), senza formare .
Codice
import numpy as np
def spline_naturale(x, y):
x = np.asarray(x, float); y = np.asarray(y, float); n = len(x) - 1
h = np.diff(x)
A = np.zeros((n + 1, n + 1)); r = np.zeros(n + 1)
A[0, 0] = A[n, n] = 1 # M_0 = M_n = 0
for i in range(1, n):
A[i, i-1:i+2] = [h[i-1] / 6, (h[i-1] + h[i]) / 3, h[i] / 6]
r[i] = (y[i+1] - y[i]) / h[i] - (y[i] - y[i-1]) / h[i-1]
M = np.linalg.solve(A, r) # momenti
def S(t):
i = min(max(np.searchsorted(x, t) - 1, 0), n - 1)
return (M[i] * (x[i+1] - t)**3 + M[i+1] * (t - x[i])**3) / (6 * h[i]) \
+ (y[i] / h[i] - M[i] * h[i] / 6) * (x[i+1] - t) \
+ (y[i+1] / h[i] - M[i+1] * h[i] / 6) * (t - x[i])
return S, M
S, M = spline_naturale([0, 1, 2, 3], [0, 1, 0, 1])
print(M, S(0.5), S(1.5), S(2.5))
x = np.array([0, 1, 2, 3, 4.]); y = np.array([1.1, 1.9, 3.2, 3.8, 5.1])
A = np.vander(x, 2) # colonne [x, 1]
c = np.linalg.lstsq(A, y, rcond=None)[0] # MATLAB: A\y
r = y - A @ c
print(c, r @ r)
print(A.T @ r) # ortogonalita' del residuoOutput:
[ 0. -4. 4. 0.] 0.7499999999999999 0.49999999999999994 0.25
[0.99 1.04] 0.1070000000000001
[9.76996262e-15 3.10862447e-15](La stampa dell'ultima riga mostra che il residuo è ortogonale alle colonne di a meno di .)
Errori tipici
- Dimenticare le due condizioni agli estremi: senza di esse il sistema dei momenti ha equazioni per incognite.
- Usare la spline naturale quando agli estremi non è nulla e aspettarsi fino ai bordi.
- Confondere interpolazione (passa per tutti i punti) e minimi quadrati (minimizza la somma dei quadrati dei residui, con pochi parametri).
- Risolvere i minimi quadrati con per gradi alti: il condizionamento si eleva al quadrato.
- Scrivere nelle equazioni normali come .
Domande d'esame
- Quante condizioni servono per determinare una spline cubica interpolante su nodi e come si assegnano quelle mancanti? Risposta: coefficienti, condizioni (interpolazione e ); due in più agli estremi: naturale (), vincolata ( assegnata) o not-a-knot.
- Stimare l'errore dell'interpolazione lineare a tratti. Risposta: .
- Scrivere le equazioni normali e interpretarle geometricamente. Risposta: ; il residuo è ortogonale alle colonne di (proiezione ortogonale di ).
- Perché si preferisce la fattorizzazione QR alle equazioni normali? Risposta: .
Versione ripasso
Lineare a tratti: segmenti tra i nodi, continua; errore (da , massimo del prodotto ). Senza condizioni sui nodi, ordine . su : maggiorante , vero ; per : , .
Spline cubica interpolante (Interpolazione polinomiale - forma di Lagrange, differenze divise ed erroreDati n+1 punti con ascisse distinte esiste un unico polinomio p_n di grado ≤ n che passa per tutti. Forma di Lagrange p = Σ y_i L_i(x) (L_i(x_j) = δ_ij); forma di Newton p = Σ f[x_0..x_k] Π_{j<k}(x − x_j) con le differenze divise (si aggiunge un nodo senza rifare tutto). Errore f(x) − p_n(x) = f^(n+1)(ξ)/(n+1)! · ω(x), ω(x) = Π(x − x_i): dipende da f e dalla scelta dei nodi. Nodi equispaziati con n grande danno il fenomeno di Runge; i nodi di Chebyshev minimizzano max|ω| = 2^(−n) su [−1,1].Interpolazione polinomiale - forma di Lagrange, differenze divise ed errore → per il confronto): grado per intervallo, , . Conteggio: incognite, condizioni, mancano due agli estremi: naturale (), vincolata ( data), not-a-knot (default MATLAB spline).
- Momenti : .
- Sistema tridiagonale: ; equispaziati: .
- Esempio su , naturale: , , ; ; ; , , (il polinomio di grado dà , , ).
- Errore vincolata/not-a-knot ; la naturale perde accuratezza agli estremi. Runge : spline naturale (), (), (); polinomio unico , . MATLAB
spline,interp1,pchip.
Minimi quadrati: minimizzare , . Residuo ortogonale alle colonne di (Complemento ortogonale e proiezioni ortogonaliL'ortogonale U⊥ di un sottospazio è un sottospazio di dimensione n − dim U, e R^n = U ⊕ U⊥; ogni vettore si scompone in proiezione su U più componente ortogonale; la proiezione è il punto di U più vicino e si calcola con un sistema o con la matrice di proiezione A(AᵀA)⁻¹Aᵀ.Complemento ortogonale e proiezioni ortogonali →): (simmetrica definita positiva se le colonne sono indipendenti); .
- Retta: , .
- Esempio : , , , ; , ; residui (somma , ), ; parabola , grado interpola (residuo ).
- Linearizzazione: (minimizza i residui di ).
- (): si usa QR (
A\y,lstsq,polyfit).
Passaggi principali.
- Derivazione dei momenti: lineare, ; due integrazioni e le condizioni , fissano le costanti; dà l'equazione del riquadro. Matrice tridiagonale a diagonale dominante: invertibile, costo .
- Esempio: , ; e ; ; .
- Lineare a tratti per : errori (ordine : dimezzando , divisione per ).
- Equazioni normali della retta: , , matrice ; seconda proprietà del residuo .
- Parabola sugli stessi dati: , : il termine quadratico non serve.
- Codice:
spline_naturalerisolve il sistema dei momenti e valuta ;np.linalg.lstsq(np.vander(x,2),y)equivale aA\ydi MATLAB.
Errori tipici: dimenticare le condizioni agli estremi; naturale con ai bordi; confondere interpolazione e minimi quadrati; equazioni normali per gradi alti.
Esercizi su questo argomento
- Esercizio - Interpolazione lineare a tratti di sin x, errore e numero di intervalli
- Esercizio - Modello esponenziale linearizzato e confronto con i minimi quadrati non lineari
- Esercizio - Retta dei minimi quadrati per la rigidezza di una molla, con e senza intercetta
- Esercizio - Spline cubica naturale su quattro nodi, momenti e continuità delle derivate