12.07.2015 Views

Algoritmi per l'interpolazione polinomiale Implementazione MATLAB

Algoritmi per l'interpolazione polinomiale Implementazione MATLAB

Algoritmi per l'interpolazione polinomiale Implementazione MATLAB

SHOW MORE
SHOW LESS
  • No tags were found...

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

<strong>Algoritmi</strong> <strong>per</strong> l’interpolazione <strong>polinomiale</strong><strong>Implementazione</strong> <strong>MATLAB</strong>Alessandro GalloDocente: Prof. Giuseppe Rodriguez


INDICE 1Indice1 Il problema dell’interpolazione 21.1 Il caso generale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 Interpolazione <strong>polinomiale</strong> 32.1 canonical.m . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42.2 pointinteractive.m . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 Rappresentazione del polinomio interpolante 53.1 Forma di Lagrange . . . . . . . . . . . . . . . . . . . . . . . . . . . 63.2 lagrix.m . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63.3 lagrange.m . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73.4 Formula di Neville . . . . . . . . . . . . . . . . . . . . . . . . . . . 73.5 neville.m . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83.6 Formula di Newton . . . . . . . . . . . . . . . . . . . . . . . . . . . 83.7 newton.m . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94 Posizionamento dei nodi 104.1 Nodi di Chebychev . . . . . . . . . . . . . . . . . . . . . . . . . . . 104.2 cheby.m . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115 Interpolazione 2d 125.1 lag2d.m e newnev2d.m . . . . . . . . . . . . . . . . . . . . . . . . . 13


1 IL PROBLEMA DELL’INTERPOLAZIONE 21 Il problema dell’interpolazioneIl problema dell’interpolazione può essere presentato in due modi diversi:1. Dato un insieme di (n + 1) punti (x i , y i ), i = 0, . . . , n vogliamo trovare unafunzione Φ(x) che passi <strong>per</strong> ciascun punto, cioè tale cheΦ(x i ) = y ii = 0, . . . , nUna tale funzione prende il nome di funzione interpolante e gli x i sonodetti nodi.2. Se f(x) ∈ C [a,b] e (x i , y i ), i = 0, . . . , n sono (n + 1) punti di campionamentodella f, ci possiamo chiedere qual è la qualità dell’approssimazione di f(x)fatta dalla funzione interpolante Φ .Il primo caso è tipico di molte applicazioni in cui si ha a che fare con misure effettuatesu un certo fenomeno fisico di cui <strong>per</strong>ò non si conosce il modello matematico.In questo caso i nodi rappresentano le misurazioni effettuate e Φ mira a descriverel’andamento del fenomeno.Il secondo caso è in sostanza una possibile soluzione al problema dell’approssimazionedi una funzione f con una funzione Φ che in genere si vuole più facile datrattare rispetto alla f (si pensi ad esempio a problemi di integrazione e derivazione).Nel seguito, se non altrimenti specificato, si farà sempre riferimento al caso unidimensionale.1.1 Il caso generaleIn generale, dati (n + 1) punti (x i , y i ), i = 0, . . . , n cercheremo la funzione interpolanteΦ in un sottospazio di funzioni a dimensione finita. In tal modo, fissatauna base {φ i }, potremo scrivere Φ come combinazione lineare delle φ i :(1) Φ(x) =n∑a j φ j (x)j=0con gli a j come coefficienti. Facciamo ora vedere che gli a j sono in realtà leincognite del nostro problema. Affinchè sia interpolante, la Φ deve verificare lecondizioni di interpolazioneΦ(x i ) = y ii = 0, . . . , n


2 INTERPOLAZIONE POLINOMIALE 3Sostituendo nella (1) otteniamo:n∑(2) Φ(x i ) = a j φ j (x i ) = y ij=0i = 0, . . . , nLa (2) è in realtà un sistema lineare di (n + 1) equazioni in (n + 1) incognite cheha la formaΦa = ydove φ ij = φ j (x i ) è la matrice dei coefficienti e a è la soluzione del sistema.Quest’ultima esiste se e solo se(3) detΦ ≠ 0 (determinante di Haar)La (3) è detta condizione di unisolvenza e assicura che la funzione interpolanteesista e sia unica.2 Interpolazione <strong>polinomiale</strong>Un caso molto importante è quello in cui le funzioni {φ i } vengono scelte nellospazio Π n dei polinomi di grado ≤ n.La scelta naturale è quella della base canonica {1, x, x 2 , . . . , x n } di Π n , in modo dapoter scrivere il polinomio interpolante comen∑p n (x) = a j x jPer quanto detto prima, il sistema lineare che ci <strong>per</strong>mette di determinare i coefficientidel polinomio interpolante sarà del tipo Xa = y dove y = (y 0 , . . . , y n ) è ilvettore delle ordinate e X è una matrice detta matrice di Vandermonde, chesi costruisce a partire dai nodi {x i } e ha la forma⎛⎞1 x 0 x 2 0 . . . x n 0X = ⎜1 x 1 x 2 1 . . . x n 1⎟⎝. . . . . . . . . . . . . . ⎠1 x n x 2 n . . . x n nUn risultato importante è che, siccomej=0detX = ∏ i>j(x i − x j )il polinomio interpolante esiste ed è unico se e solo se i nodi sono tutti diversi fraloro. 11 Indicheremo con n il grado del polinomio interpolante su (n + 1) nodi


2 INTERPOLAZIONE POLINOMIALE 410.80.60.40.20−0.2−0.4−0.6−0.8−1sin(π x)p n(x)nodi equispaziati0 0.5 1 1.5 2 2.5 3 3.5Figura 1: Interpolazione <strong>polinomiale</strong> canonica2.1 canonical.mLa function p = canonical(x, xi, yi) 2 restituisce il polinomio interpolantep n (x) in forma canonica. I coefficienti di p n vengono calcolati risolvendo il sistemalineare che ha come matrice dei coefficienti la matrice di Vandermonde relativaagli {x i } e come termine noto il vettore degli {y i }.% costruzione della matrice di VandermondeV = vander(xi);% calcolo dei coefficienti del polinomioc = V \ yi(:);% valutazione del polinomio sull’intervallo xp = polyval(c, x);Nello script canonicalint.m viene campionata una funzione test f = sin(πx)su 6 nodi equispaziati e successivamente viene calcolato il polinomio interpolantep n (x) utilizzando la function canonical. La funzione test è valutata su 100 puntie interpolata con un polinomio di grado dispari <strong>per</strong> sfruttare la simmetria della f.Dalla figura 1 si può notare come il polinomio interpolante tenda ad oscillare in2 Nelle function implementate in questo documento, x è un vettore contentente i punti divalutazione, xi è il vettore dei nodi e yi è il vettore delle ordinate


3 RAPPRESENTAZIONE DEL POLINOMIO INTERPOLANTE 55Polinomio interpolante43210−1−2−3−4−50 0.5 1 1.5 2 2.5 3 3.5 4 4.5 5Figura 2: pointinteractive.mmaniera evidente quando non è più vincolato a passare <strong>per</strong> i punti di campionamento.In figura 1 è anche riportato l’errore di interpolazione nell’intervallotra il primo e l’ultimo nodo (l’errore risulta pari a 0.2313). Inoltre, provando adaumentare sensibilmente il numero dei nodi (quindi ad avvicinarli), la matrice diVandermonde diventa numericamente singolare, mostrando il cattivo condizionamentodella base canonica di Π n .Provando ad effettuare l’interpolazione su 18 nodi equispaziati, si ottiene da MAT-LAB il messaggioWarning: Matrix is close to singular or badly scaled.2.2 pointinteractive.mSi tratta di uno script che <strong>per</strong>mette all’utente di selezionare 4 punti su un pianocartesiano e successivamente plotta il polinomio interpolante p n (x) (vedi figura 2).Lo script utilizza la function canonical.3 Rappresentazione del polinomio interpolanteLa scelta della base canonica di Π n <strong>per</strong> la rappresentazione del polinomio interpolantepresenta dei problemi di carattere numerico, fra i quali il cattivo condizionamentodella matrice di Vandermonde e della stessa base canonica, e un costo


3 RAPPRESENTAZIONE DEL POLINOMIO INTERPOLANTE 6computazionale dell’ordine di O(n 3 ).Per ovviare a questi problemi, esistono degli algoritmi che <strong>per</strong>mettono di rappresentarein altra forma il polinomio p n (x).3.1 Forma di LagrangeAnzichè calcolare i coefficienti di p n (x), questi si scelgono uguali agli {y i } e si cercauna base <strong>per</strong> rappresentare p n . Si trova chen∑p n (x) = y i L i (x)dove gli {L i } sono detti polinomi cardinali di Lagrange e hanno la forma(4) L i (x) =i=0n∏k=0k≠ix − x kx i − x kInoltre godono della proprietà che L i (x j ) = δ ij .Rappresentare p n (x) in forma di Lagrange richiede un costo computazionale paria O(n 2 ).3.2 lagrix.mLa function L = lagrix(x, xi) costruisce la matriceL = [L 0 (x)L 1 (x) . . . L n (x)]che ha <strong>per</strong> colonne le valutazioni degli L i (x) sui punti contenuti nell’intervallo x. Lacolonna i-esima di L si ottiene invocando la subfunction l = givelagr(x, i, xi)che restituisce un vettore l contenente il polinomio L i (x) valutato su x.L( :, i ) = givelagr( x, i, xi );La subfunction givelagr può o<strong>per</strong>are su vettori x e costruisce L i (x) a partire dallarelazione (4) nel modo seguente:for k = 1 : nif i ~= kfact = ( x - xi(k) ) ./ ( xi(i) - xi(k) );prd = prd .* fact;endendIn figura 3 sono plottati i primi 3 polinomi di Lagrange.


3 RAPPRESENTAZIONE DEL POLINOMIO INTERPOLANTE 72L 0(x)L 1(x)L 2(x)1.510.50−0.50 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 13.3 lagrange.mFigura 3: Polinomi cardinali di LagrangeLa function p = lagrange(x, xi, yi) restituisce il polinomio interpolante p n (x)rappresentato in forma di Lagrange e valutato sui punti del vettore x. Per lacostruzione di p n viene usata la matrice L prodotta dalla function lagrixL = lagrix(x, xi);p = L * yi;Lo script lagrange_int.m campiona la stessa funzione test di canonical_int.m(f = sin(πx)) su 6 nodi equispaziati ed interpola con il polinomio p n (x) postoin forma di Lagrange (vedi figura 4). L’errore di interpolazione risulta anchein questo caso pari a 0.2313, ma aumentando il numero dei nodi equispaziati a18 (come nell’esempio precedente) non si presentano problemi di instabilità dellarappresentazione.3.4 Formula di NevillePermette di costruire un polinomio interpolante (k + 1) punti.DefiniamoQ r,r+1,...,r+k (x) ∈ Π kcome il polinomio che interpola sui nodi x r , x r+1 , . . . , x r+k . AlloraQ r,r+1,...,r+k (x) = (x − x r)Q r+1,...,r+k (x) − (x − x r+k )Q r,r+1,...,r+k−1 (x)x r+k − x r


3 RAPPRESENTAZIONE DEL POLINOMIO INTERPOLANTE 810.80.60.40.20−0.2−0.4−0.6−0.8−1sin(π x)p n(x)nodi equispaziatierr = 0.23130 0.5 1 1.5 2 2.5 3Figura 4: Polinomio interpolante in forma di LagrangeE’ possibile costruire una tabella, detta tabella di Neville, mediante la quale,partendo da Q r (x) = y r , si arriva a Q r,r+1,...,r+k (x).3.5 neville.mLa function p = neville(x, xi, yi) costruisce il polinomio interpolante p n (x)utilizzando la formula di Neville:p(i) = giveneville(x(i), xi, yi);Per ciascun punto del vettore x si invoca la function s = giveneville(x, xi, yi)che costruisce la tabella di Neville utilizzando un vettore q. L’assegnamentoq = yi;corrisponde a porre Q r = y r . A partire da questo, la tabella viene costruita inmaniera ricorsiva e al termine, il primo elemento del vettore q contiene il valoreQ 0,1,...,n (x), che viene assegnato a p(i) dalla function neville.3.6 Formula di NewtonPermette di rappresentare p n (x) nella formap 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 )++ · · · + f[x 0 , x 1 , . . . , x n ](x − x 0 )(x − x 1 ) . . . (x − x n−1 )


3 RAPPRESENTAZIONE DEL POLINOMIO INTERPOLANTE 9dove i coefficienti sono le differenze divisef[x 0 , . . . , x n ] = f[x 1, x 2 , . . . , x n ] − f[x 0 , x 1 , . . . , x n−1 ]x n − x 0Anche in questo caso è possibile costruire una tabella, detta tabella delle differenzedivise, che partendo da f[x i ] = y i <strong>per</strong>mette di arrivare a f[x 0 , x 1 , . . . , x n ].L’algoritmo ha un costo computazionale dell’ordine di O(n 2 ).3.7 newton.mLa function p = newton(x, xi, yi) costruisce il polinomio interpolante p n (x)utilizzando la formula di Newton. Tale polinomio viene poi valutato in ciascunpunto del vettore x.La costruzione di p n avviene in due fasi% costruzione del vettore f delle differenze divisef = givdifdiv(xi, yi);% costruzione del polinomio interpolantep = givehorner(x, xi, f);Nella prima fase si costruisce la tabella delle differenze divise utilizzando un vettoref, in modo simile alla tabella di Neville. Questa o<strong>per</strong>azione viene svolta dalla functionf = givdifdiv(x, y) che costruisce il vettore f in modo che i suoi elementisiano le differenze divisef[x 0 ] f[x 0 , x 1 ] f[x 0 , x 1 , x 2 ] . . . f[x 0 , x 1 , . . . , x n ]Nella seconda fase viene costruito il polinomio interpolante utilizzando l’algoritmodi Horner, implementato nella function h = givehorner(x, xi, c), dove c è ilvettore dei coefficienti del polinomio. L’algoritmo di Horner o<strong>per</strong>a in questo modo:n = length(c);h = c(n);for k = n-1 : -1 : 1h = h .* ( x - xi(k) ) + c(k);end


4 POSIZIONAMENTO DEI NODI 104 Posizionamento dei nodiData una funzione f e il polinomio p n (x) interpolante (n + 1) nodi, possiamodefinire la funzioneE n (x) = f(x) − p n (x)che fornisce l’errore di interpolazione punto <strong>per</strong> punto.funzione E n si trova cheAndando a studiare la∀xE n (x) = f (n+1) (ξ)(n + 1)! ω n(x)doveω n (x) = (x − x 0 )(x − x 1 ) . . . (x − x n )e gli {x i } sono i nodi di interpolazione.Questa relazione ci mostra che all’errore di interpolazione contribuiscono sia lafunzione f che abbiamo campionato, sia la scelta dei nodi (attraverso il fattoreω n (x)). Il posizionamento e il numero dei nodi influisce quindi sull’errore E n (x)che si commette interpolando. D’altra parte un risultato dovuto a Weierstrass cidice che se f ∈ C [a,b] allora esiste sempre un polinomio p ∈ Π n che rende ||f −p n || ∞piccolo a piacere, ma non fornisce alcuna informazione sulla scelta dei nodi. Restaquindi il problema di come posizionare i nodi di interpolazione <strong>per</strong> minimizzare illoro contributo all’errore.4.1 Nodi di ChebychevPoichè il contributo all’errore di interpolazione dovuto ai nodi è contenuto nelfattore ω n (x), possiamo provare a studiare il problema di minimaxmin max ‖ω n(x)‖{xi} x∈[a,b]Studiando tale problema nell’intervallo [−1, 1] si trova che prendendo come nodigli zeri del polinomioT n+1 (x) = cos(n + 1)θx = cos θottenuto calcolando cos(n + 1)θ e ponendo x = cos θ, il contributo all’errore diω n (x) cresce in maniera logaritmica (quindi lenta).I nodi ottenuti in questo modo prendono il nome di nodi di Chebychev ecostituiscono una scelta ottimale <strong>per</strong> l’interpolazione.


4 POSIZIONAMENTO DEI NODI 1110.50−0.5T 0(x)T 1(x)T 2(x)−1−1 −0.8 −0.6 −0.4 −0.2 0 0.2 0.4 0.6 0.8 14.2 cheby.mFigura 5: Polinomi di ChebychevLa function xi = cheby(n) restituisce un vettore x che contiene i primi n nodidi Chebychev. Il nodo k-esimo viene calcolato implementando la relazione( 2k + 1)x k = cos2n + 2 π k = 0, . . . , nnel modo seguente:xi = [0:n-1];xi = cos( (2*xi + 1)/(2*n + 2) * pi );In figura 5 sono plottati i primi 3 polinomi di Chebychev.Lo script test_cheby.m interpola la funzione f = sin(πx) utilizzando sia nodiequispaziati che nodi di Chebychev. Per il calcolo dei polinomi interpolanti sonostate usate le function neville e newton.In figura 6 è mostrato l’errore di interpolazione al variare del grado del polinomiointerpolante e del posizionamento dei nodi. Dal plot si nota che sebbene entrambigli errori decrescano al crescere di n, l’errore dovuto all’utilizzo di nodi di Chebychevsi mantiene più basso.Risulta invece interessante verificare un caso in cui i nodi equispaziati si comportanomolto male. Lo script test_runge.m interpola la funzione di Rungef(x) =11 + 25x 2


5 INTERPOLAZIONE 2D 1210 0 f = sin(π x)nodi equispaziatinodi di Chebychev10 −210 −410 −6||f−p|| ∞10 −810 −1010 −1210 −143 5 7 9 11 13 15 17 19nFigura 6: Errore di interpolazione in funzione del grado del polinomio interpolantesu nodi equispaziati e nodi di Chebychev. La funzione è stata valutata su 100 puntinell’intervallo [−1, 1] e <strong>per</strong> il calcolo dei polinomi interpolanti sono state utilizzatele function newton e neville.In figura 7 sono riportati i plot della funzione di Runge con i polinomi interpolantie il plot dell’errore di interpolazione in funzione del grado del polinomio p n , che èstato scelto pari <strong>per</strong> sfruttare la simmetria della funzione f.Osservando il grafico a sinistra, si può notare come l’interpolazione su nodi diChebychev si mantiene buona anche in prossimità degli estremi dell’intervallo,dove invece quella su nodi equispaziati tende ad oscillare vistosamente. Dall’esamedell’errore di interpolazione si vede immediatamente che l’errore dovuto all’utilizzodi nodi equispaziati cresce velocemente al crescere di n, al contrario di quellodovuto ai nodi di Chebychev che decresce in maniera rapida.5 Interpolazione 2dData una funzione reale di due variabili reali z = f(x, y) e una griglia equispaziatasu [a, b] × [c, d] (x ∈ [a, b], y ∈ [c, d]), supponiamo di conoscere i valoriAllora il polinomio(5) p(x, y) =f ij = f(x i , y j )n∑i=0n∑f ij L (1)j=0j = 0, . . . ni (x)L (2)j(y)


5 INTERPOLAZIONE 2D 1310.910 2 f = 1/(1+25x 2 )nodi equispaziatinodi di Chebychev0.80.710 10.60.5||f−p|| ∞10 00.40.30.210 −10.1funzione di runge0−1 −0.5 0 0.5 110 −22 4 6 8 10 12 14 16 18 20nFigura 7: Interpolazione della funzione di Runge e grafico dell’errore in funzionedel grado di p ninterpola f sulla griglia, cioè p(x, y) = f ij . I polinomi L (1)i (x) e L (2)j (y) sonocostruiti rispettivamente sui punti {x i } e {y i } . Un problema potrebbe essere cheil polinomio p(x, y) è un polinomio di grado n in x e di grado n in y, ma non digrado n 2 in x e in y. La function lag2d è una implementazione di questo algoritmodi interpolazione.Un altro approccio al problema è il seguente: sulla stessa griglia equispaziatasi considerano i polinomi q j (x), j = 0, . . . n. Ciascuno di questi polinomi interpolai valori {f 0j , . . . , f nj } sui punti {(x 0 , y j ), . . . , (x n , y j )}. In pratica si tiene y j fissatoe si costruisce un polinomio <strong>per</strong> ciascuna riga della griglia. Successivamente, <strong>per</strong>valutare p(x, y) su un punto generico, si valuta q j (x), j = 0, . . . , n e si interpolanosu y i punti ottenuti. La function newnev2d implementa questo algortimodi interpolazione costruendo i polinomi interpolanti con le formule di Neville e diNewton.5.1 lag2d.m e newnev2d.mLa function P = lag2d(x, y, xi, yi, F) data la matrice F che contiene lavalutazione di una funzione f sulla griglia equispaziata restituisce la matrice Pche rappresenta la su<strong>per</strong>ficie interpolante f sulla griglia. L’algortimo implementala relazione (5) che definisce il polinomio p(x, y) utilizzando le variabili insum eoutsum nelle quali vengono memorizzati rispettivamente i risultati della sommatoriainterna e di quella esterna:


5 INTERPOLAZIONE 2D 14Nodi equispaziatiNodi di Chebychevx 10 −8231.521100.5−1−20−3−0.54−41340.512||f−p|| =1.71234∞1001230−0.5||f−p|| =2.08632e−008∞−1−1−0.500.5Figura 8: newnev2d, errore di interpolazione punto <strong>per</strong> puntooutsum = 0;for i = 1 : ninsum = 0;for j = 1 : ninsum = insum + f(i, j) * Ly(:, j);endoutsum = outsum + insum * Lx(:, i);endQuesta function utilizza lagrix <strong>per</strong> costruire le matrici Lx e Ly:Ly = lagrix(y, yi);Lx = lagrix(x, xi);La function P = newnev2d(x, y, xi, yi, F) costruisce, analogamente a lag2d,la su<strong>per</strong>ficie interpolante P ma lo fa utilizzando polinomi interpolanti costruiti sullagriglia di valutazione. Per la costruzione di questi polinomi si utilizzano le functionneville e newton. La matrice P si ottiene in questo modo:n = length(x); ni = length(yi);% costruzione matrice Qfor i = 1 : niQ(:, i) = newton(x, xi, F(:, i));


5 INTERPOLAZIONE 2D 15f = sin(xy)10 2 n10 0nodi equispaziatinodi di Chebychev10 −210 −4||f−p|| ∞10 −610 −810 −1010 −1210 −1410 −162 4 6 8 10 12 14 16 18 20 22Figura 9: newnev2d, errore di interpolazione in funzione di nend% calcolo su<strong>per</strong>ficie interpolante Pfor i = 1 : np = neville(y, yi, Q(i, :));P(i, :) = p’;endLo script test2d.m interpola la funzione test z = sin(xy) su una griglia [0, 4]×[0, 4]costituita da 30 punti di valutazione <strong>per</strong> lato. La griglia dei nodi è costruita utilizzandosia nodi equispaziati che nodi di Chebychev. Il numero dei nodi è pari a8. Questo script utilizza la function newnev2d. In figura 8 sono raffigurati i plotdell’errore nel caso di nodi equispaziati (a sinistra) e di Chebychev (a destra).In figura 9 è invece plottato il grafico dell’errore di interpolazione ||f −p|| ∞ al variaredel numero dei nodi n. Come ci si aspetta, l’errore nel caso di nodi equispaziatidiminuisce più lentamente rispetto al caso di nodi di Chebychev.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!