Salta al contenuto
Note per Studenti Interpolazione a tratti, spline cubiche e minimi quadrati

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 x0<⋯<xnx_0 < \dots < x_n e i valori yiy_i, in ogni intervallo [xi,xi+1][x_i, x_{i+1}] si prende il segmento che unisce i punti: s(x)=yi+yi+1−yixi+1−xi(x−xi),x∈[xi,xi+1].s(x) = y_i + \frac{y_{i+1} - y_i}{x_{i+1} - x_i}(x - x_i), \qquad x \in [x_i, x_{i+1}]. È continua ma ha "spigoli" nei nodi (derivata discontinua).

Teorema (errore). Se f∈C2f \in C^2 e h=max⁡i(xi+1−xi)h = \max_i (x_{i+1} - x_i), max⁡[a,b]∣f(x)−s(x)∣≤h28 max⁡[a,b]∣f′′∣.\max_{[a,b]}|f(x) - s(x)| \le \frac{h^2}{8}\,\max_{[a,b]}|f''|.

Dimostrazione. In ogni intervallo è l'interpolazione con n=1n=1: f−s=f′′(ξ)2(x−xi)(x−xi+1)f - s = \frac{f''(\xi)}{2}(x - x_i)(x - x_{i+1}) e ∣(x−xi)(x−xi+1)∣|(x-x_i)(x-x_{i+1})| ha massimo hi24\frac{h_i^2}{4} nel punto medio, da cui h28max⁡∣f′′∣\frac{h^2}{8}\max|f''| ∎.

L'errore tende a 00 come h2h^2 senza condizioni sui nodi (a differenza del polinomio unico): dimezzando hh si divide l'errore per 44.

Esempio. f=exf = e^x su [0,1][0,1], f′′≤ef'' \le e. Con h=0,1h = 0{,}1 (1010 intervalli): maggiorante 0,018e=3,40⋅10−3\frac{0{,}01}{8}e = 3{,}40\cdot 10^{-3}; errore effettivo (massimo calcolato su una griglia fine) 3,23⋅10−33{,}23\cdot 10^{-3}. Per garantire 10−410^{-4}: h2≤8⋅10−4e=2,94⋅10−4h^2 \le \frac{8\cdot 10^{-4}}{e} = 2{,}94\cdot 10^{-4}, h≤0,01716h \le 0{,}01716, quindi N≥58,3N \ge 58{,}3, cioè N=59N = 59 intervalli (errore effettivo 9,7⋅10−59{,}7\cdot 10^{-5} ✓).

NN hh errore effettivo maggiorante h28e\frac{h^2}{8}e
55 0,20{,}2 1,23⋅10−21{,}23\cdot10^{-2} 1,36⋅10−21{,}36\cdot10^{-2}
1010 0,10{,}1 3,23⋅10−33{,}23\cdot10^{-3} 3,40⋅10−33{,}40\cdot10^{-3}
2020 0,050{,}05 8,29⋅10−48{,}29\cdot10^{-4} 8,50⋅10−48{,}50\cdot10^{-4}
100100 0,010{,}01 3,38⋅10−53{,}38\cdot10^{-5} 3,40⋅10−53{,}40\cdot10^{-5}

(Il rapporto tra errori successivi per hh dimezzato è ≈4\approx 4: ordine 22.)

Spline cubiche

Per ottenere una curva liscia senza usare un polinomio di grado alto si usano, in ogni intervallo, polinomi di grado 33 raccordati in modo da avere derivata prima e seconda continue.

Definizione (spline cubica interpolante). È una funzione S:[x0,xn]→RS: [x_0, x_n] \to \mathbb{R} tale che

  1. su ogni [xi,xi+1][x_i, x_{i+1}], S=SiS = S_i è un polinomio di grado ≤3\le 3;
  2. S(xi)=yiS(x_i) = y_i per i=0,…,ni = 0,\dots,n;
  3. S∈C2([x0,xn])S \in C^2([x_0,x_n]): Si−1′(xi)=Si′(xi)S_{i-1}'(x_i) = S_i'(x_i) e Si−1′′(xi)=Si′′(xi)S_{i-1}''(x_i) = S_i''(x_i) per i=1,…,n−1i = 1,\dots,n-1.

Conteggio. Incognite: 4n4n coefficienti. Condizioni: 2n2n (ogni SiS_i passa per i suoi due estremi) + (n−1)+\ (n-1) (derivata prima) + (n−1)+\ (n-1) (derivata seconda) =4n−2= 4n - 2. Mancano due condizioni, che si assegnano agli estremi:

  • spline naturale: S′′(x0)=S′′(xn)=0S''(x_0) = S''(x_n) = 0 (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 S′(x0)S'(x_0) e S′(xn)S'(x_n);
  • not-a-knot: S′′′S''' continua nei nodi x1x_1 e xn−1x_{n-1} (equivale a un unico polinomio nei primi e negli ultimi due intervalli; è il default di MATLAB spline).

Costruzione con i momenti. Si chiama Mi=S′′(xi)M_i = S''(x_i). Poiché Si′′S_i'' è lineare, vale Si′′(x)=Mixi+1−xhi+Mi+1x−xihiS_i''(x) = M_i\frac{x_{i+1} - x}{h_i} + M_{i+1}\frac{x - x_i}{h_i} con hi=xi+1−xih_i = x_{i+1} - x_i. Integrando due volte e imponendo Si(xi)=yiS_i(x_i) = y_i, Si(xi+1)=yi+1S_i(x_{i+1}) = y_{i+1}: Si(x)=Mi(xi+1−x)3+Mi+1(x−xi)36hi+(yihi−Mihi6)(xi+1−x)+(yi+1hi−Mi+1hi6)(x−xi).S_i(x) = \frac{M_i(x_{i+1} - x)^3 + M_{i+1}(x - x_i)^3}{6h_i} + \left(\frac{y_i}{h_i} - \frac{M_ih_i}{6}\right)(x_{i+1} - x) + \left(\frac{y_{i+1}}{h_i} - \frac{M_{i+1}h_i}{6}\right)(x - x_i). La continuità di S′S' nel nodo xix_i dà un'equazione per i momenti: hi−16Mi−1+hi−1+hi3Mi+hi6Mi+1=yi+1−yihi−yi−yi−1hi−1,i=1,…,n−1.\boxed{\frac{h_{i-1}}{6}M_{i-1} + \frac{h_{i-1} + h_i}{3}M_i + \frac{h_i}{6}M_{i+1} = \frac{y_{i+1} - y_i}{h_i} - \frac{y_i - y_{i-1}}{h_{i-1}}}, \quad i = 1,\dots,n-1. È un sistema tridiagonale a diagonale dominante (e quindi invertibile) nelle n+1n+1 incognite MiM_i, con le due condizioni agli estremi (M0=Mn=0M_0 = M_n = 0 per la naturale). Si risolve in O(n)O(n) operazioni. Per nodi equispaziati (hi=hh_i = h), moltiplicando l'equazione per 6h\frac{6}{h}, diventa Mi−1+4Mi+Mi+1=6h2(yi−1−2yi+yi+1).M_{i-1} + 4M_i + M_{i+1} = \frac{6}{h^2}\left(y_{i-1} - 2y_i + y_{i+1}\right).

Esempio svolto. Nodi 0,1,2,30,1,2,3 (h=1h=1), valori y=0, 1, 0, 1y = 0,\ 1,\ 0,\ 1; spline naturale: M0=M3=0M_0 = M_3 = 0. Equazioni per i=1,2i=1,2: 4M1+M2=6(0−2+0)=−12,M1+4M2=6(1−0+1)=12.4M_1 + M_2 = 6(0 - 2 + 0) = -12, \qquad M_1 + 4M_2 = 6(1 - 0 + 1) = 12. Dalla prima M2=−12−4M1M_2 = -12 - 4M_1; nella seconda M1−48−16M1=12⇒−15M1=60⇒M1=−4M_1 - 48 - 16M_1 = 12 \Rightarrow -15M_1 = 60 \Rightarrow M_1 = -4, M2=4M_2 = 4. Gli intervalli:

  • S0(x)=M1x36+(y1−M16)x+y0(1−x)=−23x3+53xS_0(x) = \frac{M_1x^3}{6} + \left(y_1 - \frac{M_1}6\right)x + y_0(1-x) = -\frac23x^3 + \frac53x (con M0=0M_0=0, y0=0y_0 = 0, y1−M1/6=1+23y_1 - M_1/6 = 1 + \frac23);
  • S1(x)=−23(2−x)3+23(x−1)3+53(2−x)−23(x−1)S_1(x) = -\frac23(2-x)^3 + \frac23(x-1)^3 + \frac53(2-x) - \frac23(x-1);
  • S2(x)=23(3−x)3−23(3−x)+(x−2)S_2(x) = \frac23(3-x)^3 - \frac23(3-x) + (x-2).

Controlli: S0(1)=−23+53=1S_0(1) = -\frac23 + \frac53 = 1 ✓. Derivata in x=1x=1: S0′(1)=−2+53=−13S_0'(1) = -2 + \frac53 = -\frac13 e S1′(1)=2−53−23=−13S_1'(1) = 2 - \frac53 - \frac23 = -\frac13 ✓ (continua). Derivata seconda: S0′′(x)=−4xS_0''(x) = -4x vale −4=M1-4 = M_1 in x=1x=1; S1′′(x)=−4(2−x)+4(x−1)S_1''(x) = -4(2-x) + 4(x-1) vale −4-4 in x=1x=1 e 4=M24 = M_2 in x=2x=2 ✓ (continua). Valori: S(0,5)=−23⋅0,125+53⋅0,5=0,75S(0{,}5) = -\frac23\cdot 0{,}125 + \frac53\cdot 0{,}5 = 0{,}75; S(1,5)=0,5S(1{,}5) = 0{,}5 (centro di simmetria: S(x)+S(3−x)=1S(x) + S(3 - x) = 1); S(2,5)=0,25S(2{,}5) = 0{,}25.

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 33 sugli stessi dati è 23x3−3x2+103x\frac23x^3 - 3x^2 + \frac{10}3x e vale 11 in x=0,5x = 0{,}5 e 00 in x=2,5x = 2{,}5, mentre la spline dà 0,750{,}75 e 0,250{,}25: il polinomio oscilla di più.

Accuratezza. Per f∈C4f \in C^4 e nodi con hh uniforme, la spline vincolata (o not-a-knot) soddisfa max⁡∣f−S∣≤5384 h4 max⁡∣f(4)∣,\max|f - S| \le \frac{5}{384}\,h^4\,\max|f^{(4)}|, cioè errore O(h4)O(h^4) (dimezzando hh si divide per 1616). La spline naturale impone S′′=0S'' = 0 agli estremi anche se f′′(x0)≠0f''(x_0) \ne 0: perde accuratezza vicino agli estremi (errore O(h2)O(h^2) lì), a meno che f′′f'' sia nulla agli estremi.

Per f(x)=11+25x2f(x) = \frac{1}{1+25x^2} su [−1,1][-1,1], errore massimo con nn intervalli equispaziati:

nn lineare a tratti spline naturale polinomio unico
55 0,500{,}50 0,4230{,}423 0,4330{,}433
1010 6,7⋅10−26{,}7\cdot10^{-2} 2,2⋅10−22{,}2\cdot10^{-2} 1,921{,}92
2020 4,2⋅10−24{,}2\cdot10^{-2} 3,2⋅10−33{,}2\cdot10^{-3} 59,859{,}8
4040 1,4⋅10−21{,}4\cdot10^{-2} 2,8⋅10−42{,}8\cdot10^{-4}

L'errore della spline diminuisce all'aumentare di nn, 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 (mm misure affette da errore) non ha senso far passare un polinomio per tutti i punti: se mm è 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 mm punti (xk,yk)(x_k, y_k) e n+1≤mn+1 \le m funzioni di base φ0,…,φn\varphi_0,\dots,\varphi_n (ad esempio 1,x,…,xn1, x, \dots, x^n), trovare i coefficienti c=(c0,…,cn)c = (c_0,\dots,c_n) che minimizzano Φ(c)=∑k=1m(yk−p(xk))2=∥y−Ac∥22,p=∑jcjφj, Akj=φj(xk).\Phi(c) = \sum_{k=1}^{m}\bigl(y_k - p(x_k)\bigr)^2 = \|y - Ac\|_2^2, \qquad p = \sum_j c_j\varphi_j,\ A_{kj} = \varphi_j(x_k).

Equazioni normali. AcAc descrive i vettori della forma "valori del modello nei punti", cioè il sottospazio generato dalle colonne di AA. Il vettore di quel sottospazio più vicino a yy è la proiezione ortogonale di yy (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 r=y−Acr = y - Ac è ortogonale a tutte le colonne di AA, cioè AT(y−Ac)=0A^T(y - Ac) = 0: ATA c=ATy.\boxed{A^TA\,c = A^Ty.} (Lo stesso risultato si ottiene ponendo a zero il gradiente di Φ\Phi.) Se le colonne di AA sono linearmente indipendenti (per i polinomi di grado nn: almeno n+1n+1 ascisse distinte) la matrice ATAA^TA è simmetrica definita positiva e la soluzione è unica. Il minimo è ∥r∥2=∥y∥2−∥Ac∥2\|r\|^2 = \|y\|^2 - \|Ac\|^2.

Retta di regressione p(x)=a+bxp(x) = a + bx. Le equazioni normali si scrivono (m∑xk∑xk∑xk2)(ab)=(∑yk∑xkyk),b=m∑xkyk−∑xk∑ykm∑xk2−(∑xk)2,a=∑yk−b∑xkm.\begin{pmatrix} m & \sum x_k \\ \sum x_k & \sum x_k^2\end{pmatrix}\begin{pmatrix}a\\ b\end{pmatrix} = \begin{pmatrix}\sum y_k\\ \sum x_ky_k\end{pmatrix}, \qquad b = \frac{m\sum x_ky_k - \sum x_k\sum y_k}{m\sum x_k^2 - \left(\sum x_k\right)^2},\quad a = \frac{\sum y_k - b\sum x_k}{m}.

Esempio svolto. Dati: (0; 1,1)(0;\,1{,}1), (1; 1,9)(1;\,1{,}9), (2; 3,2)(2;\,3{,}2), (3; 3,8)(3;\,3{,}8), (4; 5,1)(4;\,5{,}1), m=5m = 5.

  • ∑x=10\sum x = 10, ∑y=15,1\sum y = 15{,}1, ∑x2=0+1+4+9+16=30\sum x^2 = 0+1+4+9+16 = 30, ∑xy=0+1,9+6,4+11,4+20,4=40,1\sum xy = 0 + 1{,}9 + 6{,}4 + 11{,}4 + 20{,}4 = 40{,}1.
  • Equazioni normali: 5a+10b=15,15a + 10b = 15{,}1 e 10a+30b=40,110a + 30b = 40{,}1.
  • b=5⋅40,1−10⋅15,15⋅30−100=200,5−15150=0,99b = \dfrac{5\cdot 40{,}1 - 10\cdot 15{,}1}{5\cdot 30 - 100} = \dfrac{200{,}5 - 151}{50} = 0{,}99; a=15,1−0,99⋅105=5,25=1,04a = \dfrac{15{,}1 - 0{,}99\cdot 10}{5} = \dfrac{5{,}2}{5} = 1{,}04.
  • Retta: p(x)=1,04+0,99 xp(x) = 1{,}04 + 0{,}99\,x. Residui yk−p(xk)y_k - p(x_k): 0,06; −0,13; 0,18; −0,21; 0,100{,}06;\ -0{,}13;\ 0{,}18;\ -0{,}21;\ 0{,}10. Somma =0= 0 ✓ (la prima equazione normale dice che i residui sommano a 00) e ∑xkrk=0−0,13+0,36−0,63+0,40=0\sum x_kr_k = 0 - 0{,}13 + 0{,}36 - 0{,}63 + 0{,}40 = 0 ✓ (seconda equazione: ortogonalità a xx).
  • Somma dei quadrati dei residui: 0,0036+0,0169+0,0324+0,0441+0,0100=0,10700{,}0036 + 0{,}0169 + 0{,}0324 + 0{,}0441 + 0{,}0100 = 0{,}1070.

Passando a una parabola il residuo scende solo a 0,10060{,}1006 (coefficienti 0,0214x2+0,9043x+1,08290{,}0214x^2 + 0{,}9043x + 1{,}0829): il modello lineare è sufficiente. Con grado 44 (cinque coefficienti per cinque punti) il polinomio interpola e il residuo è nullo: l'interpolazione è il caso limite dei minimi quadrati con m=n+1m = n+1.

Modelli linearizzabili. Il modello y=αeβxy = \alpha e^{\beta x} non è lineare nei parametri, ma ln⁡y=ln⁡α+βx\ln y = \ln\alpha + \beta x sì: si fa la regressione lineare di ln⁡yk\ln y_k su xkx_k. (Attenzione: così si minimizzano i residui di ln⁡y\ln y, non di yy.)

Aspetti numerici. Formare ATAA^TA eleva al quadrato il numero di condizionamento: nell'esempio cond(A)=4,74\text{cond}(A) = 4{,}74 e cond(ATA)=22,5\text{cond}(A^TA) = 22{,}5. Per polinomi di grado alto questo è disastroso, perciò i programmi risolvono il sistema con la fattorizzazione QR di AA (A\y in MATLAB con AA rettangolare, np.linalg.lstsq, polyfit), senza formare ATAA^TA.

Codice

python
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 residuo

Output:

[ 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 AA a meno di 10−1410^{-14}.)

Errori tipici

  • Dimenticare le due condizioni agli estremi: senza di esse il sistema dei momenti ha n−1n-1 equazioni per n+1n+1 incognite.
  • Usare la spline naturale quando f′′f'' agli estremi non è nulla e aspettarsi O(h4)O(h^4) 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 ATAA^TA per gradi alti: il condizionamento si eleva al quadrato.
  • Scrivere nelle equazioni normali ∑xk2\sum x_k^2 come (∑xk)2\left(\sum x_k\right)^2.

Domande d'esame

  1. Quante condizioni servono per determinare una spline cubica interpolante su n+1n+1 nodi e come si assegnano quelle mancanti? Risposta: 4n4n coefficienti, 4n−24n-2 condizioni (interpolazione e C2C^2); due in più agli estremi: naturale (S′′=0S''=0), vincolata (S′S' assegnata) o not-a-knot.
  2. Stimare l'errore dell'interpolazione lineare a tratti. Risposta: h28max⁡∣f′′∣\frac{h^2}{8}\max|f''|.
  3. Scrivere le equazioni normali e interpretarle geometricamente. Risposta: ATAc=ATyA^TAc = A^Ty; il residuo y−Acy - Ac è ortogonale alle colonne di AA (proiezione ortogonale di yy).
  4. Perché si preferisce la fattorizzazione QR alle equazioni normali? Risposta: cond(ATA)=cond(A)2\text{cond}(A^TA) = \text{cond}(A)^2.

Versione ripasso

Lineare a tratti: segmenti tra i nodi, continua; errore ≤h28max⁡∣f′′∣\le\frac{h^2}8\max|f''| (da f−s=f′′(ξ)2(x−xi)(x−xi+1)f-s=\frac{f''(\xi)}2(x-x_i)(x-x_{i+1}), massimo del prodotto hi24\frac{h_i^2}4). Senza condizioni sui nodi, ordine 22. exe^x su [0,1][0,1]: h=0,1h=0{,}1 maggiorante 3,40⋅10−33{,}40\cdot10^{-3}, vero 3,23⋅10−33{,}23\cdot10^{-3}; per 10−410^{-4}: h≤0,01716h\le0{,}01716, N=59N=59.

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 ≤3\le3 per intervallo, S(xi)=yiS(x_i)=y_i, S∈C2S\in C^2. Conteggio: 4n4n incognite, 2n+(n−1)+(n−1)=4n−22n+(n-1)+(n-1)=4n-2 condizioni, mancano due agli estremi: naturale (S′′=0S''=0), vincolata (S′S' data), not-a-knot (default MATLAB spline).

  • Momenti Mi=S′′(xi)M_i=S''(x_i): Si=Mi(xi+1−x)3+Mi+1(x−xi)36hi+(yihi−Mihi6)(xi+1−x)+(yi+1hi−Mi+1hi6)(x−xi)S_i=\frac{M_i(x_{i+1}-x)^3+M_{i+1}(x-x_i)^3}{6h_i}+(\frac{y_i}{h_i}-\frac{M_ih_i}6)(x_{i+1}-x)+(\frac{y_{i+1}}{h_i}-\frac{M_{i+1}h_i}6)(x-x_i).
  • Sistema tridiagonale: hi−16Mi−1+hi−1+hi3Mi+hi6Mi+1=yi+1−yihi−yi−yi−1hi−1\frac{h_{i-1}}6M_{i-1}+\frac{h_{i-1}+h_i}3M_i+\frac{h_i}6M_{i+1}=\frac{y_{i+1}-y_i}{h_i}-\frac{y_i-y_{i-1}}{h_{i-1}}; equispaziati: Mi−1+4Mi+Mi+1=6h2(yi−1−2yi+yi+1)M_{i-1}+4M_i+M_{i+1}=\frac6{h^2}(y_{i-1}-2y_i+y_{i+1}).
  • Esempio y=0,1,0,1y=0,1,0,1 su 0..30..3, naturale: 4M1+M2=−124M_1+M_2=-12, M1+4M2=12⇒M1=−4M_1+4M_2=12\Rightarrow M_1=-4, M2=4M_2=4; S0=−23x3+53xS_0=-\frac23x^3+\frac53x; S0′(1)=S1′(1)=−13S'_0(1)=S'_1(1)=-\frac13; S(0,5)=0,75S(0{,}5)=0{,}75, S(1,5)=0,5S(1{,}5)=0{,}5, S(2,5)=0,25S(2{,}5)=0{,}25 (il polinomio di grado 33 dà 11, 0,50{,}5, 00).
  • Errore vincolata/not-a-knot ≤5384h4max⁡∣f(4)∣\le\frac5{384}h^4\max|f^{(4)}|; la naturale perde accuratezza agli estremi. Runge 11+25x2\frac1{1+25x^2}: spline naturale 0,0220{,}022 (n=10n=10), 3,2⋅10−33{,}2\cdot10^{-3} (2020), 2,8⋅10−42{,}8\cdot10^{-4} (4040); polinomio unico 1,921{,}92, 59,859{,}8. MATLAB spline, interp1, pchip.

Minimi quadrati: minimizzare ∥y−Ac∥22\|y-Ac\|_2^2, Akj=φj(xk)A_{kj}=\varphi_j(x_k). Residuo ortogonale alle colonne di AA (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 →): ATAc=ATyA^TAc=A^Ty (simmetrica definita positiva se le colonne sono indipendenti); ∥r∥2=∥y∥2−∥Ac∥2\|r\|^2=\|y\|^2-\|Ac\|^2.

  • Retta: b=m∑xy−∑x∑ym∑x2−(∑x)2b=\frac{m\sum xy-\sum x\sum y}{m\sum x^2-(\sum x)^2}, a=∑y−b∑xma=\frac{\sum y-b\sum x}m.
  • Esempio (0;1,1),(1;1,9),(2;3,2),(3;3,8),(4;5,1)(0;1{,}1),(1;1{,}9),(2;3{,}2),(3;3{,}8),(4;5{,}1): ∑x=10\sum x=10, ∑y=15,1\sum y=15{,}1, ∑x2=30\sum x^2=30, ∑xy=40,1\sum xy=40{,}1; b=200,5−15150=0,99b=\frac{200{,}5-151}{50}=0{,}99, a=5,25=1,04a=\frac{5{,}2}5=1{,}04; residui 0,06,−0,13,0,18,−0,21,0,100{,}06,-0{,}13,0{,}18,-0{,}21,0{,}10 (somma 00, ∑xr=0\sum xr=0), ∑r2=0,1070\sum r^2=0{,}1070; parabola 0,10060{,}1006, grado 44 interpola (residuo 00).
  • Linearizzazione: y=αeβx→ln⁡y=ln⁡α+βxy=\alpha e^{\beta x}\to\ln y=\ln\alpha+\beta x (minimizza i residui di ln⁡y\ln y).
  • cond(ATA)=cond(A)2\text{cond}(A^TA)=\text{cond}(A)^2 (4,74→22,54{,}74\to22{,}5): si usa QR (A\y, lstsq, polyfit).

Passaggi principali.

  • Derivazione dei momenti: Si′′S_i'' lineare, Si′′=Mixi+1−xhi+Mi+1x−xihiS_i''=M_i\frac{x_{i+1}-x}{h_i}+M_{i+1}\frac{x-x_i}{h_i}; due integrazioni e le condizioni Si(xi)=yiS_i(x_i)=y_i, Si(xi+1)=yi+1S_i(x_{i+1})=y_{i+1} fissano le costanti; Si−1′(xi)=Si′(xi)S_{i-1}'(x_i)=S_i'(x_i) dà l'equazione del riquadro. Matrice tridiagonale a diagonale dominante: invertibile, costo O(n)O(n).
  • Esempio: S1=−23(2−x)3+23(x−1)3+53(2−x)−23(x−1)S_1=-\frac23(2-x)^3+\frac23(x-1)^3+\frac53(2-x)-\frac23(x-1), S2=23(3−x)3−23(3−x)+(x−2)S_2=\frac23(3-x)^3-\frac23(3-x)+(x-2); S0′(1)=−2+53=−13S_0'(1)=-2+\frac53=-\frac13 e S1′(1)=2−53−23=−13S_1'(1)=2-\frac53-\frac23=-\frac13; S1′′(x)=−4(2−x)+4(x−1)S_1''(x)=-4(2-x)+4(x-1); S(x)+S(3−x)=1S(x)+S(3-x)=1.
  • Lineare a tratti per exe^x: N=5,10,20,100N=5,10,20,100 errori 1,23⋅10−2, 3,23⋅10−3, 8,29⋅10−4, 3,38⋅10−51{,}23\cdot10^{-2},\ 3{,}23\cdot10^{-3},\ 8{,}29\cdot10^{-4},\ 3{,}38\cdot10^{-5} (ordine 22: dimezzando hh, divisione per 44).
  • Equazioni normali della retta: 5a+10b=15,15a+10b=15{,}1, 10a+30b=40,110a+30b=40{,}1, matrice (5101030)\begin{pmatrix}5&10\\10&30\end{pmatrix}; seconda proprietà del residuo ∑xkrk=0−0,13+0,36−0,63+0,40=0\sum x_kr_k=0-0{,}13+0{,}36-0{,}63+0{,}40=0.
  • Parabola sugli stessi dati: 0,0214x2+0,9043x+1,08290{,}0214x^2+0{,}9043x+1{,}0829, ∑r2=0,1006\sum r^2=0{,}1006: il termine quadratico non serve.
  • Codice: spline_naturale risolve il sistema dei momenti e valuta SiS_i; np.linalg.lstsq(np.vander(x,2),y) equivale a A\y di MATLAB.

Errori tipici: dimenticare le condizioni agli estremi; naturale con f′′≠0f''\ne0 ai bordi; confondere interpolazione e minimi quadrati; equazioni normali per gradi alti.

Esercizi su questo argomento

Teoria collegata