Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Gabriella Puppo
Interpolazione polinomiale
• Matrice di Vandermonde
• Costruzione del polinomio di interpolazione
• Studio dell’errore
• Fenomeno di Runge
• Condizionamento
Matrice di Vandermonde
A(i,j) = xi j
La matrice di Vandermonde quadrata può essere costruita con la
function vander(v), dove v è un vettore che contiene i nodi di
griglia. Il risultato è una matrice che ha le colonne disposte in
modo opposto rispetto alle convenzioni solite
Esempio
>> vander([2,3,4])
ans =
4 2 1
9 3 1
16 4 1
Griglie di interpolazione
>> x_gauss(10,[1,5])
ans =
Columns 1 through 7
1.0000 1.0979 1.3820 1.8244 2.3820 3.0000 3.6180
Columns 8 through 11
4.1756 4.6180 4.9021 5.0000
>> p=polyfit(x,fx,n)
dove:
x è il vettore che contiene i nodi di griglia;
fx è il vettore che contiene i valori da interpolare sui nodi di
griglia;
n è il grado del polinomio di interpolazione.
N.B. Se n = length(x)-1, allora il polinomio di interpolazione
soddisfa esattamente le condizioni di interpolazione.
Altrimenti, se n < length(x)-1, polyfit interpola nel senso dei
minimi quadrati.
Attenzione!
polyfit fornisce i coefficienti in un ordine diverso da quello usuale:
Supponiamo che la chiamata di polyfit sia stata
>> a=polyfit(x,fx,n)
>> f=inline('x.^3');
>> x=-1:2/3:1;
>> fx=f(x);
>> p=polyfit(x,fx,3)
p=
1.0000 0.0000 0.0000 0
Function polyval.m
La function polyval valuta il polinomio definito dal vettore di
coefficienti a sull’insieme dei valori definito dal vettore x:
>> pxx=polyval(a,xx);
>> f=inline('exp(x).*sin(2*x)');
>> n=5;
>> h=2/n;
>> x=0:h:2; % Costruisce la griglia con 6 nodi
>> fx=f(x); % Calcola f sui nodi di griglia
>> p=polyfit(x,fx,n); % Costruisce il polinomio di grado 5
>> xx=0:0.01:2; % Costruisce una griglia grafica
>> pxx=polyval(p,xx); % Valuta il polinomio sulla griglia xx
>> plot(xx,f(xx))
>> hold;
>> plot(xx,pxx,'g') % Disegna il grafico del polinomio
>> plot(x,fx,'r*') % Disegna i punti di interpolazione
Ottengo:
Esercizio
5 2.13962e+01
10 3.13726e+01
20 2.78234e-01
40 1.83374e-06
5 1.22841e+01
10 5.86816e+00
20 1.82158e-03
40 1.13485e-11
Per la funzione f(x) = abs(x-1), con la griglia equispaziata:
5 4.85716e-01
10 1.31240e+00
20 7.88075e+00
40 3.75116e+06
Se uso la griglia di Gauss-Lobatto, i risultati migliorano, ma la
velocità di convergenza è molto più bassa di prima
5 6.81282e-01
10 3.03245e-01
20 1.37322e-01
40 4.78853e-02
Conclusioni
L’errore dipende:
Considero:
1) griglie equispaziate;
2) griglie di Gauss-Lobatto.
Griglia equispaziata
Griglia di Gauss-Lobatto
Condizionamento
Per studiare il condizionamento di un problema di interpolazione:
rand('state',25)
Con la griglia di Gauss-Lobatto: N = 25, delta = 1e-3
Minimi quadrati
Per interpolare dei dati con un polinomio nel senso dei minimi
quadrati, uso un numero M+1 di dati, con M > N, dove N è il
grado del polinomio di interpolazione.
Ottengo un sistema sovradeterminato, che si risolve con il metodo
QR.
Notare che ora le condizioni di interpolazione non sono
soddisfatte esattamente.
Per studiare l’interpolazione nel senso dei minimi quadrati, ci
appoggeremo alle functions di Matlab.
Il polinomio che si ottiene con i minimi quadrati puo’ essere
parecchio lontano dalla funzione che si vuole approssimare.