Interpolazione polinomiale

Da Wikipedia, l'enciclopedia libera.

L'interpolazione polinomiale è l'interpolazione di una serie di valori (es. dei dati sperimentali) con una funzione polinomiale che passa per i punti dati. In particolare, un qualsiasi insieme di n+1 punti distinti può essere sempre interpolato da un polinomio di grado n che assume esattamente il valore dato in corrispondenza dei punti iniziali.

Interpolazione e approssimazione[modifica | modifica sorgente]

L'interpolazione polinomiale è un caso particolare di approssimazione tramite polinomi, dove il vettore degli scarti r, ovvero il vettore dei quadrati della distanza tra il valore dato in un punto e il valore del polinomio approssimante in quel punto, è nullo. Mentre per l'approssimazione polinomiale si vuole trovare un polinomio (generalmente di basso grado) che approssima i punti dati con un errore minimo, nell'interpolazione si vuole trovare il polinomio (potenzialmente di alto grado) che passa esattamente per quei punti.

Sebbene il polinomio di interpolazione assuma il valore esatto nei punti dati, dato il grado superiore esso tenderà ad oscillare maggiormente tra un punto e l'altro, dando quindi una previsione del valore in quelle aree che sarà peggiore di quella data da un polinomio di grado inferiore che non passa per tutti i punti dati. Questo fenomeno è noto come fenomeno di Runge.

Costruzione di un polinomio di interpolazione[modifica | modifica sorgente]

Un polinomio di interpolazione può essere costruito con diverse metodi, ad esempio ricorrendo alla matrice di Vandermonde o alla formula di interpolazione di Lagrange.

Esempio di interpolazione[modifica | modifica sorgente]

Di una funzione f che in altra sede è nota si supponga di conoscere alcuni valori; in particolare si considerino i seguenti valori tabulati

Diagramma dei punti dati.
x f(x)
0 0
1 0.8415
2 0.9093
3 0.1411
4 −0.7568
5 −0.9589
6 −0.2794

Ci si chiede, per esempio: quanto vale la funzione in x= 2.5? L'interpolazione risolve problemi come questo.

Il seguente polinomio di sesto grado passa attraverso tutti i sette punti dati:

 f(x) = -0.0001521 x^6 - 0.003130 x^5 + 0.07321 x^4 - 0.3577 x^3 + 0.2255 x^2 + 0.9038 x.

Sostituendo x = 2.5, troviamo che f(2.5) = 0.5965.

Interpolation example polynomial.png

L'errore di interpolazione è proporzionale alla distanza fra i punti dati alla potenza n . Inoltre questo interpolante, essendo un polinomio, è illimitatamente differenziabile. Quindi l'interpolazione polinomiale, in linea di principio, risolve tutti i problemi di interpolazione lineare.

Tuttavia questo metodo presenta alcuni svantaggi. Il calcolo che porta ai coefficienti del polinomio d'interpolazione è molto "costoso" (in termini di tempo di esecuzione richiesto al calcolatore e in termini di complessità delle elaborazioni). Inoltre, l'interpolazione polinomiale per il complesso dei valori dalla variabile indipendente non si rivela molto esatta; questo accade in particolare nei punti estremi. Questi svantaggi possono essere evitati usando i metodi dell'interpolazione spline o razionale col metodo Floater Hormann.

Interpolazione di funzioni su calcolatore[modifica | modifica sorgente]

Su calcolatore l'interpolazione polinomiale è soggetta a diversi problemi. Il peggiore è sicuramente il mal condizionamento della matrice dei coefficienti (che assume la forma di matrice di Vandermonde). Ciò si traduce nella impossibilità di poter risolvere il sistema di equazioni con metodi standard come Decomposizione LU o sostituzione all'indietro, infatti al crescere del numero dei nodi cresce il sistema e l'indice di condizionamento si fa sempre più grande.

Per calcolare i coefficienti del polinomio interpolante, senza dover risolvere il sistema di equazioni mal condizionato, viene utilizzata l'Interpolazione di Lagrange oppure l'Interpolazione spline

I software per il calcolo numerico sono, il più delle volte, provvisti di funzioni built-in per risolvere questi problemi:

Su MATLAB vengono utilizzati due comandi per interpolare una funzione tramite polinomi:

  • polyfit per calcolare il polinomio interpolante su un insieme di nodi noti
  • polyval per valutare il polinomio su punti in cui non si conosce la f(x)

La scelta dei nodi da utilizzare per l'interpolazione viene fatta in modo da soddisfare la proprietà di Convergenza uniforme tra funzione interpolante e funzione da interpolare, scegliendo i nodi in modo che non siano equidistanti.

Sulla scelta influiscono diverse cause:

  • Teorema di Faber: Data una qualunque successione di nodi in un intervallo chiuso [a,b] esiste sempre una funzione f(x) che genera una sequenza di polinomi di interpolazione che non convergono uniformemente a f in [a,b].
  • Fenomeno di Runge: Nell'intervallo [-5,5] la funzione f(x)=1/1+x^2 se interpolata con una funzione p(x) mostra che all'aumentare del numero di nodi (equidistanti) p(x) non converge a f(x) ma l'errore aumenta!

Ciò che viene fatto generalmente è scegliere i nodi utilizzando la definizione di Nodi di Čebyšëv che assicurano la convergenza uniforme all'aumentare del numero di nodi.

Su MATLAB i nodi di Chebichev su di un intervallo [a,b] vengono calcolati eseguendo la funzione:

  %i = vettore degli indici dei nodi (da 0 a n-1 nodi)
  %n = numero di nodi 
  nchev=(a+b)/2 + (a-b)/2 * cos((2*i+1)/(2*(n+1))*pi)

nchev conterrà alla fine un vettore riga che rappresenta i nodi (x) da utilizzare per interpolare la funzione.

Stima dell'errore[modifica | modifica sorgente]

Siano dati n+1 punti distinti, x_0, x_1, ..., x_n dell'intervallo chiuso e limitato [a, b] \subset \mathbb{R}. Sia f(x) una funzione assegnata nello spazio C^{n+1}[a,b] e  p(x) il polinomio di grado n tale che:

 p(x_i)=f(x_i),\qquad i=0,1, ..., n.

Allora per ogni x \in[a, b] esiste un valore

\zeta_X, con E(x)=f(x)-p(x)=\frac{1}{(n+1)!}(x-x_0)(x-x_1)...(x-x_n)f^{(n+1)}(\zeta_x)

con E(x) definito errore di interpolazione, ossia l'errore che si commette approssimando il valore della funzione col valore del polinomio.

Posto M_{n+1}=max_(x\in[a,b])|f^{(n+1)}(x)|, un limite superiore del valore assoluto dell'errore di interpolazione E(x)=f(x)-p(x) risulta essere |E(x)|\le \frac{M_{n+1}}{(n+1)!}|(x-x_0)(x-x_1)...(x-x_n)|.

Questa formula è molto utile per stimare, ad esempio, il numero di nodi necessari ad ottenere un errore di interpolazione minore di una data tolleranza massima.

Nodi di Čebyšëv[modifica | modifica sorgente]

I nodi di Chebyshev sono dei valori di ascisse, da utilizzare per l'interpolazione polinomiale di una funzione, che permettono di minimizzare l'errore di interpolazione.

Bibliografia[modifica | modifica sorgente]

  • R.Bevilaqua, D. Bini, M.Capovani and O. Menchi (2003). Appunti di Calcolo Numerico. Capitolo 5. Servizio Editoriale Universitario Pisa - Azienda Regionale Diritto allo Studio Universitario.


Voci correlate[modifica | modifica sorgente]

matematica Portale Matematica: accedi alle voci di Wikipedia che trattano di matematica