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