Salta al contenuto
Note per Studenti Interpolazione polinomiale - forma di Lagrange, differenze divise ed errore

Interpolazione polinomiale - forma di Lagrange, differenze divise ed errore

In questa pagina 6

Prerequisiti: Teoremi di Rolle e di LagrangeRolle: f continua su [a,b], derivabile in ]a,b[, f(a) = f(b) ⇒ esiste c in ]a,b[ con f'(c) = 0. Lagrange (valor medio): stesse ipotesi senza f(a) = f(b) ⇒ esiste c con f'(c) = (f(b) − f(a))/(b − a): la tangente in c è parallela alla corda. Conseguenza: su un intervallo f è costante se e solo se f' = 0; su un insieme che non è un intervallo è solo costante a tratti (arctan x + arctan(1/x)).Teoremi di Rolle e di Lagrange → (per l'errore), Formula di Taylor con resto di LagrangeSe f ha n+1 derivate continue su [a,b], l'errore tra f e il suo polinomio di Taylor si scrive esattamente come f^(n+1)(c)(x-x0)^(n+1)/(n+1)! per un c opportuno: serve a stimare l'errore su tutto un intervallo e a scegliere il grado del polinomio.Formula di Taylor con resto di Lagrange → (caso a nodi coincidenti), 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 → (sistema di Vandermonde).

Problema. Di una funzione ff si conoscono i valori yi=f(xi)y_i = f(x_i) in n+1n+1 punti distinti x0<x1<⋯<xnx_0 < x_1 < \dots < x_n (nodi), ad esempio perché sono misure o una tabella. Si cerca una funzione semplice, un polinomio, che passi per questi punti, per stimare ff in altri punti, e poi derivarla o integrarla (Formule di quadratura - trapezi, Cavalieri-Simpson ed estrapolazione di RichardsonUna formula di quadratura approssima $\int_a^b f,dx$ con $\sum w_if(x_i)$ ottenuta integrando il polinomio che interpola $f$ nei nodi. Trapezio $\frac{b-a}2[f(a)+f(b)]$ (grado di esattezza 1, errore $-\frac{(b-a)^3}{12}f''(\xi)$), punto medio $(b-a)f(m)$ (grado 1, errore $+\frac{(b-a)^3}{24}f''(\xi)$), Cavalieri-Simpson $\frac{b-a}6[f(a)+4f(m)+f(b)]$ (grado 3, errore $-\frac{(b-a)^5}{2880}f^{(4)}(\xi)$). Composite con passo $h=\frac{b-a}n$: trapezi errore $-\frac{(b-a)h^2}{12}f''(\xi)$ (ordine 2, rapporto tra errori 4 se $h$ si dimezza), Simpson errore $-\frac{(b-a)h^4}{180}f^{(4)}(\xi)$ (ordine 4, rapporto 16, $n$ pari). Estrapolazione di Richardson: se $Q(h)=I+Ch^p+\dots$ allora $I\approx\frac{2^pQ(h/2)-Q(h)}{2^p-1}$; per i trapezi $p=2$ e $\frac{4T_{h/2}-T_h}3=S_{h/2}$; ripetuta dà la tabella di Romberg. Stima dell'errore a posteriori: $I-Q(h/2)\approx\frac{Q(h/2)-Q(h)}{2^p-1}$.Formule di quadratura - trapezi, Cavalieri-Simpson ed estrapolazione di Richardson →). Un polinomio è facile da valutare; un polinomio di grado nn è determinato da n+1n+1 numeri, proprio come i dati.

Teorema (esistenza e unicità). Per n+1n+1 coppie (xi,yi)(x_i, y_i) con xix_i a due a due distinti esiste un unico polinomio pnp_n di grado ≤n\le n con pn(xi)=yip_n(x_i) = y_i per ogni ii.

Dimostrazione. Scrivendo pn(x)=a0+a1x+⋯+anxnp_n(x) = a_0 + a_1x + \dots + a_nx^n, le condizioni pn(xi)=yip_n(x_i) = y_i formano un sistema lineare n+1n+1 per n+1n+1 nelle incognite aja_j, con matrice di Vandermonde Vij=xi jV_{ij} = x_i^{\,j}, il cui determinante è ∏i<j(xj−xi)≠0\prod_{i<j}(x_j - x_i) \ne 0 perché i nodi sono distinti. Quindi il sistema ha una e una sola soluzione. (Unicità anche direttamente: la differenza di due soluzioni è un polinomio di grado ≤n\le n con n+1n+1 zeri, quindi nulla.) ∎

Risolvere il sistema di Vandermonde è però mal condizionato (la matrice ha numero di condizionamento enorme: circa 7⋅1027\cdot10^2 per 5 nodi equispaziati in [0,1][0,1], 1,5⋅1071{,}5\cdot10^7 per 10 nodi, 4⋅10114\cdot10^{11} per 15, 101610^{16} per 20; vedi Condizionamento di un problema e stabilità di un algoritmoL'errore finale ha tre origini (dati, troncamento, arrotondamento). Un problema è ben posto se la soluzione esiste, è unica e dipende con continuità dai dati; il numero di condizionamento K = |x f'(x)/f(x)| misura di quanto un errore relativo sui dati si amplifica nel risultato (si perdono circa log10 K cifre). La stabilità riguarda invece l'algoritmo: un algoritmo instabile amplifica gli errori anche su un problema ben condizionato (ricorrenza I_n = 1 − n I_{n−1}); un problema mal condizionato non si salva con nessun algoritmo. Uno schema numerico converge se è consistente e stabile (derivata numerica: troncamento contro arrotondamento).Condizionamento di un problema e stabilità di un algoritmo →). Per questo si usano due altre scritture dello stesso polinomio.

Forma di Lagrange

Si costruiscono i polinomi di grado nn Li(x)=∏j=0j≠inx−xjxi−xj,Li(xj)=δij={1j=i0j≠iL_i(x) = \prod_{\substack{j=0\\ j\ne i}}^{n}\frac{x - x_j}{x_i - x_j}, \qquad L_i(x_j) = \delta_{ij} = \begin{cases}1 & j = i\\ 0 & j \ne i\end{cases} (il numeratore si annulla in tutti i nodi tranne xix_i; il denominatore normalizza a 11 in xix_i). Allora pn(x)=∑i=0nyi Li(x).p_n(x) = \sum_{i=0}^{n} y_i\,L_i(x). Infatti pn(xj)=∑iyiδij=yjp_n(x_j) = \sum_i y_i\delta_{ij} = y_j, e il grado è ≤n\le n. Dato che ∑iLi(x)≡1\sum_i L_i(x) \equiv 1 (interpola la funzione costante 11), i LiL_i sono "pesi" che sommano a 11.

Esempio svolto. f(x)=exf(x) = e^x con nodi x0=0x_0 = 0, x1=0,5x_1 = 0{,}5, x2=1x_2 = 1, valori y=1; 1,648721; 2,718282y = 1;\ 1{,}648721;\ 2{,}718282. Si stima f(0,25)f(0{,}25). Con x=0,25x = 0{,}25:

  • L0=(x−0,5)(x−1)(0−0,5)(0−1)=(−0,25)(−0,75)0,5=0,375L_0 = \dfrac{(x - 0{,}5)(x-1)}{(0 - 0{,}5)(0-1)} = \dfrac{(-0{,}25)(-0{,}75)}{0{,}5} = 0{,}375;
  • L1=(x−0)(x−1)(0,5−0)(0,5−1)=(0,25)(−0,75)−0,25=0,75L_1 = \dfrac{(x - 0)(x-1)}{(0{,}5 - 0)(0{,}5-1)} = \dfrac{(0{,}25)(-0{,}75)}{-0{,}25} = 0{,}75;
  • L2=(x−0)(x−0,5)(1−0)(1−0,5)=(0,25)(−0,25)0,5=−0,125L_2 = \dfrac{(x - 0)(x-0{,}5)}{(1 - 0)(1 - 0{,}5)} = \dfrac{(0{,}25)(-0{,}25)}{0{,}5} = -0{,}125.

Somma dei pesi: 0,375+0,75−0,125=10{,}375 + 0{,}75 - 0{,}125 = 1 ✓. Quindi p2(0,25)=0,375⋅1+0,75⋅1,648721−0,125⋅2,718282=0,375+1,236541−0,339785=1,271756.p_2(0{,}25) = 0{,}375\cdot 1 + 0{,}75\cdot 1{,}648721 - 0{,}125\cdot 2{,}718282 = 0{,}375 + 1{,}236541 - 0{,}339785 = 1{,}271756. Il valore esatto è e0,25=1,284025e^{0{,}25} = 1{,}284025: errore 0,012270{,}01227.

La forma di Lagrange è comoda per la teoria, ma se si aggiunge un nodo si deve ricalcolare tutto, e valutarla costa O(n2)O(n^2).

Forma di Newton e differenze divise

Definizione (differenze divise). f[xi]=f(xi)f[x_i] = f(x_i) e ricorsivamente f[xi,…,xi+k]=f[xi+1,…,xi+k]−f[xi,…,xi+k−1]xi+k−xi.f[x_i, \dots, x_{i+k}] = \frac{f[x_{i+1}, \dots, x_{i+k}] - f[x_i, \dots, x_{i+k-1}]}{x_{i+k} - x_i}.

Teorema (forma di Newton). Il polinomio di interpolazione è pn(x)=f[x0]+f[x0,x1](x−x0)+f[x0,x1,x2](x−x0)(x−x1)+⋯+f[x0,…,xn]∏j=0n−1(x−xj).p_n(x) = f[x_0] + f[x_0,x_1](x - x_0) + f[x_0,x_1,x_2](x-x_0)(x-x_1) + \dots + f[x_0,\dots,x_n]\prod_{j=0}^{n-1}(x - x_j).

Perché funziona: pk=pk−1+ck∏j<k(x−xj)p_k = p_{k-1} + c_k\prod_{j<k}(x - x_j) aggiunge ogni volta un termine che si annulla nei nodi precedenti, quindi non rovina l'interpolazione già fatta; il coefficiente ckc_k è scelto per far passare il nuovo nodo. Proprietà utili:

  • Le differenze divise sono simmetriche nei nodi (non dipendono dall'ordine).
  • f[x0,…,xk]=f(k)(ξ)k!f[x_0,\dots,x_k] = \dfrac{f^{(k)}(\xi)}{k!} per un certo ξ\xi nel più piccolo intervallo contenente i nodi (si ricava dall'errore sotto). In particolare, se ff è un polinomio di grado dd, tutte le differenze divise di ordine >d> d sono nulle, e quelle di ordine dd valgono il coefficiente direttivo.
  • Aggiungere un nodo costa solo una nuova riga della tabella: si aggiunge un termine alla forma di Newton senza toccare i precedenti.

Esempio svolto: tabella delle differenze divise di exe^x. Per i nodi 00, 0,50{,}5, 11: f[0,0,5]=1,648721−10,5=1,297443,f[0,5,1]=2,718282−1,6487210,5=2,139121,f[0,0{,}5] = \frac{1{,}648721 - 1}{0{,}5} = 1{,}297443,\qquad f[0{,}5,1] = \frac{2{,}718282 - 1{,}648721}{0{,}5} = 2{,}139121, f[0,0,5,1]=2,139121−1,2974431−0=0,841679.f[0,0{,}5,1] = \frac{2{,}139121 - 1{,}297443}{1 - 0} = 0{,}841679. Allora p2(x)=1+1,297443 x+0,841679 x(x−0,5)p_2(x) = 1 + 1{,}297443\,x + 0{,}841679\,x(x - 0{,}5) e p2(0,25)=1+0,324361+0,841679⋅0,25⋅(−0,25)=1,324361−0,052605=1,271756,p_2(0{,}25) = 1 + 0{,}324361 + 0{,}841679\cdot 0{,}25\cdot(-0{,}25) = 1{,}324361 - 0{,}052605 = 1{,}271756, lo stesso valore di Lagrange (stesso polinomio, scritto in un'altra base).

Caso limite (nodi coincidenti). Se tutti i nodi tendono a x0x_0, f[x0,…,xk]→f(k)(x0)k!f[x_0,\dots,x_k] \to \frac{f^{(k)}(x_0)}{k!} e pnp_n diventa il polinomio di Taylor; la formula dell'errore diventa il resto di Lagrange. Quindi Taylor è il caso limite dell'interpolazione.

Errore di interpolazione

Teorema (errore). Sia f∈Cn+1([a,b])f \in C^{n+1}([a,b]), con nodi x0,…,xn∈[a,b]x_0,\dots,x_n \in [a,b]. Per ogni x∈[a,b]x \in [a,b] esiste ξ=ξ(x)∈ ]a,b[\xi = \xi(x) \in\,]a,b[ tale che f(x)−pn(x)=f(n+1)(ξ)(n+1)! ωn+1(x),ωn+1(x)=∏i=0n(x−xi).f(x) - p_n(x) = \frac{f^{(n+1)}(\xi)}{(n+1)!}\,\omega_{n+1}(x), \qquad \omega_{n+1}(x) = \prod_{i=0}^{n}(x - x_i).

Dimostrazione. Se xx è un nodo entrambi i membri sono nulli. Sia xx non nodo e si pone g(t)=f(t)−pn(t)−K ωn+1(t),K=f(x)−pn(x)ωn+1(x).g(t) = f(t) - p_n(t) - K\,\omega_{n+1}(t), \qquad K = \frac{f(x) - p_n(x)}{\omega_{n+1}(x)}. gg si annulla negli n+1n+1 nodi (perché f=pnf = p_n e ω=0\omega = 0 lì) e anche in t=xt = x (per la scelta di KK): ha n+2n+2 zeri distinti. Applicando il teorema di Rolle (Teoremi di Rolle e di LagrangeRolle: f continua su [a,b], derivabile in ]a,b[, f(a) = f(b) ⇒ esiste c in ]a,b[ con f'(c) = 0. Lagrange (valor medio): stesse ipotesi senza f(a) = f(b) ⇒ esiste c con f'(c) = (f(b) − f(a))/(b − a): la tangente in c è parallela alla corda. Conseguenza: su un intervallo f è costante se e solo se f' = 0; su un insieme che non è un intervallo è solo costante a tratti (arctan x + arctan(1/x)).Teoremi di Rolle e di Lagrange →) ripetutamente, g′g' ha almeno n+1n+1 zeri, g′′g'' ne ha nn, …, g(n+1)g^{(n+1)} ne ha almeno 11, in un punto ξ\xi. Ora pn(n+1)≡0p_n^{(n+1)} \equiv 0 (grado ≤n\le n) e ωn+1(n+1)≡(n+1)!\omega_{n+1}^{(n+1)} \equiv (n+1)!, quindi 0=g(n+1)(ξ)=f(n+1)(ξ)−K (n+1)!⟹K=f(n+1)(ξ)(n+1)!0 = g^{(n+1)}(\xi) = f^{(n+1)}(\xi) - K\,(n+1)! \quad\Longrightarrow\quad K = \frac{f^{(n+1)}(\xi)}{(n+1)!} ∎.

Maggiorazione. Se ∣f(n+1)∣≤Mn+1|f^{(n+1)}| \le M_{n+1} su [a,b][a,b], ∣f(x)−pn(x)∣≤Mn+1(n+1)! ∣ωn+1(x)∣≤Mn+1(n+1)!max⁡[a,b]∣ωn+1∣.|f(x) - p_n(x)| \le \frac{M_{n+1}}{(n+1)!}\,|\omega_{n+1}(x)| \le \frac{M_{n+1}}{(n+1)!}\max_{[a,b]}|\omega_{n+1}|. L'errore ha due fattori: uno dipende da ff (la sua derivata (n+1)(n+1)-esima), l'altro solo dai nodi (il polinomio nodale ω\omega). Il primo non si controlla; il secondo sì, scegliendo bene i nodi.

Esempio (continuazione). Per exe^x, n=2n=2, M3=e1=2,718M_3 = e^1 = 2{,}718 su [0,1][0,1]. Per x=0,25x = 0{,}25: ∣ω3(0,25)∣=∣0,25⋅(−0,25)⋅(−0,75)∣=0,046875|\omega_3(0{,}25)| = |0{,}25\cdot(-0{,}25)\cdot(-0{,}75)| = 0{,}046875. Maggiorazione: 2,7186⋅0,046875=0,02124\frac{2{,}718}{6}\cdot 0{,}046875 = 0{,}02124. L'errore effettivo 0,012270{,}01227 è inferiore ✓.

Esempio: f(x)=1xf(x) = \frac1x, nodi 1,2,41, 2, 4, valore in x=3x=3. f[1,2]=0,5−11=−0,5f[1,2] = \frac{0{,}5 - 1}{1} = -0{,}5, f[2,4]=0,25−0,52=−0,125f[2,4] = \frac{0{,}25 - 0{,}5}{2} = -0{,}125, f[1,2,4]=−0,125+0,53=0,125f[1,2,4] = \frac{-0{,}125 + 0{,}5}{3} = 0{,}125. Il polinomio è p2(x)=1−0,5(x−1)+0,125(x−1)(x−2)p_2(x) = 1 - 0{,}5(x-1) + 0{,}125(x-1)(x-2) e p2(3)=1−1+0,125⋅2⋅1=0,25p_2(3) = 1 - 1 + 0{,}125\cdot 2\cdot 1 = 0{,}25, contro 13=0,3333\frac13 = 0{,}3333: errore 0,08330{,}0833. Con la formula: f′′′=−6x4f''' = -\frac{6}{x^4} e ω3(3)=2⋅1⋅(−1)=−2\omega_3(3) = 2\cdot1\cdot(-1) = -2, quindi f−p2=−6/ξ46(−2)=2ξ4f - p_2 = \frac{-6/\xi^4}{6}(-2) = \frac{2}{\xi^4}; ponendolo uguale a 0,08330{,}0833 si trova ξ=2,21∈ ]1,4[\xi = 2{,}21 \in\,]1,4[ ✓. Aggiungendo il nodo x3=5x_3 = 5 (y=0,2y = 0{,}2) basta una differenza divisa in più: f[1,2,4,5]=−0,025f[1,2,4,5] = -0{,}025, e p3(3)=0,25+(−0,025)(3−1)(3−2)(3−4)=0,25+0,05=0,30p_3(3) = 0{,}25 + (-0{,}025)(3-1)(3-2)(3-4) = 0{,}25 + 0{,}05 = 0{,}30 (più vicino a 0,33330{,}3333).

La scelta dei nodi: fenomeno di Runge e nodi di Chebyshev

Più nodi non significano più accuratezza. Per f(x)=11+25x2f(x) = \dfrac{1}{1+25x^2} su [−1,1][-1,1] con nodi equispaziati l'errore massimo cresce con nn:

nn nodi equispaziati nodi di Chebyshev
44 0,4380{,}438 0,4020{,}402
88 1,0451{,}045 0,1710{,}171
1212 3,663{,}66 0,06920{,}0692
1616 14,414{,}4 0,03260{,}0326
2020 59,859{,}8 0,01530{,}0153

(errore massimo su [−1,1][-1,1].) Con n=8n = 8 equispaziati si ha p8(0,95)=−0,892p_8(0{,}95) = -0{,}892 mentre f(0,95)=0,0424f(0{,}95) = 0{,}0424: le oscillazioni agli estremi dell'intervallo sono enormi. È il fenomeno di Runge: max⁡∣ωn+1∣\max|\omega_{n+1}| per nodi equispaziati è piccolo al centro e grande ai bordi, e le derivate di ff crescono fattorialmente.

Grafico interattivo: Fenomeno di Runge: f(x) = 1/(1+25x²) e il polinomio di interpolazione di grado 8 sui 9 nodi equispaziati di [−1, 1] (oscilla ai bordi, p(0,95) = −0,89)

Per ridurre il problema si usano i nodi di Chebyshev sull'intervallo [−1,1][-1,1]: xk=cos⁡(2k+1)π2n+2,k=0,…,n,x_k = \cos\frac{(2k+1)\pi}{2n+2},\quad k = 0,\dots,n, (le proiezioni sull'asse xx di punti equispaziati sulla semicirconferenza: più fitti ai bordi). Per questa scelta max⁡[−1,1]∣ωn+1∣=2−n\max_{[-1,1]}|\omega_{n+1}| = 2^{-n}, che è il minimo possibile su tutte le scelte di n+1n+1 nodi. Confronto di max⁡∣ω∣\max|\omega|:

nn equispaziati Chebyshev (2−n2^{-n})
44 0,11350{,}1135 0,06250{,}0625
88 0,01880{,}0188 0,003910{,}00391
1212 0,004010{,}00401 0,0002440{,}000244

Su un intervallo generico [a,b][a,b] i nodi si ottengono con a+b2+b−a2xk\frac{a+b}{2} + \frac{b-a}{2}x_k e vale max⁡[a,b]∣ωn+1∣=2(b−a4)n+1,∣f−pn∣≤2Mn+1(n+1)!(b−a4)n+1.\max_{[a,b]}|\omega_{n+1}| = 2\left(\frac{b-a}{4}\right)^{n+1}, \qquad |f - p_n| \le \frac{2M_{n+1}}{(n+1)!}\left(\frac{b-a}{4}\right)^{n+1}.

Esempio: quanti nodi per sin⁡x\sin x su [0,π2][0,\frac\pi2] con errore <10−6< 10^{-6}? Qui Mn+1=1M_{n+1} = 1. Con nodi di Chebyshev: 2(n+1)!(π8)n+1\frac{2}{(n+1)!}\left(\frac\pi8\right)^{n+1} vale 1,0⋅10−51{,}0\cdot10^{-5} per n=5n=5 e 5,7⋅10−75{,}7\cdot10^{-7} per n=6n=6: servono n=6n = 6 (7 nodi). Con nodi equispaziati (∣ω∣≤n!4hn+1|\omega| \le \frac{n!}{4}h^{n+1} con h=π2nh = \frac\pi{2n}, quindi maggiorante hn+14(n+1)\frac{h^{n+1}}{4(n+1)}): 3,0⋅10−63{,}0\cdot10^{-6} per n=6n=6 e 2,0⋅10−72{,}0\cdot10^{-7} per n=7n=7: servono n=7n = 7.

In pratica. Si evitano i polinomi di grado alto su nodi equispaziati; per molti dati si usano polinomi a tratti (Interpolazione a tratti, spline cubiche e minimi quadratiInvece di un polinomio di grado alto si usano polinomi di grado basso su ogni intervallo. Lineare a tratti: errore ≤ h²/8·max|f''|. Spline cubica: polinomio di grado 3 su ogni intervallo, di classe C² nei nodi; i momenti M_i = S''(x_i) risolvono un sistema tridiagonale (h_{i−1}/6)M_{i−1} + ((h_{i−1}+h_i)/3)M_i + (h_i/6)M_{i+1} = differenza tra le pendenze dei due intervalli adiacenti, con due condizioni agli estremi (naturale M_0 = M_n = 0, vincolata, not-a-knot); errore O(h⁴), nessun fenomeno di Runge. Minimi quadrati: con più dati che parametri si minimizza ‖Ac − y‖², cioè si risolvono le equazioni normali AᵀA c = Aᵀy (proiezione ortogonale di y sulle colonne di A); la retta di regressione minimizza la somma dei quadrati dei residui e i residui sono ortogonali alle colonne.Interpolazione a tratti, spline cubiche e minimi quadrati →) o l'approssimazione ai minimi quadrati.

Codice

python
import numpy as np

def diffdiv(x, y):                       # coefficienti di Newton f[x0], f[x0,x1], ...
    x = np.asarray(x, float); c = np.array(y, float)
    n = len(x)
    for j in range(1, n):
        c[j:] = (c[j:] - c[j-1:-1]) / (x[j:] - x[:n-j])
    return c

def newton_val(x, c, t):                 # schema di Horner generalizzato
    p = c[-1]
    for k in range(len(c) - 2, -1, -1):
        p = p * (t - x[k]) + c[k]
    return p

x = [0, 0.5, 1]; y = np.exp(x)
c = diffdiv(x, y)
print(c)                                 # differenze divise
print(newton_val(x, c, 0.25), np.exp(0.25))

x = [1, 2, 4]; y = [1, 0.5, 0.25]        # 1/x
c = diffdiv(x, y)
print(c, newton_val(x, c, 3))
print(np.polyfit(x, y, 2))               # stessi nodi: coefficienti in x^2, x, 1

Output:

[1.         1.29744254 0.84167857]
1.2717557244677156 1.2840254166877414
[ 1.    -0.5    0.125] 0.25
[ 0.125 -0.875  1.75 ]

In MATLAB: p = polyfit(x, y, n) con nn pari al numero di nodi meno uno restituisce il polinomio di interpolazione (coefficienti in potenze di xx), polyval(p, t) lo valuta. Per molti nodi polyfit avvisa del cattivo condizionamento (matrice di Vandermonde).

Errori tipici

  • Confondere grado e numero di nodi: con n+1n+1 nodi il grado è ≤n\le n, e l'errore contiene f(n+1)f^{(n+1)}.
  • Dimenticare che ξ\xi dipende da xx e che non si conosce: nell'esercizio si maggiora ∣f(n+1)∣|f^{(n+1)}| sull'intervallo.
  • Usare molti nodi equispaziati sperando in un errore minore (Runge).
  • Sbagliare gli indici delle differenze divise: il denominatore è xi+k−xix_{i+k} - x_i (nodi estremi), non la differenza di due nodi adiacenti.

Domande d'esame

  1. Perché il polinomio di interpolazione di grado ≤n\le n su n+1n+1 nodi distinti è unico? Risposta: matrice di Vandermonde con det⁡=∏i<j(xj−xi)≠0\det = \prod_{i<j}(x_j - x_i) \ne 0; oppure la differenza di due soluzioni ha n+1n+1 zeri e grado ≤n\le n.
  2. Enunciare la formula dell'errore e indicare da cosa dipende. Risposta: f(x)−pn(x)=f(n+1)(ξ)(n+1)!∏(x−xi)f(x) - p_n(x) = \frac{f^{(n+1)}(\xi)}{(n+1)!}\prod(x - x_i); dipende da ff (derivata (n+1)(n+1)-esima) e dai nodi.
  3. Calcolare la differenza divisa del secondo ordine di f(x)=x2f(x)=x^2 sui nodi 0,1,30,1,3. Risposta: f[0,1]=1f[0,1] = 1, f[1,3]=4f[1,3] = 4, f[0,1,3]=4−13=1f[0,1,3] = \frac{4 - 1}{3} = 1 (il coefficiente di x2x^2).
  4. Cos'è il fenomeno di Runge e come si limita? Risposta: crescita dell'errore con nn per nodi equispaziati; si usano nodi di Chebyshev o polinomi a tratti.

Versione ripasso

Esistenza e unicità: n+1n+1 nodi distinti ⇒\Rightarrow un solo pnp_n di grado ≤n\le n (det⁡V=∏i<j(xj−xi)≠0\det V=\prod_{i<j}(x_j-x_i)\ne0; oppure la differenza di due soluzioni ha n+1n+1 zeri). Vandermonde mal condizionata: cond ≈7⋅102\approx7\cdot10^2 (5 nodi), 1,5⋅1071{,}5\cdot10^7 (10), 101610^{16} (20) (Condizionamento di un problema e stabilità di un algoritmoL'errore finale ha tre origini (dati, troncamento, arrotondamento). Un problema è ben posto se la soluzione esiste, è unica e dipende con continuità dai dati; il numero di condizionamento K = |x f'(x)/f(x)| misura di quanto un errore relativo sui dati si amplifica nel risultato (si perdono circa log10 K cifre). La stabilità riguarda invece l'algoritmo: un algoritmo instabile amplifica gli errori anche su un problema ben condizionato (ricorrenza I_n = 1 − n I_{n−1}); un problema mal condizionato non si salva con nessun algoritmo. Uno schema numerico converge se è consistente e stabile (derivata numerica: troncamento contro arrotondamento).Condizionamento di un problema e stabilità di un algoritmo →).

Lagrange: Li(x)=∏j≠ix−xjxi−xjL_i(x)=\prod_{j\ne i}\frac{x-x_j}{x_i-x_j}, Li(xj)=δijL_i(x_j)=\delta_{ij}, pn=∑yiLip_n=\sum y_iL_i, ∑Li≡1\sum L_i\equiv1.

  • Esempio exe^x su 0, 0,5, 10,\ 0{,}5,\ 1 in x=0,25x=0{,}25: L0=0,375L_0=0{,}375, L1=0,75L_1=0{,}75, L2=−0,125L_2=-0{,}125 (somma 11); p2(0,25)=0,375+1,236541−0,339785=1,271756p_2(0{,}25)=0{,}375+1{,}236541-0{,}339785=1{,}271756 contro 1,2840251{,}284025 (errore 0,012270{,}01227).

Newton: f[xi..xi+k]=f[xi+1..xi+k]−f[xi..xi+k−1]xi+k−xif[x_i..x_{i+k}]=\frac{f[x_{i+1}..x_{i+k}]-f[x_i..x_{i+k-1}]}{x_{i+k}-x_i}, pn=∑kf[x0..xk]∏j<k(x−xj)p_n=\sum_kf[x_0..x_k]\prod_{j<k}(x-x_j). Simmetriche; f[x0..xk]=f(k)(ξ)k!f[x_0..x_k]=\frac{f^{(k)}(\xi)}{k!}; per un polinomio di grado dd quelle di ordine >d>d sono nulle; un nodo in più = un termine in più. Nodi coincidenti: Taylor (Formula di Taylor con resto di LagrangeSe f ha n+1 derivate continue su [a,b], l'errore tra f e il suo polinomio di Taylor si scrive esattamente come f^(n+1)(c)(x-x0)^(n+1)/(n+1)! per un c opportuno: serve a stimare l'errore su tutto un intervallo e a scegliere il grado del polinomio.Formula di Taylor con resto di Lagrange →).

  • exe^x: f[0,12]=1,297443f[0,\frac12]=1{,}297443, f[12,1]=2,139121f[\frac12,1]=2{,}139121, f[0,12,1]=0,841679f[0,\frac12,1]=0{,}841679; p2(0,25)=1+0,324361−0,052605=1,271756p_2(0{,}25)=1+0{,}324361-0{,}052605=1{,}271756.

Errore: f(x)−pn(x)=f(n+1)(ξ)(n+1)!ωn+1(x)f(x)-p_n(x)=\frac{f^{(n+1)}(\xi)}{(n+1)!}\omega_{n+1}(x), ω=∏(x−xi)\omega=\prod(x-x_i). Dimostrazione: g(t)=f−pn−Kωg(t)=f-p_n-K\omega ha n+2n+2 zeri, Rolle (Teoremi di Rolle e di LagrangeRolle: f continua su [a,b], derivabile in ]a,b[, f(a) = f(b) ⇒ esiste c in ]a,b[ con f'(c) = 0. Lagrange (valor medio): stesse ipotesi senza f(a) = f(b) ⇒ esiste c con f'(c) = (f(b) − f(a))/(b − a): la tangente in c è parallela alla corda. Conseguenza: su un intervallo f è costante se e solo se f' = 0; su un insieme che non è un intervallo è solo costante a tratti (arctan x + arctan(1/x)).Teoremi di Rolle e di Lagrange →) dà g(n+1)(ξ)=0g^{(n+1)}(\xi)=0, con ω(n+1)=(n+1)!\omega^{(n+1)}=(n+1)!. Maggiorante Mn+1(n+1)!max⁡∣ω∣\frac{M_{n+1}}{(n+1)!}\max|\omega|; per exe^x in 0,250{,}25: 2,7186⋅0,046875=0,0212\frac{2{,}718}{6}\cdot0{,}046875=0{,}0212.

  • 1x\frac1x su 1,2,41,2,4: f[1,2]=−0,5f[1,2]=-0{,}5, f[2,4]=−0,125f[2,4]=-0{,}125, f[1,2,4]=0,125f[1,2,4]=0{,}125, p2(3)=0,25p_2(3)=0{,}25 contro 0,33330{,}3333; ξ=2,21\xi=2{,}21; con il nodo 55: f[1,2,4,5]=−0,025f[1,2,4,5]=-0{,}025, p3(3)=0,30p_3(3)=0{,}30.

Nodi: equispaziati ⇒\Rightarrow Runge (per 11+25x2\frac1{1+25x^2} errore massimo 0,438; 1,045; 3,66; 14,4; 59,80{,}438;\ 1{,}045;\ 3{,}66;\ 14{,}4;\ 59{,}8 per n=4,8,12,16,20n=4,8,12,16,20; p8(0,95)=−0,892p_8(0{,}95)=-0{,}892 contro 0,04240{,}0424). Chebyshev xk=cos⁡(2k+1)π2n+2x_k=\cos\frac{(2k+1)\pi}{2n+2}: max⁡∣ω∣=2−n\max|\omega|=2^{-n} su [−1,1][-1,1] (minimo); su [a,b][a,b] 2(b−a4)n+12(\frac{b-a}4)^{n+1}. Errori massimi di Chebyshev 0,402; 0,171; 0,0692; 0,0326; 0,01530{,}402;\ 0{,}171;\ 0{,}0692;\ 0{,}0326;\ 0{,}0153.

  • sin⁡x\sin x su [0,π2][0,\frac\pi2] con errore <10−6<10^{-6}: Chebyshev n=6n=6 (5,7⋅10−75{,}7\cdot10^{-7}), equispaziati n=7n=7 (2,0⋅10−72{,}0\cdot10^{-7}).

Passaggi principali.

  • Pesi di Lagrange in x=0,25x=0{,}25: L0=(−0,25)(−0,75)(−0,5)(−1)=0,375L_0=\frac{(-0{,}25)(-0{,}75)}{(-0{,}5)(-1)}=0{,}375, L1=(0,25)(−0,75)(0,5)(−0,5)=0,75L_1=\frac{(0{,}25)(-0{,}75)}{(0{,}5)(-0{,}5)}=0{,}75, L2=(0,25)(−0,25)(1)(0,5)=−0,125L_2=\frac{(0{,}25)(-0{,}25)}{(1)(0{,}5)}=-0{,}125.
  • Perché la forma di Newton funziona: pk=pk−1+ck∏j<k(x−xj)p_k=p_{k-1}+c_k\prod_{j<k}(x-x_j), il nuovo termine si annulla nei nodi già usati.
  • Dimostrazione dell'errore: K=f(x)−pn(x)ω(x)K=\frac{f(x)-p_n(x)}{\omega(x)} rende g(x)=0g(x)=0; pn(n+1)≡0p_n^{(n+1)}\equiv0, ω(n+1)≡(n+1)!\omega^{(n+1)}\equiv(n+1)!, quindi K=f(n+1)(ξ)(n+1)!K=\frac{f^{(n+1)}(\xi)}{(n+1)!}.
  • 1x\frac1x in x=3x=3: ω3(3)=2⋅1⋅(−1)=−2\omega_3(3)=2\cdot1\cdot(-1)=-2, f′′′=−6ξ4f'''=-\frac6{\xi^4}, f−p2=2ξ4=0,0833⇒ξ=2,21f-p_2=\frac2{\xi^4}=0{,}0833\Rightarrow\xi=2{,}21.
  • max⁡∣ω∣\max|\omega| equispaziati 0,1135; 0,0188; 0,004010{,}1135;\ 0{,}0188;\ 0{,}00401 contro Chebyshev 0,0625; 0,00391; 0,0002440{,}0625;\ 0{,}00391;\ 0{,}000244 (n=4,8,12n=4,8,12).
  • Equispaziati su [0,π2][0,\frac\pi2]: ∣ω∣≤n!4hn+1|\omega|\le\frac{n!}4h^{n+1}, quindi errore ≤hn+14(n+1)\le\frac{h^{n+1}}{4(n+1)} con h=π2nh=\frac\pi{2n}: 3,0⋅10−63{,}0\cdot10^{-6} (n=6n=6), 2,0⋅10−72{,}0\cdot10^{-7} (n=7n=7). Chebyshev: 2(n+1)!(π8)n+1=1,0⋅10−5\frac2{(n+1)!}(\frac\pi8)^{n+1}=1{,}0\cdot10^{-5} (n=5n=5), 5,7⋅10−75{,}7\cdot10^{-7} (n=6n=6).

Codice: diffdiv + Horner; MATLAB polyfit(x,y,n), polyval.

Errori tipici: grado ed n+1n+1 nodi confusi; ξ\xi trattato come noto; molti nodi equispaziati (Runge); indici del denominatore delle differenze divise (xi+k−xix_{i+k}-x_i).

Esercizi su questo argomento

Teoria collegata