Interpolazione Polinomiale
Interpolazione Polinomiale
A. SOMMARIVA
E M.VENTURIN
(1.1)
Perche questo problema abbia senso, necessita garantire lesistenza ed unicita di tale
polinomio pN , questione che puo essere provata in vari modi (ad esempio in termini della
non singolarita della matrice di Vandermonde [18]).
Nel caso N = 1, il problema diventa relativamente semplice. Non e` altro che il calcolo
della retta che passa per due punti assegnati P0 = (x0 , y0 ) e P1 = (x1 , y1 ) cioe da
y y0
x x0
=
y1 y0
x1 x0
(1.2)
abbiamo facilmente
y = y0
x x0
x x1
+ y1
.
x0 x1
x1 x0
(1.3)
x x1
x0 x1
(1.4)
L1 (x) :=
x x0
x1 x0
(1.5)
(1.6)
1.4
1.4
1.2
1.2
0.8
0.8
0.6
0.6
0.4
0.4
0.2
0.2
0.2
0.2
0.4
0.5
1.5
2.5
3.5
0.4
0.5
1.5
2.5
clf;
x0=1;
x1=3;
s=0.5:0.01:3.5;
caso=2; % DICE QUALE POLINOMIO DI LAGRANGE VOGLIAMO STUDIARE.
if caso == 1
lx=(s-x1)/(x0-x1);
l0=(x0-x1)/(x0-x1);
l1=(x1-x1)/(x0-x1);
else
lx=(s-x0)/(x1-x0);
l0=(x0-x0)/(x1-x0);
l1=(x1-x0)/(x1-x0);
end
hold on;
% DISEGNO PUNTI x0=1 e x1=3.
plot(x0,0,bo);
plot(x1,0,bo);
% DISEGNO VALORI x0=1 e x1=3 POLINOMI DI LAGRANGE.
plot(x0,l0,r*);
plot(x1,l1,r*);
% DISEGNO ASSE x.
plot(s,zeros(size(s)));
% DISEGNO POLINOMI DI LAGRANGE
plot(s,lx,k-);
hold off
3.5
Lidea dei polinomi di Lagrange e` di estendere questa propriet`a al caso N > 1. Lagrange
(cf. [12], [5]) osserv`o che il polinomio di grado N
Lk (x) :=
N
Y
j=0,j6=k
N
X
yk Lk (x).
(1.8)
k=0
Infatti
pN (xj ) =
N
X
yk Lk (xj ) =
k=0
N
X
yk k,j = yj .
(1.9)
k=0
Si osservi come ogni termine della sommatoria mostra separa (in qualche senso) il contributo
delle ordinate yk da quello dei polinomi di Lagrange Lk essenzialmente dipendenti dai punti
{xj }j=0,...,N (si rifletta bene su questa affermazione).
1.0.1. Un esempio. Calcoliamo il polinomio di grado 2 che assume nei nodi x0 = 2,
x1 = 1, x2 = 3 rispettivamente i valori f0 = 2, f1 = 11, f2 = 17. Come si vede dalla
definizione, i polinomi di Lagrange sono
(x x1 )(x x2 )
(x 1)(x 3)
(x 1)(x 3)
=
=
(x0 x1 )(x0 x2 )
(2 1)(2 3)
15
(x (2))(x 3)
(x + 2)(x 3)
(x x0 )(x x2 )
=
=
L1 (x) =
(x1 x0 )(x1 x2 )
(1 (2))(1 3)
6
(x (2))(x 1)
(x + 2)(x 1)
(x x0 )(x x1 )
=
=
L2 (x) =
(x2 x0 )(x2 x1 )
(3 (2))(3 1)
10
L0 (x) =
Si vede subito che i polinomi L0 , L1 , L2 sono di secondo grado (e quindi tali le loro
combinazioni lineari), che
L0 (x0 ) = L0 (2) = 1, L0 (x1 ) = L0 (1) = 0, L0 (x2 ) = L0 (3) = 0
L1 (x1 ) = L1 (1) = 1, L1 (x0 ) = L1 (2) = 0, L1 (x2 ) = L1 (3) = 0
L2 (x2 ) = L2 (3) = 1, L2 (x0 ) = L2 (2) = 0, L2 (x1 ) = L2 (1) = 0
e che il polinomio definito in (1.8)
p2 (x) = 2 L0 (x) + 11 L1 (x) + 17 L2(x)
e` tale che
p(x0 ) = 2 L0 (x0 ) + 11 L1(x0 ) + 17 L2 (x0 ) = 2 1 + 11 0 + 17 0 = 2,
p(x1 ) = 2 L0 (x1 ) + 11 L1 (x1 ) + 17 L2(x1 ) = 2 0 + 11 1 + 17 0 = 11,
3
1.4
1.2
0.8
0.6
0.4
0.2
0.2
3
1.2
0.8
0.6
0.4
0.2
0.2
0.4
0.6
3
1.4
1.2
0.8
0.6
0.4
0.2
0.2
0.4
3
(b a)
, k = 0, . . . , N ;
N
(1.11)
(a + b) (b a)
+
tk , k = 0, . . . , N
2
2
(1.12)
con
tk = cos
2k + 1
, k = 0, . . . , N ;
2N + 2
(1.13)
(a + b) (b a)
+
tk , k = 0, . . . , N
2
2
(1.14)
con
tk = cos
k
N
, k = 0, . . . , N ;
(1.15)
1
cos(x)
interpolante(x)
Coppie da interpolare
0.5
0.5
1.5
5
F IGURA 1.4. Grafico che illustra linterpolazione su nodi equispaziati (la funzione ha la linea continua, il
polinomio interpolatore e` tratteggiato, i nodi di interpolazioni coi cerchietti).
1
, x [5, 5]
1 + x2
(1.16)
si ha che pN non converge (puntualmente) a f . Fortunatamente ci`o non succede per i nodi
di Chebyshev-Gauss, per cui comunque (per un teorema dovuto a Faber) esistono funzioni
continue f ma non C 1 tali che linterpolante pN non converge puntualmente a f .
2. Interpolazione polinomiale in Matlab/Octave. Una volta nota le coppie da interpolare
(xk , yk ), k = 0, . . . , N
e immagazzinate le componenti nei vettori x = (xk+1 ), y = (yk+1 ) ove k = 0, . . . , N (la
scelta degli indici dei vettori x e y e` dovuta al fatto che un vettore in Matlab/Octave non pu`o
avere indice 0), siamo interessati a valutare il polinomio interpolatore pN nei punti sj con
j = 1, . . . , M . A tale scopo, Matlab/Octave propongono le funzioni polyfit e polyval.
Per capirne il loro utilizzo ci aiutiamo con lhelp di Matlab.
2.1. Il comando polyfit. Partiamo con il descrivere il comando polyfit.
>> help polyfit
POLYFIT Fit polynomial to data.
POLYFIT(X,Y,N) finds the coefficients of a polynomial P(X) of
degree N that fits the data, P(X(I))=Y(I), in a least-squares sense.
[P,S] = POLYFIT(X,Y,N) returns the polynomial coefficients P and a
structure S for use with POLYVAL to obtain error estimates on
predictions. If the errors in the data, Y, are independent normal
with constant variance, POLYVAL will produce error bounds which
6
Quello che non dice la routine e` come venga descritto il polinomio interpolatore. Aiutiamoci
con il calcolo simbolico eseguito da Matlab, per calcolare il polinomio interpolatore in forma
usuale. Consideriamo di nuovo il polinomio di grado 2 che interpola le coppie (2, 2),
(1, 11), (3, 17).
>> syms x
>> simplify((-2*(x-1)*(x-3)/15)+(11*(x+2)*(x-3)/(-6))+(17*(x+2)*(x-1)/10))
ans =
-4/15*x2+61/15*x+36/5
>> format long
>> -4/15
ans =
-0.26666666666667
>> 61/15
ans =
4.06666666666667
>> 36/5
ans =
7.20000000000000
>>
4.06666666666667
7.19999999999999
valuta il polinomio
pN (x) = a1 xN + . . . + aN +1
nei nodi s = (sj ) e pone t = (tj ) con tj = pN (sj ).
8
2.3. Una funzione per il calcolo e la valutazione del polinomio interpolatore. Avendo a disposizione i comandi polyfit e polyval, posti
x = {xk }k=1,...,N +1 , y = {yk }k=1,...,N +1 , s = {sk }k=1,...,M
vediamo di valutare nei punti sj il polinomio pN tale che
pN (xk ) = yk .
A tal proposito definiamo la funzione interpol
function t=interpol(x,y,s)
%---------------------------------------------% Interpolazione
%
% In input:
% x: nodi.
% y: valori nei nodi.
% s: nodi su cui calcolare linterpolante.
%
% In output:
% t: valori dellinterpolante o approssimante.
%---------------------------------------------m=length(x)-1;
coeff=polyfit(x,y,m);
t=polyval(coeff,s);
Quale esempio torniamo di nuovo al polinomio p2 di grado 2 che interpola le coppie (2, 2),
(1, 11), (3, 17). Usando Matlab e il calcolo simbolico abbiamo visto direttamente che
p2 (x) = (4/15) x2 + (61/15) x + 36/5.
In effetti si verifica numericamente che questo e` il polinomio interpolante (2, 2), (1, 11),
(3, 17)
>> format long
>> p2=inline(-4/15*x.2+61/15*x+36/5);
>> feval(p2,-2)
ans =
-1.999999999999999
>> feval(p2,1)
ans =
11
>> feval(p2,3)
ans =
9
17
>>
t =
2.866666666666664
7.199999999999995
14.266666666666662
>>
1.5
Runge
Equisp.
Cheb.
0.5
0.5
1
5
F IGURA 3.1. Grafico della funzione di Runge 1/(1 + x2 ) nellintervallo [5, 5] e delle sue interpolanti di
grado 8 nei nodi equispaziati e di Chebyshev-Gauss-Lobatto (rispettivamente linea continua, tratteggiata e a puntini,
come da legenda).
function [fx]=runge(x)
fx=1./(x.2+1);
% GRADO.
11
runge
intp. eq.
4
5
F IGURA 3.2. Grafico della funzione di Runge 1/(1 + x2 ) nellintervallo [5, 5] e della sua interpolante di
grado 12 nei nodi equispaziati (rispettivamente linea continua, tratteggiata, come da legenda.
x=-5:10/n:5;
y=runge(x);
s=-5:10/(10*n):5;
t=interpol(x,y,s);
Provando per diversi valori di n, e tralasciando i warnings di Matlab relativi a polyfit, otteniamo:
[N]:
[N]:
[N]:
[N]:
[N]:
[N]:
[N]:
[N]:
[N]:
[N]:
[N]:
[N]:
[N]:
2
3
4
5
6
7
8
9
10
11
12
13
14
[ABS.ERR.][EQS]:
[ABS.ERR.][EQS]:
[ABS.ERR.][EQS]:
[ABS.ERR.][EQS]:
[ABS.ERR.][EQS]:
[ABS.ERR.][EQS]:
[ABS.ERR.][EQS]:
[ABS.ERR.][EQS]:
[ABS.ERR.][EQS]:
[ABS.ERR.][EQS]:
[ABS.ERR.][EQS]:
[ABS.ERR.][EQS]:
[ABS.ERR.][EQS]:
6.46e-001
7.07e-001
4.38e-001
4.33e-001
6.09e-001
2.47e-001
1.04e+000
2.99e-001
1.92e+000
5.57e-001
3.66e+000
1.07e+000
7.15e+000
[CHEB]:
[CHEB]:
[CHEB]:
[CHEB]:
[CHEB]:
[CHEB]:
[CHEB]:
[CHEB]:
[CHEB]:
[CHEB]:
[CHEB]:
[CHEB]:
[CHEB]:
12
9.62e-001
6.46e-001
8.29e-001
4.58e-001
6.39e-001
3.11e-001
4.60e-001
2.04e-001
3.19e-001
1.32e-001
2.18e-001
8.41e-002
1.47e-001
cos
2
2
n1
(a + b) (b a)
=
cos(0)
2
2
(a + b) (b a)
=
2
2
=a
(3.1)
(a + b) (b a)
n1
cos
2
2
n1
(a + b) (b a)
=
cos()
2
2
(a + b) (b a)
(1)
=
2
2
=b
(3.2)
xc(1) =
mentre m = n porge
xc(n) =
Osserviamo che a prima vista la routine cheb sembra produrre un set di nodi diversi
da quelli di Chebyshev-Gauss-Lobatto (scalati) introdotti in (1.15). In realt`a sono
gli stessi come si pu`o facilmente verificare matematicamente o in Matlab
>> N=10;
>> k=0:N;
>> t=-cos(k*pi/N);
>> t=sort(t);
>> t
t =
Columns 1 through 7
-1.0000
-0.9511
-0.8090
Columns 8 through 11
0.5878
0.8090
0.9511
>> xc=cheb(-1,1,N+1)
xc =
Columns 1 through 7
-1.0000
-0.9511
-0.8090
Columns 8 through 11
0.5878
0.8090
0.9511
>>
-0.5878
-0.3090
-0.0000
0.3090
-0.3090
-0.0000
0.3090
1.0000
-0.5878
1.0000
>> a=-5;
>> b=5;
>> N=10;
>> h=(b-a)/N;
>> x=a:h:b
x =
-5
-4
-3
-2
-1
>> length(x)
ans = 11
>>
>> esperimento
Warning: Polynomial is badly conditioned. Remove repeated data points
or try centering and scaling as described in HELP POLYFIT.
> In C:\MATLAB6p1\toolbox\matlab\polyfun\polyfit.m at line 74
In D:\DVD_27_OTTOBRE_2007\CS_2008\INTERPOLAZIONE_2008\MFILES\interpol.m
at line 17
In D:\DVD_27_OTTOBRE_2007\CS_2008\INTERPOLAZIONE_2008\MFILES\esperimento.m
at line 5
[ABS.ERR.][EQS]: 1.07e+000 [CHEB]: 8.41e-002
>>
Diamo una spiegazione. Il codice di polyfit risolve il sistema lineare prodotto dalla matrice di Vandermonde V (cf. [18]), con una fattorizzazione QR (cf. [17]). In altre parole
se V = (Vi,j ) con Vi,j = xj1
(xi sono le ascisse dei nodi di sampling prescelti), si scrii
ve A = Q R con Q ortonormale e R triangolare superiore
e quindi si risolve V c = y (c
P
sono i coefficenti del polinomio interpolante p(x) = k ck xk ) come soluzione del sistema
Rc = Q y. Se R e` malcondizionata in norma 1, pi`u precisamente kRk1 kR1 k1 > 1010 ,
Matlab/Octave segnala un warning. La cosa e` pi`u elaborata di cos` in quanto polyfit
usa la cosidetta economy size version della fattorizzazione QR, ma tralasciamo i dettagli per
chiarezza.
Per sopperire a questi problemi una delle possibili soluzioni consiste nellusare la cosidetta
formulazione baricentrica dei polinomi di Lagrange (cf. [2], [19]). Questa e` implementata in
Matlab nel codice barylag [19]. Una volta scaricato e scompattato il file zip, e digitato il
codice esperimento bar
n=15;
% GRADO.
x=(-5:10/n:5);
% NODI INTERP. (EQUISPAZ.).
y=runge(x);
% FUNZIONE NEI NODI EQUISP.
s=(-5:10/(10*n):5); % NODI TEST.
data_eqs=[x y];
15
t=barylag(data_eqs,s);
xcheb=(cheb(-5,5,n));
% NODI CHEB.
ycheb=runge(xcheb);
% FUNZIONE NEI NODI CHEB.
data_cheb=[xcheb ycheb];
tcheb=barylag(data_cheb,s);
% INTP. CHEB.
plot(s,runge(s),s,t,s,tcheb);
% PLOT INTP. VS RUNGE.
err_eqs=norm(runge(s)-t,inf);
% ABS. ERR. EQUISPAZ.
err_cheb=norm(runge(s)-tcheb,inf); % ABS. ERR. CHEB.
fprintf(\n \t [ABS.ERR.][EQS]: %2.2e [CHEB]: %2.2e,err_eqs,err_cheb);
abbiamo
>> esperimento_bar
[ABS.ERR.][EQS]: 2.10e+000 [CHEB]: 5.33e-002
e
>> esperimento_bar
[ABS.ERR.][EQS]: 4.57e+005 [CHEB]: 5.62e-009
>>
segno che i risultati ottenuti con polyfit sono inaccettabili, mentre quelli di barylag
sono perfettamente in parallelo con quanto detto nelle sezioni precedenti relativamente al
fenomeno di Runge (si osservi che nel primo caso linterpolazione nei nodi di Chebyshev
sembra divergere, in disaccordo con la teoria!).
16
2
x3
2
2
2
3 < 3 < 13 = 2.
1.2
Essendo
(1.09 1)(1.09 1.1)(1.09 1.2) 9.9 105
ricaviamo quindi che lerrore dellinterpolante e`
1.9097 105 1.1574 9.9 105 /6 | log (s) p2 (s)| 2 9.9 105 /6 = 3.3 105 .
Utilizzando la funzione interpol.m precedentemente introdotta, si verifica che
p2 (1.09) 0.08615260795055
mentre
log (1.09) 0.08617769624105
e quindi
| log (1.09) p2 (1.09)| 2.51 105
perfettamente in linea con le stime fornite.
Esercizio facoltativo. Effettuare un programma Matlab che calcoli il valore assunto in 1.09
dal polinomio interpolatore della funzione log relativamente ai punti 1, 1.1, 1.2. E buona
lapprossimazione fornita dal polinomio interpolatore? (Suggerimento: si noti che
17
Ricordiamo che
lopzione r-o
1. disegna un cerchietto rosso per ognuno dei punti (x1 , y1 ), . . ., (xi , yi ), . . .,
(xn , yn );
2. per i = 1, . . . , n 1, unisce i punti (xi , yi ), (xi+1 , yi+1 ) con un segmento
rosso.
essendo importante disegnare solo le ascisse (e non le ordinate), quali ordinate si
pu`o porre
y=zeros(size(x));
Una volta completato lesercizio si osservi la particolare disposizione dei nodi di ChebyshevGauss. Si accumulano verso gli estremi dellintervallo?
7. Online. Si possono reperire online varie bibliografie dei matematici sopra citati:
1. http://en.wikipedia.org/wiki/Chebyshev
2. http://www-history.mcs.st-andrews.ac.uk/Biographies/Chebyshev.html
3. http://it.wikipedia.org/wiki/Lagrange
4. http://www-history.mcs.st-andrews.ac.uk/Biographies/Lagrange.html
18
5. http://en.wikipedia.org/wiki/Isaac Newton
Per quanto riguarda linterpolazione:
1. http://it.wikipedia.org/wiki/Interpolazione %28matematica%29
2. http://it.wikipedia.org/wiki/Interpolazione polinomiale
3. http://en.wikipedia.org/wiki/Interpolation
4. http://en.wikipedia.org/wiki/Polynomial interpolation
5. http://it.wikipedia.org/wiki/Fenomeno di Runge
6. http://en.wikipedia.org/wiki/Runge%27s phenomenon
7. http://en.wikipedia.org/wiki/Newton polynomial
8. http://it.wikipedia.org/wiki/Nodi di Chebyshev
9. http://en.wikipedia.org/wiki/QR decomposition
10. http://en.wikipedia.org/wiki/Vandermonde matrix
8. Frasi celebri.
1. To isolate mathematics from the practical demands of the sciences is to invite the
sterility of a cow shut away from the bulls. (Chebyshev)
2. God made the integers; all else is the work of man. (Kronecker).
3. Before we take to sea we walk on land. Before we create we must understand.
(Lagrange)
4. When we ask advice, we are usually looking for an accomplice. (Lagrange)
5. It took the mob only a moment to remove his head; a century will not suffice to
reproduce it. [said about the chemist Lavoisier] (Lagrange)
6. I do not know. [summarising his lifes work] (Lagrange)
7. These astronomers are queer; they wont believe in a theory unless it agrees with
their observations. (Lagrange) item How lucky was Newton! In his time the system
of the world was still to be discovered! (Lagrange)
RIFERIMENTI BIBLIOGRAFICI
[1] K. Atkinson, An Introduction to Numerical Analysis, Wiley, (1989).
[2] J.P. Berrut and L.N.Trefethen, Barycentric Lagrange interpolation, (SIAM Review, 2004),
http://web.comlab.ox.ac.uk/oucl/work/nick.trefethen/barycentric.pdf.
[3] V. Comincioli, Analisi Numerica, metodi modelli applicazioni, Mc Graw-Hill, 1990.
[4] Mac Tutor, Chebyshev biography,
http://www-history.mcs.st-andrews.ac.uk/Biographies/Chebyshev.html.
[5] Mac Tutor, Lagrange biography,
http://www-history.mcs.st-andrews.ac.uk/Biographies/Lagrange.html.
[6] The MathWorks Inc., Numerical Computing with Matlab, http://www.mathworks.com/moler.
[7] A. Quarteroni e F. Saleri, Introduzione al calcolo scientifico, Springer Verlag, 2006.
[8] A. Quarteroni, R. Sacco e F. Saleri, Matematica numerica, Springer Verlag, 1998.
[9] Wikipedia, Fenomeno di Runge,
http://it.wikipedia.org/wiki/Fenomeno di Runge.
[10] Wikipedia, Interpolazione polinomiale,
http://it.wikipedia.org/wiki/Interpolazione polinomiale.
19
20