Interpolazione di Funzioni
Transcript
Interpolazione di Funzioni
Interpolazione di Funzioni N. Del Buono 1 Introduzione Uno dei problemi che piu frequentemente si incontrano nelle applicazioni è la costruzione di una approssimazione di una funzione data f mediante funzioni più semplici, tipicamente (ma non sempre) polinomi. Una leggera variante di questo problema è la costruzione di una funzione regolare a partire da un insieme discreto di punti. In questo capitolo costruiremo entrambi questi problemi e svilupperemo diversi metodi per risolverli. Cominciamo con il formalizzare il problema: 1) dato un insieme di nodi x0 , x1 , x2 , . . . , xn (n + 1 nodi) e valori corrispondenti y0 , y1 , y2 , . . . , yn (n + 1 valori) trovare il polinomio pn (x) di grado minore o uguale ad n, tale che pn (xi ) = yi i = 0, 1, . . . , n. Quindi noto in insieme di dati reali i problema c costruire un polinomio che si adatta a questi dati. 2) Dato in insieme di x0 , x1 , x2 , . . . , xn (n + 1 nodi) ed una funzione continua f (x) trovare il polinomio pn (x) di grado minore o uguale ad n, tale che pn (xi ) = f (xi ) i = 0, 1, . . . , n. Quindi nota l’espressione analitica della funzione f (x) si ricerca una sua approssimazione tra i polinomi di grado n che coincida con la funzione data sull’insieme dei nodi. Sebbene i due precedenti problemi siano di fatto distinti, possiamo sempre considerare il primo come un caso particolare del secondo, infatti i valori yi si possono sempre considerare come i valori assunti da una funzione incognita f in un set di dati xi cioè : yi = f (xi ), i = 0, 1, . . . , n. Le equazioni pn (xi ) = f (xi )(= yi ), 1 i = 0, 1, . . . , n. (1) si dicono condizioni di interpolazione. Consideriamo l’espressione generica di un polinomio di grado n scritto utilizzando la cosidetta base canonica 1 = x0 , x, x2 , x3 , . . . , xn pn (x) = n X aj xj = a0 x0 + a1 x1 + a2 x2 + . . . + an xn j=1 imponendo le condizioni di interpolazione, cioè pn (xi ) = f (xi ) = yi ∀i otteniamo: pn (xi ) = n X aj xj = a0 x0i + a1 x1i + a2 x2i + . . . + an xni = yi , i = 0, 1, . . . , n j=1 un sistema di n + 1 equazioni in n + 1 incognite (le incognite sono appunto i coefficienti ai del nostro polinomio), che riscritto in forma estesa è : a0 + a1 x0 + a2 x20 + . . . + an xn0 = y0 a0 + a1 x1 + a2 x21 + . . . + an xn1 = y1 .. . a0 + a1 xn + a2 x2n + . . . + an xnn = yn o equivalentemente Va=y essendo V = 1 1 .. . x0 x1 x20 x21 x30 x31 1 xn x2n x3n la matrice di Vandermonde legata a0 a1 a= ... an . . . xn0 . . . xn1 . . . xnn ai nodi xi e y0 y1 y= ... yn Se tutti i nodi di interpolazione sono distinti (xi 6= xj per ogni i 6= j) si prova che la matrice di Vandermonde è non singolare e pertanto il problema dell’interpolazione ammette sempre un’unica soluzione. Comunque all’aumentare dei numero di nodi o quando i nodi sono vicini, la matrice diventa malcondizionata. Quindi per ottenere il polinomi di interpolazione in forma esplicita dobbiamo utilizzare una diversa rappresentazione (ovvero una diversa base dello spazio dei polinomi). 2 2 Polinomio di interpolazione nella base di Lagrange Riscriviamo il polinomio di interpolazione pn (x) nel seguente modo: pn (x) = n X yj Lj (x) j=0 essendo gli Lj (x) per il momento generici polinomi di grado n. Imponendo le condizioni di interpolazione ricaviamo pn (xi ) = yi ⇒ n X yj Lj (xi ) = yi i = 0, 1, . . . , n j=0 quindi i polinomi Lj (x) devono soddisfare le seguenti proprietà se j 6= i 0 Lj (xi ) = 1 se j = i (2) In particolare la prima condizione di (2) indica che Lj (x) si annulla negli n nodi x0 , x1 , . . . , xj−1 , xj+1 , . . . , xn e quindi deve avere la seguente struttura: n Y Lj (x) = ck (x − xi ) i=0,i6=j mentre impondendo la seconda condizione di (2) Lj (xj ) = ck n Y (xj − xi ) = 1 i=0,i6=j si trova immediatamente: 1 ck = n Y (xj − xi ) i=0,i6=j e quindi n Y Lj (x) = (x − xi ) i=0,i6=j n Y (xj − xi ) i=0,i6=j 3 Per esempio se abbiamo i nodi x0 , x1 , x2 , allora L0 (x) = (x − x1 )(x − x2 ) (x0 − x1 )(x0 − x2 ) L1 (x) = (x − x0 )(x − x2 ) (x1 − x0 )(x1 − x2 ) L2 (x) = (x − x0 )(x − x1 ) (x2 − x0 )(x2 − x1 ) In definitiva il polinomio interpolante ha la seguente forma: n n X Y x − x i pn (x) = f (xk ). xj − xi k=0 (3) i=0,i6=j Il polinomio (3) prende il nome di Polinomio di Lagrange mentre i polinomi: Lj (x) = n Y i=0,i6=j x − xj ; xk − xi k = 0, 1, . . . , n si chiamano polinomi fondamentali di Lagrange o base di Lagrange. 3 Polinomio di Newton Il polinomio interpolante di Lagrange ha il pregio di fornire un’espressione esplicita del polinomio stesso, ma presenta lo svantaggio di essere scritto in una forma che non è utile per una effettiva implementazione al calcolatore. Infatti, ogni volta che si decide di aggiungere un punto all’insieme dei nodi si devono ricalcolare tutti i polinomi di Lagrange. L’impossibilita di non poter scrivere il polinomio di interpolazione di grado n + 1 in termini del polinomio di grado n ci spinge a cercare una diversa rappresentazione del polinomio interpolante. Vedremo che una soluzione a questo problema ci verrà fornita dal polinomio interpolante in forma di Newton. Teorema 3.1 Sia pn (x) il polinomio di grado n che interpola una funzione f (x) nei nodi x0 , x1 , . . . , xn (n + 1 nodi). Sia pn+1 il polinomio di grado n + 1 che interpola la f nei nodi x0 , x1 , . . . , xn , xn+1 (n + 2 nodi). Allora pn+1 si scrive come pn+1 (x) = pn (x) + an+1 ωn (x) (4) con ωn (x) = n Y (x − xi ) i=0 4 (5) an+1 = f (xn+1 ) − pn (xn+1 ) ωn (xn+1 ) a0 = f (x0 ) (6) (7) (wn (x) si chiama polinomio nodale o polinomio dei nodi). Dim. Poichè il polinomio di interpolazione è unico è sufficiente provare che pn+1 (x) soddisfa le condizioni di interpolazione. Osserviamo che il polinomio ωn (x) si annulla nei nodi xi , quindi per j ≤ n risulta pn+1 (xj ) = pn (xj ) + an+1 ωn (xj ) = pn (xj ) = f (xj ) dunque pn+1 interpola tutti i punti tranne l’ultimo. Per l’ultimo nodi xn+1 osserviamo che pn+1 (xn+1 ) = pn (xn+1 ) + an+1 ωn (xn+1 ) sostituendo il valore di an+1 otteniamo che pn+1 (xn+1 ) = f (xn+1 )). Utilizzando la formula (4) possiamo ricavare una diversa forma del polinomio pn (x). Ponendo ω−1 (x) = 1, ricaviamo pn (x) = a0 + a1 (x − x0 ) + a2 (x − x0 )(x − x1 ) + . . . + an (x − x0 )(x − x1 ) . . . (x − xn−1 ) = n X ak ωk−1 (x) k=0 con ωk−1 (x) = k−1 Y (x − xi ) i=0 il polinomio scritto in questa forma si chiama polinomio di Newton. I coefficienti ak si chiamano differenze divise e possono essere calcolate implementando a0 = f (x0 ) f (xn+1 ) − pn (xn+1 ) an+1 = ωn (xn+1 ) Un modo alternativo per calcolare le differenze divise è quello della tabella delle differenze divise. Consideriamo un insieme di nodi x0 , x1 , . . . , xn e siano yi = f (xi ) i valori della funzione f in tali nodi. Le differenze divise di ordine zero, denotate con f [xi ], coincidono con il valore che la funzione assume in xi : f [xi ] = f (xi ). Le differenze divise prime, o di ordine 1, sono definite dalla relazione f [xi , xj ] = f [xj ] − f [xi ] , xj − xi 5 le differenze divise seconde dalla relazione: f [xj , xk ] − f [xi , xj ] , xk − xi f [xi , xj , xk ] = e in generale, le differenze divise k-esime f [x0 , . . . , xk ] sono definite per mezzo delle differenze divise di ordine k − 1 dalla relazione: f [x0 , x1 , . . . , xk−1 , xk ] = f [x1 , . . . , xk ] − f [x0 , . . . , xk−1 ] . xk − x0 Per induzione si può provare il seguente risultato. f [x0 , . . . , xk ] = k X f (xj ) k Y j=0 . (xj − xi ) i=0,i6=j Da tale rappresentazione si deducono facilmente alcune proprietà delle differenze divise, la più importante delle quali è che la differenza divisa è una funzione simmetrica dei suoi argomenti x0 , x1 , . . . , xk , cioè il valore che assume non cambia qualunque sia la permutazione degli argomenti x0 , x1 , . . . , xk . 3.1 Resto del Polinomio di Lagrange In questo paragrafo determiniamo l’errore che si commette nell’interpolazione di Lagrange. Assumiamo che la funzione interpolata f (x) sia di classe C n+1 ([a, b]) e valutiamo l’errore che si commette nel sostituire f (x) con pn (x) in un punto x 6= xi . Supponiamo che l’intervallo [a, b] sia tale da contenere sia i nodi xi che l’ulteriore punto x. Consideriamo la funzione errore (o resto) commesso nell’interpolazione della funzione f (x) e(x) = f (x) − pn (x) Poichè e(xi ) = f (xi ) − pn (xi ) = 0 i = 0, . . . , n la funzione e(x) si annula nei nodi allora e(x) ha la seguente espressione: e(x) = c(x)ωn (x) dove ωn (x) = n Y (x − xi ) i=0 è il cosiddetto polinomio nodale mentre c(x) è una funzione da determinare. Definiamo ora la funzione Φ(t; x) = f (t) − pn (t) − c(x)ωn (t) 6 dove t è una variabile ed x è un valore fissato. Calcoliamo la funzione Φ(t; x) nei nodi xi : Φ(xi ; x) = f (xi ) − pn (xi ) − c(x)ωn+1 (xi ) = 0 e anche nel punto x: Φ(x; x) = f (x) − pn (x) − c(x)ωn+1 (x) = e(x) − c(x)ωn+1 (x) = 0 pertanto la funzione Φ(t; x) (che è derivabile con continuità n + 1 volte poichè f (x) è di classe C n+1 ) ammette almeno n+2 zeri distinti. Applicando il teorema di Rolle segue che Φ0 (t; x) ammette almeno n + 1 zeri distinti. Riapplicando lo stesso teorema segue che Φ00 (t; x) ammette almeno n zeri distinti. Cosı̀ proseguendo segue che ∃ξx ∈ [a, b] 30 Φ(n+1) (ξx ; x) = 0. Calcoliamo ora la derivata di ordine n + 1 della funzione Φ(t; x), osservando innanzitutto che la derivata di tale ordine del polinomio Ln (x) è identicamente nulla. Pertanto Φ(n+1) (t; x) = f (n+1) (t) − c(x) dn+1 ωn+1 (t). dtn+1 Calcoliamo la derivata di ordine n + 1 del polinomio nodale. Osserviamo innanzitutto che n Y ωn+1 (t) = (t − xi ) = tn+1 + pn (t) i=0 dove pn (t) è un polinomio di grado al più n. Quindi dn+1 dn+1 ωn+1 (t) = n+1 tn+1 . n+1 dt dt Poichè d n+1 t = (n + 1)tn dt e d2 n+1 t = (n + 1)ntn−1 dt2 è facile dedurre che dn+1 dn+1 n+1 t = n+1 ωn+1 (t) = (n + 1)!. n+1 dt dt Pertanto e quindi Φ(n+1) (t; x) = f (n+1) (t) − c(x)(n + 1)! Φ(n+1) (ξx ; x) = f (n+1) (ξx ) − c(x)(n + 1)! = 0 7 cioè c(x) = e in definitiva f (n+1) (ξx ) (n + 1)! f (n+1) (ξx ) ωn+1 (x). (n + 1)! e(x) = (8) Osserviamo che quando il numero di nodi di interpolazione è elevato e i nodi sono distrubuiti in modo uniforme, il polinomio di interpolazione di Lagrange potrebbe essere poco accurato soprattutto alle estremità dell’intervallo dei nodi. Si verifica il cosiddetto fenomeno di Runge, ossia il polinomio interpolante presenta delle forti oscillazioni vicine ai nodi estremi x0 ed xn . 4 Interpolazione polinomiale a tratti Quando il numero dei nodi di interpolazione è particolarmente elevato si preferiscono altri tipi di interpolazione come quelle basate sulle funzioni polinomiali a tratti. Consideriamo una funzione f (x) ed un insieme di nodi x0 , x1 , . . . , xn (n + 1 nodi). Consideriamo ciascun intervallo [xj , xj+1 ], j = 0, 1, . . . , n − 1 e definiamo su di esso un polinomio di grado 1, pj (x) che interpoli la f nei punti xj , xj+1 , cioè : pj (xj ) = yj ≡ f (xj ) pj (xj+1 ) = yj+1 ≡ f (xj+1 ). Allora pj (x) essendo un polinomio di grado 1 passante per i punti (xj , yj ) e (xj+1 , yj+1 ) ha la seguente espressione pj (x) = x − xj+1 x − xj yj + yj+1 xj − xj+1 xj+1 − xj per ogni x ∈ [xj , xj+1 ]. Ponendo ½ B0 (x) = x−x1 x0 −x1 0 x ∈ [x0 , x1 ] altrimenti mentre per j = 1, . . . , n − 1 Bj (x) = ed infine ½ Bn (x) = x−xj−1 xj −xj−1 x−xj+1 xj −xj+1 x ∈ [xj−1 , xj ] x ∈ [xj , xj+1 ] altrimenti x−xn−1 xn −xn−1 x ∈ [xn−1 , xn ] altrimenti 0 0 8 risulta che ½ Bj (xi ) = 1 0 per i = j per i = 6 j Le funzioni Bj (x) si chiamano spline lineari o funzioni cappello (proprio per la forma del loro grafico) e sono funzioni lineari a tratti e quindi solo linearmente indipendenti, ne segue che la funzione interpolante a tratti si potrà scrivere come: n X pn (x) = Bj (x)yj j=0 Il polinomio di interpolazione lineare a tratti p(x) ci permette di costruire approssimazioni molto accurate, però presenta l’inconveniente di essere poco regolare e questo può risultare un problema in certe applicazioni. Un tipo di interpolazione più accurata è quella che si ottiene con polinomi di grado 2 o 3. 5 Funzioni spline Come abbiamo osservato prima, la non regolarità del polinomio di interpolazione lineare a tratti dipende dalla non continuità della derivata del polinomio nei nodi interni all’intervallo di interpolazione. Per risolvere questo problema si introducono le funzioni splines. L’idea fondamentale è costruire una approssimazione polinomiale a tratti che non solo interpola dei punti o dei valori di funzione dati, ma che sia anche “regolare” di class C k per qualche k. Supponiamo di avere un insieme di n + 1 nondi x0 , x1 , x2 , . . . , xn , nei quali vogliamo interpolare una funzione f (x) con una funzione polinomiale a tratti pd tale che: 1. soddisfi le condizioni di interpolazione pd (xi ) = f (xi ), per i = 0, 1, . . . , n; 2. pd (x) sia un polinomio di grado minore o uguale a d su ogni intervallino [xi , xi+1 ] 3. pd (x) abbia un certo grado N di regolarità, cioè (j) (j) lim pd = lim+ pd x→x− i x→xi per j = 0, 1, . . . , N . Determiniamo la relazione che intercorre tra il grado del polinomio (d) ed il suo grado di regolarità. Il grado del polinomio ci fornisce il numero dei coefficienti incogniti da calcolare, mentre il suo grado di regolarità impone ulteriori vincoli al problema (cioè ulteriori equazioni da soddisfare). Osserviamo che dati n + 1 nodi x0 , x1 , . . . , xn questi definiscono n intervallini [xi , xi+1 ], per i = 0, 1, . . . , n, inoltre pd (x) è un polinomio di grado d su ciascuno di questi intervallini quindi è individuato da d + 1 coefficienti: 9 il numero totale di incognite da calcolare per determinare univocamente il polinomio di interpolazione a tratti è N umincognite = n(d + 1). Calcoliamo il numero di condizioni di cui disponiamo: • n + 1 condizioni di interpolazione (pd (xi ) = f (xi )); • ci sono n − 1 punti di congiunzione tra i sottointervalli [xi , xi + 1] e devono essere imposte N + 1 condizioni di regolarità del polinomio su ciascuno dei sottointervalli. Quindi, il numero totale di vincoli (condizioni) da imporre è dato da: n + 1 + (n − 1)(N + 1) = 2n + nN − N Calcoliamo la differenza tra il numero delle incognite ed il numero delle condizioni (equazioni) a disposizione: N umincognite − N umequazioni = n(d + 1) − (2n + nN − N ) = n(d − 1 − N ) + N. Osserviamo che il termine d − 1 − N può essere annulatto imponendo che d−1−N =0⇒N =d−1 ottenendo una relazione che lega il grado del polinomio interpolante a tratti (funzione spline) con la sua regolarità. Comunque rimangono N incognite che non sono univocamente definite. Esempio: Consideriamo la spline cubica, cioè deteminiamo pd (x) in modo che questo sia un polinomio di grado d = 3 su ciascun sottointervallo definito dai nodi: d=3⇒N =2 quindi per definire univocamente la spline cubica (e quindi risolvere univocamente il problema dell’interpolazione) è necessario aggiungere N = 2 condizioni. 5.1 Cenni sulla costruzione della spline cubica interpolante Per costruire la spline cubica interpolante ricerchiamo su ogni sottointervallo [xi , xi+1 ] un polinomio di grado 3 p3 (x) = ai +bi (x−xi )+ci (x−xi )2 +di (x−xi )3 , ∀x ∈ [xi , xi+1 ], i = 0, 1, . . . , n cioè dobbiamo determinare ai , bi , ci , di , 4n coefficienti incogniti, imponendo le condizioni di interpolazione (n + 1) e quelle di regolarità: (j) (j) lim p3 = lim+ p3 x→x− i j = 0, 1, 2 x→xi sono 3(n + 1) = 3n − 3 Osserviamo che (0) p3 (1) p3 (2) p3 (3) p3 = ai + bi (x − xi ) + ci (x − xi )3 + di (x − xi )3 = bi + 2ci (x − xi ) + 3di (x − xi )2 = 2ci (x − xi ) + 6di (x − xi ) = 6di 10 La differenza tra il numero delle incognite e quello delle equazioni a disposizione è : 4n − (3n − 3 + n + 1) = 2 cioè rimangono 2 condizioni da imporre per definire univocamente la spline cubica interpolante. 5.2 Classificazione delle spline cubiche Le condizioni aggiuntive per determinare univocamente la spline cubica interpolante individuano il tipo di spline. Se si impone • p003 (x0 ) = p003 (xn ) = 0, si ottiene la spline naturale; • p03 (x0 ) = p03 (xn ) = e p003 (x0 ) = p003 (xn ), si ottiene la spline periodica; • p03 (x0 ) = y00 (= f 0 (x0 )) e p03 (xn ) = ynp rime(= f 0 (xn )) , si ottiene la spline vincolata. Imponendo le condizioni di interpolazione e di regolarità e scegliendo le condizioni aggiuntive necessarie per determinare univocamente la spline, si ottiene un sistema lineare nelle incognite ai , bi , ci , di che una volta risolto fornir‘a la spline cubica interpolante. Un modo alternativo per costruire la spline cubica è quello di calcolare una base dello spazio dei polinomi di grado 3 a tratti e di utilizzare quasta base per riscrivere la spline cubica. Le basi di tale spazi sono le B-spline 5.3 Errore nell’interpolazione con spline cubiche La teoria dell’errore per le approssimazioni spline è molto più complessa di quella relativa all’ordinaria interpolazione. Si prova che, se f ∈ C 4 ([a, b]) e p3 (x) è la spline cubica interpolante la f (x) sui nodi x0 , x1 , . . . , xn con x0 = a ed xn = b allora max |f (x) − p3 (x)| ≤ x∈[a,b] 5 max |f (4) (x)|h 384 x∈[a,b] essendo h = maxi=0,1,...,n−1 (xi+1 − xi ). 6 Fitting di dati Una importante area dell’approssimazione è il problema di adattare una curva a dei dati sperimentali. Poichè il dato è sperimentale dobbiamo assumere che sia stato misurato con un certo grado di incertezza (errore di misura), per cui non vogliamo necessariamente costruire una curva che passa per ogni dato, ma una funzione che rappresenta la “tendenza dei dati”, cioè che sia in un certo senso una approssimazione vicina ai dati. 11 L’approccio più comunemente usato è noto come, “fitting di dati ai minimi quadrati”. Siano (xk , yk ) per k = 1, 2, . . . , n, n dati sperimentali. Vogliamo determinare la retta y = mx + b la cui distanza dai dati sia minima, cioè vogliamo minimizzare la funzione F (m, b) F (m, b) = n X (yk − (mxk + b))2 k=1 Il precedente problema di minimo si risolve calcolando le derivate parziali della funzione F (m, b) e ponendole uguali a zero: Pn ∂F k=1 (yk − (mxk + b))xk = 0 ∂m = −2 ∂F ∂b Pn = −2 k=1 (yk − (mxk + b)) = 0 da cui ricaviamo Pn k=1 (yk Pn k=1 (yk ed infine, poichè Pn k=1 m m − (mxk + b))xk = 0 − (mxk + b)) = 0 1=n Pn k=1 Pn k=1 x2k + b Pn k=1 xk + bn = xk = Pn k=1 Pn k=1 yk xk yk Risolvendo il percedente sistema lineare di due equazioni nelle incognite m, b si ottiene la retta di best fit dei dati con m= q= ( n Pn k=1 Pn xk )( k=1 k=1 Pn − ( k=1 xk )2 Pn Pn xk yk − ( k=1P n n( k=1 x2k ) yk ) Pn Pn Pn x2k )( k=1 yk ) − ( k=1 xk )( k=1 xk yk ) Pn P n n( i=1 x2k ) − ( k=1 xk )2 12