Analisi numerica 3 - Dipartimento di Matematica e Fisica

Transcript

Analisi numerica 3 - Dipartimento di Matematica e Fisica
Analisi numerica 3
F. Pasquarelli
Indice
I
Risoluzione di sistemi lineari
4
1 Metodo del gradiente
1.1 Metodo iterativo . . . . . . . . . . . . . . . . . . . . . . . . .
1.2 Errore e convergenza . . . . . . . . . . . . . . . . . . . . . . .
2 Metodo del gradiente coniugato
2.1 Generare le direzioni di discesa . . . . . . . . . .
2.2 Metodo iterativo. . . . . . . . . . . . . . . . . . .
2.3 Errore e convergenza . . . . . . . . . . . . . . . .
2.4 Metodo del gradiente coniugato precondizionato .
2.4.1 Matrici di precondizionamento algebriche.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
6
8
9
12
13
15
16
21
24
3 Schemi tipo gradiente coniugato per matrici generiche
26
II
32
Approssimazione di funzioni
4 Interpolazione di Hermite
33
5 Splines
5.1 Splines cubiche . . . . . . . . .
5.2 B-splines . . . . . . . . . . . . .
5.2.1 Base sull’intero intervallo
5.2.2 Base locale . . . . . . .
5.3 Funzioni di Brézier . . . . . . .
35
36
38
38
38
43
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
6 Miglior approssimazione
45
7 Approssimazione di funzioni periodiche
48
8 Interpolazione in più dimensioni
54
2
III
Ottimizzazione
55
9 Ricerca del minimo di una funzione
9.1 Metodo di Newton . . . . . . . . . . . . . . . . . . . . . . . .
9.2 Approssimazione parabolica . . . . . . . . . . . . . . . . . . .
9.3 Metodo della sezione aurea . . . . . . . . . . . . . . . . . . . .
56
56
57
57
IV
62
7.1
7.2
7.3
Integrazione
63
Estrapolazione di Richardson . . . . . . . . . . . . . . . . . . 63
Integrazione di Romberg . . . . . . . . . . . . . . . . . . . . . 64
Integrazione automatica . . . . . . . . . . . . . . . . . . . . . 66
3
Parte I
Risoluzione di sistemi lineari
4
Consideriamo il sistema lineare Ax = b con A ∈ Rn×n non singolare, simmetrica e definita positiva, cioè tale che:
• A = AT
• ∀x ∈ Rn \ {0} : xT Ax = (Ax, x) > 0
Definizione 1. Sia x ∈ Rn , chiamiamo norma energia di x rispetto alla
matrice A:
√
1
kxkA := (Ax, x) 2 = xT Ax
√
Teorema 1. ∀x ∈ Rn , kxkA = xT Ax è una norma.
Dimostrazione. Sia x ∈ Rn , è evidente che kxkA è ben definita perché
xT Ax > 0 e xT Ax = 0 ⇔ x = 0.
Inoltre ∀α ∈ R si ha:
1
1
kαxkA = (A(αx), αx) 2 = (αAx, αx) 2 =
1
1
= α2 (Ax, x) 2 = |α| (Ax, x) 2 = |α|kxkA .
Resta da dimostrare la disuguaglianza triangolare:
kx + yk2A = (A(x + y), x + y) = (Ax, x) + (Ay, y) + (Ax, y) + (Ay, x) =
= kxk2A + kyk2A + 2 (Ax, y) ,
infatti:
T
(Ay, x) = (Ay, x)T = xT Ay = y T Ax = (Ax, y) .
Poichè la matrice A è simmetrica e definita positiva, per la disuguaglianza
di Cauchy-Schwartz:
1
1
|(Ax, y)| = A 2 x, A 2 y ≤
1
1
2
2
≤ A x, A x A y, A y = kxkA kykA .
1
2
1
2
Quindi
kx + yk2A ≤ kxk2A + kyk2A + 2kxkA kykA = (kxkA + kykA )2 ,
da cui
kx + ykA ≤ kxkA + kykA
5
Capitolo 1
Metodo del gradiente
Risolvere il sistema Ax = b equivale a minimizzare il funzionale dell’energia:
1
1
Φ(y) = y T Ay − y T b = (Ay, y) − (b, y) .
2
2
Infatti, sia y ∈ Rn e x la soluzione di Ax = b allora:
Φ(y) − Φ(x) =
=
=
=
=
=
1
1
(Ay, y) − (b, y) − (Ax, x) + (b, x)
2
2
1
1
(Ay, y) − (Ax, y) − (Ax, x) + (Ax, x)
2
2
1
1
1
1
(Ay, y) − (Ax, y) − (Ax, y) + (Ax, x)
2
2
2
2
1
1
(A(y − x), y) − (Ax, y − x)
2
2
1
(A(y − x), y) − x, AT (y − x)
2
1
(A(y − x), y − x) ≥ 0.
2
Quindi
∀y ∈ Rn
Φ(y) ≥ Φ(x) e Φ(x) = Φ(y) ⇔ x = y
Per cercare il minimo di Φ dobbiamo anzitutto imporre ∇Φ = 0. Scriviamo
allora Φ(y) in componenti, considerando che A = AT .
n
n
n
X
1 XX
Φ(y) =
aik yk yi −
bi y i ,
2 i=1 k=1
i=1
6
dove le aik per i, k = 1, ..., n sono le entrate della matrice A, e deriviamo:
" n
#
n
X
∂Φ
1 X
=
ajk yk +
aij yi − bj =
∂yj
2 k=1
i=1
=
n
X
ajk yk − bj = (Ay)j − bj ,
k=1
che in forma compatta è ∇Φ = Ay − b.
Definizione 2. Chiamiamo allora residuo la quantità r := b − Ay
Allora risulta ∇Φ = −r.
Vogliamo ora definire un metodo iterativo per il calcolo del minimo di Φ(y).
Partendo da un dato x0 , vogliamo trovare delle approssimazioni xk+1 del
minimo assoluto in modo che xk+1 sia il minimo di Φ lungo una direzione pk
che passa per xk . Sia quindi xk+1 = xk + αk pk , dove αk è tale che Φ(xk+1 )
sia minimo nella direzione pk . Calcoliamo αk :
1
Φ(xk+1 ) = Φ(xk + αk pk ) = (xk + αk pk )T A (xk + αk pk ) − (xk + αk pk )T b
2
1 2 T
1
1
1
= αk pk Apk + αk pTk Axk + xTk Axk + αk xTk Apk − xTk b − αk pTk b
2
2
2
2
1
1 2 T
1
= αk pk Apk + αk pTk Axk + xTk Apk + xTk Axk − xTk b − αk pTk b
2
2
2
1 2 T
1
= αk pk Apk + αk pTk Axk + xTk Axk − xTk b − αk pTk b.
2
2
e quindi
dΦ
= αk pTk Apk + pTk Axk − pTk b.
dαk
0
Imponendo Φ = 0, si ha:
αk =
pTk b − pTk Axk
pTk Apk
00
poichè Φ > 0 =⇒ αk è minimo relativo. Ponendo rk = b − Axk si ha:
αk =
pTk rk
pTk Apk
Il metodo del gradiente si ottiene scegliendo come direzioni di discesa
pk = rk ,
che risultano essere le direzioni locali di massima pendenza.
7
1.1
Metodo iterativo
Dato x0
r0 = b − Ax0
r0 T r0
r0 T Ar0
x(1) = x0 + α0 r0
Al passo k, per k = 1, 2, . . . :
rk = b − Axk
α0 =
αk =
xk+1
rk T rk
rk T Ark
= xk + αk rk
dove il maggior peso computazionale è dovuto ai 2 prodotti matrice*vettore
che devono essere eseguiti ad ogni passo.
Poichè xk = xk−1 + αk−1 rk−1 , allora
rk = b − Axk = b − Axk−1 − Aαk−1 rk−1 = rk−1 − αk−1 Ark−1 .
Se riscriviamo il metodo utilizzando quest’ultima relazione il costo computazionale si riduce di un prodotto matrice*vettore per iterazione; otteniamo
cosı̀ il sequente algoritmo avendo eliminato gli indici per evidenziare il reale
utilizzo di risorse di memoria:
Dato x, calcolo
r = b − Ax
rT r
rT Ar
x = x + αr.
α=
al passo generico:
w = Ar
r = r − αw
rT r
rT w
x = x + αr
α=
Eliminare gli indici permette comunque di valutare la norma di xk+1 − xk
necessaria per il test d’arresto perchè uguale a kαrk.
8
1.2
Errore e convergenza
Per dimostrare il risultato sulla convergenza del metodo del gradiente, abbiamo bisogno di vedere prima alcuni lemmi.
Consideriamo una matrice A generica non singolare, con autovalori |λ1 | < . . . < |λn |.
Ricordiamo che il raggio spettrale di A è ρ(A) := max |λi |, allora si ha che:
i=1,...,n
p
Lemma 1. Sia A ∈ Rn×n , allora kAk2 = ρ(AT A)
Dimostrazione. essendo AT A simmetrica e definita positiva, allora è diagonalizzabile, e dunque
∃ U , unitaria
quindi:
kAxk22
T
T
:
U T AT AU = diag{λ1 , . . . , λn },
T
T
T
T
T
T
T
= x A Ax = x U U A AU U x = y U A AU y =
n
X
λi yi2
i=1
dove y = U T x verifica kyk2 = kxk2 perchè U è unitaria. Abbiamo dunque:
sP
kAxk2
λ y2 p
P i 2 i ≤ ρ(AT A).
kAk2 = sup
= sup
yi
x6=0 kxk2
y6=0
inoltre se prendiamo y = ek k-esimo versore di Rn dove k è l’indice di λk =
ρ(AT A), nella disuguaglianza precedente vale proprio l’uguaglianza; da cui
la tesi.
Come conseguenza immediata, si ha che se A è simmetrica, allora kAk2 =
ρ(A2 ) e quindi, se A è anche definita positiva, il condizionamento in norma
2 di A si può calcolare come K2 (A) = kAk2 kA−1 k2 = λλn1 .
Lemma 2. Sia A simmetrica e definita positiva. Consideriamo il metodo
di Richardson: x̃k+1 = x̃k + αott r̃k con parametro ottimale (cioè quello che
massimizza la velocità di convergenza), allora si ha:
kẽk+1 k2 ≤
λn − λ1
kẽk k2 .
λn + λ1
Dimostrazione. Cerchiamo la matrice B di iterazione del metodo di Richardson:
x̃k+1 = x̃k + α [b − Ax̃k ] = (I − αA) x̃k + αb
quindi B = I − αA, ha autovalori dati da 1 − αλi e quindi il valore ottimale
di α sarà tale che:
−1 + αλn = 1 − αλ1 , da cui α =
9
2
.
λ1 + λn
Figura 1.1: Andamento degli autovalori di B al variare di α, la linea spessa
evidenzia il raggio spettrale.
Quindi
λ1 − λn λn − λ1
2
=
ρ(Bott ) = 1 −
λn = < 1.
λ1 + λn λ1 + λn λn + λ1
Perciò il metodo è convergente e la formula dell’errore sarà data da:
ek+1 = Bott ek , da cui:
kẽk+1 k2 ≤ kBott k2 kek k2 .
p
T
Bott ) = ρ(Bott ), da cui la tesi.
Per il lemma 1: kBott k2 = ρ(Bott
Teorema 2. Se A è simmetrica e definita positiva il metodo del gradiente
converge ∀x(0) ∈ Rn e
k2 (A) − 1
kek kA .
k2 (A) + 1
kek+1 kA ≤
Dimostrazione. Indicando con ẽ(k+1) l’errore della soluzione ottenuta con un
passo del metodo di Richardson partendo dalla soluzione k-esima del metodo
del gradiente, dalla definizione di Bott otteniamo
1
1
1
1
1
1
1
1
1
A 2 ẽk+1 = A 2 Bott ek = A 2 (I−αott A 2 A 2 )ek = (I−αott A 2 A 2 )A 2 ek = Bott A 2 ek
e quindi, passando alle norme, e sfruttando il lemma precedente:
kẽk+1 kA ≤ kBott k2 kek kA =
10
k2 (A) − 1
kek kA
k2 (A) + 1
Poichè l’iterata xk+1 del metodo del gradiente minimizza l’errore sulla direzione xk + αrk allora minimizza anche la sua norma A e dunque:
kek+1 kA ≤ kẽk+1 kA ≤
in particolare essendo
k2 (A) − 1
kek kA ,
k2 (A) + 1
k2 (A) − 1
< 1 il metodo del gradiente è convergente.
k2 (A) + 1
Osserviamo che si avrà una buona velocità di convergenza se λλn1 è piccola,
quindi se gli autovalori sono vicini. Sperimentalmente si osserva anche che
il numero di iterazioni dipende dal dato iniziale. Questo fatto può essere
visualizzato facilmente nel caso di un sistema lineare 2 × 2. In questo caso,
infatti, le linee di livello di Φ(y) sono delle ellissi concentriche la cui eccentricità è legata al rapporto tra i due autovalori della matrice (e quindi al suo
indice di condizionamento). Nel caso di matrice mal condizionata, le linee
di livello sono molto allungate e quindi per alcune scelte di x0 la successione
delle soluzioni avanza a zig-zag e quindi la convergenza è lenta (vedere figura
seguente), per altre scelte del dato iniziale (per esempio se x0 è vicino al
semiasse minore delle ellissi) la convergenza risulta invece essere veloce.
Figura 1.2: Grafici di convergenza del metodo del gradiente, caso a zig-zag
(primo grafico) e convergenza veloce (secondo grafico)
11
Capitolo 2
Metodo del gradiente coniugato
Definizione 3. Una direzione q ∈ Rn si dice ottimale rispetto alla direzione
p se ∀λ ∈ R: Φ(q) ≤ Φ(q + λp). Se q è ottimale rispetto a tutte le direzioni
di uno spazio vettoriale V allora q è ottimale rispetto a V .
Dalla definizione si deduce che Φ ristretta a q + λp al variare di λ, ammette
deve annullarsi per λ = 0.
minimo per λ = 0, quindi la derivata parziale ∂Φ
∂λ
∂Φ
∂ 1
T
T
(q + λp) =
(q + λp) A(q + λp) − (q + λp) b
∂λ
∂λ 2
1 T
1 T
1 2 T
∂ 1 T
T
T
q Aq + q Aλp + λp Aq + λ p Ap − q b − λp b
=
∂λ 2
2
2
2
q T Ap pT Aq 2λpT Ap
=
+
+
− pT b = pT Aq + λpT Ap − pT b.
2
2
2
Imponendo
∂Φ
(q + λp)|λ=0 = 0, risulta:
∂λ
pT Aq − pT b = 0
⇔
pT (Aq − b) = 0
⇔
pT rq = 0
⇔
p ⊥ rq .
Ora l’iterata xk+1 = xk + αk rk del metodo del gradiente è tale che Φ(xk+1 ) ≤
Φ(xk+1 + λrk ) e dunque rk ⊥ rk+1 . Verifichiamo che ciò è vero:
rk+1 = b − Axk+1 = b − A (xk + αk rk ) = b − Axk − αk Ark = rk − αk Ark .
=⇒ (rk+1 , rk ) = (rk , rk ) − αk (Ark , rk ) == rk T rk −
rk T rk T
rk Ark = 0.
rk T Ark
Quindi rk ⊥ rk+1 .
Al passo successivo, si avrà rk+1 ⊥ rk+2 , ma rk 6⊥ r(k+2) e dunque la soluzione
non mantiene l’ottimalità rispetto alle direzioni precedenti.
12
Ci chiediamo allora se è possibile scegliere le direzioni pk in modo da mantenere la condizione di ottimalità , e quindi si dovrà garantire che:
rk ⊥ r(i)
∀i = 0, ..., k − 1.
Consideriamo dunque il nostro schema iterativo:
pk T rk
pk T Apk T
cosı̀ che xk+1 sia ottimale rispetto a pk , e quindi rk+1 ⊥ pk ∀k (in particolare
varrà che rk ⊥ pk−1 ).
Imponiamo ora che xk+1 rimanga ottimale rispetto a pk−1 , e quindi rk+1 ⊥
pk−1 :
rk+1 ⊥ pk−1 ⇐⇒ rk+1 T pk−1 = 0;
xk+1 = xk + αk pk
con αk =
e quindi
T
rk+1
pk−1 = rkT pk−1 − α(Apk )T pk−1 = −α(Apk )T pk−1 = 0 ⇐⇒ pTk Apk−1 = 0
deve quindi valere questa specie di ”ortogonalità”, diremo allora che pk deve
essere A-coniugato a pk−1 .
Scegliendo le direzioni pk tutte A-coniugate, si ottiene il metodo del gradiente
coniugato.
2.1
Generare le direzioni di discesa
Usiamo il processo di ortogonalizzazione di Gram-Schmidt. Bisogna che pi
sia tale che pi T Apj = 0 con j = 0, ..., i − 1. Allora poniamo p0 = r0 e in
generale
k−1
X
pk = rk +
γi pi ,
i=0
dove i γi devono garantire la condizione A-coniugio con le direzioni precedenti. Per i = 1 si ha:
p1 T Ap0 = 0 = r1 T Ap0 + γp0 T Ap0
r1 T Ap0
,
=⇒ γ = − T
p0 Ap0
e, in generale, ne deduciamo:
pk = rk −
k−1
X
rk T Api
i=0
13
pi T Api
pi ,
Poichè rk+1 = rk − αk Apk , allora possiamo scrivere Apk = −
dunque
rk+1 − rk
e
αk
ri+1 − ri
αi
Vediamo ora che con questa scelta i residui sono tra loro ortogonali per tutti
i passi. Infatti:
rk T Api = rk T
r1 T r0 T
r0 Ar0 = 0
r0 T Ar0
allora facciamo l’ipotesi induttiva che rk ⊥ rj ∀j < k e dimostriamo l’ortogonalità per il residuo rk+1 :
per k = 1 si ha r1 T r0 = r0 T r0 −
rk T pk T
pk Ark = rk T rk − rk T pk = rk T rk − rk T (rk −
• rk+1 rk = rk rk − T
pk Apk
X
T
γi pi ) = rk rk − rk T rk = 0
T
T
i<k−1
avendo
sfruttato la condizione di A-coniugio e pTk Ark = pTk A(pk −
X
γi pi ) = pTk Apk .
i<k−1
T
• rk+1
rj = rkT rj − αk rjT Apk = 0
avendo sfruttato l’ipotesi induttiva e rjT Apk = (pj −
X
γi pi )T Apk = 0
i<j−1
per l’A-coniugio.
Tornando quindi alla definizione dei γi , sfruttando l’ortogonalitá dei residui,
otteniamo che sono tutti nulli tranne il k-esimo. Risulta quindi:
pk = rk −
rkT Apk−1
pk−1 .
pTk−1 Apk−1
dunque una formula ricorsiva molto efficiente che non mi costringe a memorizzare tutte le direzioni pj j ≤ k per poter calcolare pk+1 .
14
2.2
Metodo iterativo.
Dato x0
p0 = r0 = b − Ax0
z0 = Ap0
p0 T r0
α0 = T
p0 z0
x1 = x0 + α0 p0
r1 = r0 − α0 z0
r1 T z0
γ1 = T
p0 z0
p1 = r1 − γ1 p0
Al passo k, togliendo gli indici:
z = Ap
rT p
pT z
x = x + αp
r = r − αz
α=
zT r
pT z
p = r − γp
γ=
Ogni iterata costa come un’iterata del metodo del gradiente, piú un prodotto
scalare, (cioè n operazioni in piú). Possiamo, però, modificare il calcolo di α
e γ.
αk =
γk+1
rkT rk − rkT γk pk−1
krk k22
rkT pk
=
=
.
pTk Apk
pTk Apk
pTk Apk
rk − rk+1
1
T
rk+1
− krk+1 k22
T
r Apk
−krk+1 k22
αk
αk
= k+1
=
=
=
.
krk k22
pTk Apk
pTk Apk
pTk Apk
In questo modo ho solo bisogno del calcolo della krk+1 k, che però è comunque
necessaria per il test d’arresto, risparmio quindi un prodotto scalare per ogni
iterazione.
15
2.3
Errore e convergenza
Verifichiamo che il metodo non si arresta se non perché ha calcolato la soluzione esatta. Il procedimento termina se xk+1 = xk e questo puó succedere
se:
• αk = 0 ma allora:
αk = 0 ⇐⇒ (rk , rk ) = 0 ⇐⇒ rk = 0
e dunque al passo k abbiamo ottenuto la soluzione esatta.
• pk+1 = 0 ma allora
pk+1 = 0 ⇒ pk =
1
βk+1
rk+1 ⇒ pk //rk+1
ma pk ⊥ rk+1 e quindi rk+1 = 0, cioé xk+1 é la soluzione esatta.
In generale il metodo del gradiente coniugato converge al più dopo n passi;
infatti se il metodo non si interrompe prima il residuo (n + 1)-esimo sará
nullo perché deve essere ortogonale a tutti gli n residui precedenti. A causa
degli errori di arrotondamento può però succedere che servano in piú di n
passi perché le direzioni calcolate non sono esattamente A-coniugate tra loro.
Riassumiamo le proprietá del metodo del gradiente coniugato.
Teorema 3. Se A é simmetrica e definita positiva e xk 6= x∗ soluzione esatta
del sistema lineare, allora vale che:
1. rk ⊥ r(j)
2. pk T Apj = 0
∀j < k
∀j < k e pk 6= 0 a meno che xk = x∗
3. {r0 , r1 , ..., rk } = {r0 , Ar0 , A2 r0 , ..., Ak r0 } = Kk (r0 , A)
4. {p0 , p1 , ..., pk } = {r0 , Ar0 , A2 r0 , ..., Ak r0 } = Kk (r0 , A)
5. r(i) ∈ {p0 , p1 , ..., pk } i = 0, · · · , k, Api ∈ {p0 , p1 , ..., pk } i = 0, · · · , k−1
dove Kk (r0 , A) prende il nome di spazio di Krylov di ordine k generato da r0
e A.
16
Dimostrazione. I punti 1 e 2 sono giá stati dimostrati nelle pagine precedenti,
il punto 5 è facilmente deducibile dai punti 3 e 4.
I punti 3 e 4 li dimostriamo per induzione. Per k = 0 le uguaglianze sono
banalmente vere. Supponiamo quindi che valgano per k e le dimostriamo per
k + 1:
P
P
sia x ∈ {r0 , r1 , ..., rk+1 } allora x =
i≤k νi r(i) + νk+1 rk+1 =
i≤k ηi pi +
νk+1 (pk+1 − γk pk ) ∈ {p0 , p1 , ..., pk+1 }
P
P
viceversa, sia y ∈ {p0 , p1 , ..., pk+1 } allora y = i≤k δi pi +δi+1 pi+1 = i≤k βi r(i) +
δi+1 (r(i+1) + γk pk ) ∈ {r0 , r1 , ..., rk+1 }.
Quindi
{p0 , p1 , ..., pk+1 } = {r0 , r1 , ..., rk+1 }
P
P
Sia ora x ∈ {p0 , p1 , ..., pk+1 } allora x = i≤k ηi pi + ηi+1 pi+1 = i≤k ςi Ai r0 +
ηi+1 (rk − αk Apk + γk pk ) ∈ Kk+1 (r0 , A) P
P
Viceversa, se x ∈ Kk+1 (r0 , A) allora x = i≤k σi Ai r0 +σi+1 Ai+1 r0 = i≤k i pi +
P
r −r
σi+1 A i≤k ρi pi ∈ {p0 , p1 , ..., pk+1 } in quanto Api = (i) αi(i+1) ∈ {p0 , p1 , ..., pk+1 }
e dunque
{p0 , p1 , ..., pk+1 } = Kk+1 (r0 , A)
Lo spazio di Krylov Kk (r0 , A) ha al più dimensione s se la matrice A ha s
autovalori distinti e di conseguenza la convergenza alla soluzione esatta si ha
al più in s passi perchè la (s+1)-esima direzione coniugata non può che essere
nulla dovendo essere A-coniugata alle precedenti e quindi siamo arrivati alla
soluzione esatta per la dimostrazione precedente.
Dimostrazione.
Sia mi la molteplicità algebrica dell’autovalore λi (dunque
Ps
i=1 mi = n) , allora possiamo scrivere


λ1 Im1

 T
λ2 Im2
U
A = U ΛU T = U 


...
λs Ims
dove le colonne di U sono gli autovettori di A ortonormali.
Possiamo allora riscrivere lo spazio di Krylov come:
Ks (r0 , A) = {r0 , Ar0 , ..., As r0 } = {U U T r0 , U ΛU T r0 , ..., (U ΛU T )s r0 } =
17
U {z, Λz, ..., Λs z}
dove z = U T r0 e notando che (U AU T )s = (U ΛU T )(U ΛU T )...((U ΛU T ) =
U Λs U T .
Consideriamo ora il polinomio p̃ di grado s definito da:
p̃s (λ) = (λ − λ1 )(λ − λ2 )...(λ − λs ) = y0 + y1 λ + y2 λ2 + ... + ys λs
che si annulla
in λi i = 1, ..., s e dove ys = 1 6= 0.
P
Sia y = si=0 yi Λi z, allora
 Ps
( i=0 yi λi1 )Im1 P
s
X

( si=0 λi2 )Im2
y=(
yi Λi )z = 

...
i=0

(
Ps
i=0
λis )Ims

z = 0

P
perchè si=0 yi λik = p̃(λk ) = 0 k = 1, .., s.
Quindi i vettori z, Λz, Λ2 z, ..., Λs z non sono linearmente indipendenti e quindi
lo spazio che generano non può essere di dimensione s + 1.
Applicando questo risultato al caso z = U T r0 , otteniamo la tesi.
Teorema 4. Il metodo del gradiente coniugato converge al piú in n passi.
Inoltre:
2ck
ke0 kA
kek kA ≤
1 − c2k
p
k2 (A) − 1
dove c = p
.
k2 (A) + 1
Dimostrazione. Iniziamo con alcuni risultati che riguardano i polinomi di
Chebyshev.
√
√
• Tk (x) = 12 (x + x2 − 1)k + (x − x2 − 1)k
Dimostrazione per induzione : verifica banale per k = 0 e k = 1,
supponiamo vero per k, allora
18
√
x2 − 1)k + (x − x2 − 1)k
Tk+1 = 2xTk − Tk−1 = 2x
2
√
√
k−1
2
2
(x + x − 1)
+ (x − x − 1)k−1
=
−
2 √
√
x2 − 1 + 2x x2 − 1 + x2
(x + x2 − 1)k−1 (
)+
2 √
√
x2 − 1 − 2x x2 − 1 + x2
)=
(x − x2 − 1)k−1 (
2
√
√
√
√
(x + x2 − 1)k−1 (x + x2 − 1)2 + (x − x2 − 1)k−1 (x − x2 − 1)2
2
(x +
√
In particolare notiamo che quest’ultima formula permette di calcolare
i polinomi di Chebyshev fuori dall’intervallo [−1, 1].
1
• il polinomio 2n−1
Tn (x) è il polinomio monico con la più piccola norma
1
1
del massimo in [−1, 1] e vale che k 2n−1
Tn (x)k∞ = 2n−1
.
Dimostrazione: per assurdo supponiamo esista un polinomio monico
1
, allora il polinomio
q(x) con norma del massimo più piccola di 2n−1
1
q(x) − 2n−1 Tn (x) è un polinomio di grado n − 1 (differenza di polinomi
monici, quindi il termine xn si semplifica) che sicuramente nei nodi
xk = cos( kπ
) k = 0, ..., n continua ad alternare il segno, quindi deve
n
avere almeno n zeri, ma allora,essendo di grado n − 1, deve essere
identicamente nullo, da cui l’assurdo.
(b+a)−2x
Tn
b−a
è tra tutti i polinomi di grado n tali che
• il polinomio
b+a
Tn b−a
p(0) = 1 quello con la più piccola norma del massimo
sull’intervallo
[a, b]
(b+a)−2x
Tn
b−a
1
k∞ = |
|
con a e b di segno concorde e vale che k
b+a
b+a
Tn b−a
Tn b−a
perchè |Tn (x)| ≤ 1 in [a, b].
Dimostrazione: per assurdo sia q(x) un polinomio tale che
q(0) = 1 e
Tn (b+a)−2x
b−a
1
kqk∞ < |
|
allora
il
polinomio
r(x)
=
q(x)
−
è
b+a
Tn b+a
T
n
b−a
b−a
(b − a) cos( kπ
) − (a + b)
n
un polinomio che nei nodi xk =
k = 0, ..., n
2
continua ad alternare il segno e quindi ammette n radici in [a, b]. Per
definizione però r(0) = 0 e 0 6∈ [a, b] se a e b hanno segno concorde.
19
Quindi r(x) sarebbe un polinomio di grado n con n + 1 radici e quindi
deve essere il polinomio nullo, da cui l’assurdo.
Passiamo ora alla dimostrazione del teorema di convergenza. Abbiamo visto
in precedenza che il metodo del gradiente rende minimo il funzionale φ(x) nel
sottospazio generato dalle direzioni A-coniugate a partire
da x(0) , quindi xk+1
è il minimo di φ(x) in x0 + {p0 , p1 , ..., pk } = x0 + r0 , Ar0 , A2 r0 , ..., Ak r0 .
P
Quindi xk+1 = x(0) + ki=0 γi Ai r0 = x(0) + Pk (A)r0 dove Pk (x) è il polinomio
di grado k con coefficienti dati dai γi .
Quindi, se x∗ è la soluzione esatta del sistema abbiamo che xk+1 − x∗ =
x0 −x∗ +Pk (A)(b−Ax0 ) = x0 −x∗ +Pk (A)A(x∗ −x0 ) = (I −Pk (A)A)(x0 −x∗ )
e dunque
kxk+1 − x∗ k2A = (xk+1 − x∗ )T A(xk+1 − x∗ ) = k(I − Pk (A)A)(x0 − x∗ )k2A
Supponiamo ora che A sia diagonalizzabile con autovaloriP
λ1 < λ2 < ... < λn
∗
ed autovettori ortonormali u1 , u2 , ..., un , allora x0 − x = ni=1 ci ui e dunque
kx0 − x∗ k2A =
n
X
ci uTi A
i=1
n
X
cj u j =
j=1
n
X
c2i λi
i=1
e
(x0 − x∗ )T (I − Pk (A)A)T A(I − Pk (A)A)(x0 − x∗ )T
n
n
X
X
T
=
ci (1 − pk (λi )λi )ui
cj (1 − pk (λj )λj )λj uj
=
i=1
n
X
j=1
c2i (1 − pk (λi )λi )2 λi ≤ kx0 − x∗ k2A max(1 − pk (λi )λi )2
λi
i=1
In definitiva vale che
kxk+1 − x∗ kA ≤ kx0 − x∗ kA max(1 − pk (λi )λi )
λi
≤ kx0 − x∗ kA
min
p∈Pk+1 t.c.p(0)=1
max |p(λi )|
λi
dove l’ultima disuguaglianza è dovuta al fatto che xk+1 minimizza il funzionale φ(x) sullo spazio di Krylov e quindi minimizza anche F (x) = Φ(x) −
Φ(x∗ ) = 21 (x − x∗ )T A(x − x∗ ) = 12 kx − x∗ kA . Utilizzando ora i risultati sui
polinomi di Chebyshev otteniamo
20
kxk+1 − x∗ kA ≤ max |
Tk+1
λi
=
|Tk+1
Tk+1
1
λ1 +λn
λn −λ1
λ1 +λn −2λ
λn −λ1
λ1 +λn
λn −λ1
|kx0 − x∗ kA
kx0 − x∗ kA
|
Ora vale che
Tk+1

λ1 + λn
λn − λ1
= Tk+1
s
2
1  K2 (A) + 1
+

2
K2 (A) − 1

 K2 (A) + 1 −
K2 (A) − 1
K2 (A) + 1
K2 (A) − 1
s
K2 (A) + 1
K2 (A) − 1
K2 (A) + 1
K2 (A) − 1
2
=
k+1
− 1
+
k+1 

− 1 
 p
!k+1
!k+1 
p
K2 (A) + 1
K2 (A) − 1
1

+ p
=  p
2
K2 (A) − 1
K2 (A) + 1
1 k+1
1
c2(k+1) + 1
=
c
+ k+1 =
2
c
2ck+1
Sperimentalmente si vede che la velocitá di convergenza non é costante, ma
è bassa nei primi passi, poi soddisfa la stima teorica e quindi accelera negli
ultimi passi.
2.4
Metodo del gradiente coniugato precondizionato
Precondizionare un sistema lineare Ax = b significa trovare una matrice P
tale che P −1 A abbia condizionamento minore di A; in questo modo la convergenza di uno schema iterativo applicato al sistema equivalente P −1 Ax = P −1 b
é piú veloce.
La matrice P −1 A può essere meglio condizionata di A, ma non é piú simmetrica, quindi questo metodo di precondizionamento non può essere scelto se
21
si vuol utilizzare il metodo del gradiente coniugato. Procediamo allora nel
modo seguente: decomponiamo P , anch’essa simmetrica e definita positiva,
1
1
in P 2 P 2 ; il sistema di partenza è equivalente a:
−1
1
1
P 2 AP − 2 y = P − 2 b
1
P −2 y = x
1
1
con k2 (P − 2 AP − 2 ) < k2 (A).
Poniamo:
1
1
à := P − 2 AP − 2
1
b̃ := P − 2 b.
Applichiamo il metodo del gradiente coniugato al sistema precondizionato.
Otteniamo:
dato y0 ,
r̃0 = b̃ − Ãy0 = p̃0
Al passo k:
(p̃k , r̃k )
αk = p̃k , Ãp̃k
yk+1 = yk + αk p̃k
r̃k+1 = r̃k − αk Ãp̃k
r̃k+1 , Ãp̃k
βk+1 = p̃k , Ãp̃k
p̃k+1 = r̃k+1 − βk+1 p̃k
Questo metodo non è però molto conveniente, richiede infatti il calcolo di
1
P 2.
1
1
Vogliamo evitare che nello schema iterativo compaia P − 2 . Poichè x = P − 2 y,
1
dato y0 risulta x0 = P − 2 y0 , inoltre:
1
1
1
1
1
1
1
r̃0 = P − 2 b − P − 2 AP − 2 y0 = P − 2 (b − AP − 2 y0 ) = P − 2 (b − Ax0 ) = P − 2 r0
1
Moltiplicando la relazione yk+1 = yk + αk p̃k per la matrice P − 2 si ha xk+1 =
1
xk + αk P − 2 p̃k .
1
Posto pk := P −h2 p̃k si ottiene xk+1 i= xk + αk pk .
1
Moltiplicando r̃k+1 = r̃k − αk Ãp̃k per la matrice P 2 si ha rk+1 = rk −
1
αk AP − 2 p̃k = rk − αk APk .
22
1
Infine moltiplicando [p̃k+1 = r̃k+1 − βk+1 p̃k ] per la matrice P − 2 si ha pk+1 =
1
1
1
P − 2 r̃k+1 − βk+1 pk ; ora I = P − 2 P 2 e quindi possiamo eliminare r̃k+1 : pk+1 =
P −1 rk+1 − βk+1 pk .
Quindi:
xk+1 = xk + αk pk
rk+1 = rk − αk Apk
pk+1 = P −1 rk+1 − βk+1 pk
Restano da convertire αk e βk :
αk = βk+1 =
(r̃k , r̃k )
p̃k , Ãp̃k
=
1
1
P − 2 rk , P − 2 rk
1
1
1
1
P 2 pk , P − 2 AP − 2 P 2 pk
=
(P −1 rk , rk )
(pk , Apk )
(r̃k+1 , r̃k+1 )
(P −1 rk+1 , rk+1 )
=
(r̃k , rk )
(P −1 rk , rk )
1
1
quindi anche αk e βk risultano indipendenti da r̃, P 2 , P − 2 e dipendono solo
dalle direzioni del sistema non precondizionato. Quindi dato x:
r = b − Ax
z = P −1 r
p=z
c = zT r
α=
c
p(k)
T Ap
(k)
x = x + αp
r = r − αAp
z = P −1 r
C = zT r
C
β=
c
p = z + βp
c=C
Ad ogni passo si deve calcolare in più z = P −1 r, ma la convergenza è più
rapida perchè vale la formula del fattore di convergenza già vista, ma la
matrice A è sostituita da P −1 A, meglio condizionata.
23
2.4.1
Matrici di precondizionamento algebriche.
Vediamo ora come si possono costruire delle matrici di precondizionamento.
In particolare vediamo come ottenerle sfruttando solo le proprietà algebriche
della matrice del sistema, altre tecniche si basano su discretizzazioni diverse
del problema matematico associato al sistema da risolvere, ma sono troppo
specifiche per poter essere trattate in questo contesto.
La caratteristica principale della matrice di precondizionamento è che il sistema associato deve poter essere risolto con un costo computazionale ridotto
(altrimenti tanto varrebbe risolvere direttamente il sistema di partenza con
un metodo diretto), quindi tutti i metodi che vedremo puntano a minimizzare
questo aspetto. Il fatto che si introducano svariate tecniche di precondizionamento (ne verranno riportate solo alcune) è giustificato dal fatto che a
seconda del tipo di matrice da precondizionare può funzionare bene una tecnica piuttosto che un’altra e quindi a seconda dei casi bisogna provare per
trovare la matrice di precondizionamento che funziona meglio nel caso in
esame.
• matrice diagonale: la matrice di precondizionamento può essere ottenuta utilizzando la sola diagonale di A. In questo caso il costo computazionale del sistema della matrice di precondizionamento è minimo, ma
non sempre è molto efficace; in genere si usa per matrici diagonalmente
dominanti. Una variante di questa tecnica è di costruire un precondizionatore diagonale i cui elementi sono dati dalla norma 2 delle righe
di A.
• fattorizzazioni incomplete: si scrive la matrice di precondizionamento
come P = L̃Ũ dove le matrici L̃ e Ũ sono costruite fattorizzando Acon
una tecnica standard, ma imponendo che gli elementi di L̃ e Ũ siano
nulli se l’elemento corrispondente di A è nullo. Ovviamente non ha
senso usare questa tecnica se A è piena (caso peraltro in cui i metodi
iterativi in genere sono sconsigliati). Il costo computazionale della risoluzione del sistema della matrice di precondizionamento è in questo
caso equivalente al prodotto di A per un vettore e quindi piuttosto basso se A è sparsa. Ovviamente se si vuole utilizzare questa tecnica per
il metodo del gradiente o gradiente coniugato si dovrà utilizzare una
fattorizzazione L̃L̃T . Possibili varianti si ottengono imponendo che gli
elementi di L̃ e Ũ siano nulli se l’elemento corrispondente di A è nullo
solo se il loro valore è al di sotto di una certa soglia. In questo modo
la fattorizzazione non ha più le stesse caratteristiche di sparsità di A,
ma sarà più vicina alla fattorizzazione esatta.
24
• approssimazione dell’inversa: si costruisce P −1 ' A−1 nel seguente
modo; decomponiamo A = D − C dove D è facilmente invertibile (per
esempio la diagonale di A), allora A = (I − CD−1 )D e quindi A−1 =
D−1 (I − CD−1 )−1 = D−1 (I + CD−1 + (CD−1 )2 + (CD−1 )3 + · · · ).
Definiamo allora
P −1 = D−1 (I + CD−1 + (CD−1 )2 + · · · (CD−1 )l )
se la serie converge (quindi se ρ(CD−1 ) < 1)) più l è grande e più P −1
si avvicina a A−1 .
25
Capitolo 3
Schemi tipo gradiente
coniugato per matrici generiche
Abbiamo visto che nel metodo del gradiente coniugato xk+1 ∈ {x0 +Kk (r(0) , A)}
e che rk+1 ⊥ Kk (r(0) , A). Possiamo quindi riscrivere il gradiente coniugato
come un metodo di proiezione nel seguente modo:
dato x0 cerco xk+1 ∈ {x0 + Kk (r(0) , A)} tale che rk+1 ⊥ Kk (r(0) , A)
dove la condizione di ortogonalità impone i vincoli di proiezione.
L’idea può essere estesa, nel seguente modo:
dato x0 cerco x̃ ∈ x0 + Vk tale che (b − Ax̃) ⊥ Wk
dove Vk e Wk sono due sottospazi di Rn di dimensione k.
Diremo che il problema è di proiezione ortogonale (o Galerkin) se Vk ≡ Wk
e di proiezione obliqua (o Petrov-Galerkin) se Vk 6≡ Wk .
Formalmente il problema precedente si può risolvere nel seguente modo: siano
Vk eWk due matrici le cui colonne sono basi rispettivamente di Vk e W, allora
x̃ = x0 + Vk y dove y ∈ Rk è tale che WkT (b − Ax̃) = WkT (r0 + AVk y) = 0
(r0 = b − Ax0 ) da cui:
WkT r0 = WkT AVk y
⇒
y = − WkT AVk y
−1
WkT r0
e quindi
x̃ = x0 − Vk (WkT AVk )−1 WkT r0
Ovviamente il tutto funziona se la matrice Ap = WkT AVk , detta matrice
proiettata, è non singolare e quindi invertibile.
26
Teorema 5. La matrice Ap è non singolare per ogni scelta delle basi per Vk
e Wk se vale che:
• A è definita positiva e Wk = Vk
• A è non singolare e Wk = AVk
Dimostrazione.
• siccome Wk = Vk allora la base Wk può essere scritta come combinazione lineare della base Vk e quindi esiste una matrice G non singolare
tale che Wk = Vk G. Dunque Ap = GT VkT AVk è non singolare perchè
prodotto di due matrice non singolari (VkT AVk è non singolare perchè
A è definita positiva).
• siccome Wk = AVk allora la base Wk può essere scritta come combinazione lineare di A per moltiplicata per la base Vk e quindi esiste una matrice G non singolare tale che Wk = AVk G. Dunque Ap = GT (VkT A2 Vk )
è non singolare perchè prodotto di matrici non singolari (A2 è definita
positiva se A è non singolare).
Nel caso di matrice A simmetrica e definita positiva e Wk = Vk , abbiamo già caratterizzato la soluzione del problema come minimo del funzionale
dell’energia (metodo del gradiente coniugato). Vediamo ora che vale:
Teorema 6. Se A è una matrice quadrata e Wk = AVk allora x̃ è tale che
kb − Ax̃k2 = min kb − Axk2
x∈x0 +Vk
Dimostrazione.
kb − Axk22 = (b − Ax, b − Ax) = (b − Ax ± Ax̃, b − Ax ± Ax̃) = (b − Ax̃, b −
Ax̃) + (A(x̃ − x), A(x̃ − x)) − (b − Ax̃, A(x̃ − x)) − (A(x̃ − x), b − Ax̃) =
(b − Ax̃, b − Ax̃) + (A(x̃ − x), A(x̃ − x) = kb − Ax̃k22 + kA(x̃ − x)k22
avendo sfruttato l’ortogonalità di b − Ax̃ rispetto a Wk = AVk . Dunque
kb − Axk2 ≥ kb − Ax̃k2
e l’uguaglianza si ha solo se kA(x̃ − x)k2 è nulla. Quindi se A è non singolare
il minimo si raggiunge solo se x ≡ x̃.
27
Studiamo ora il caso di Vk = Kk (r(0) , A) e Wk = AVk . Abbiamo quindi
bisogno di determinare una base Vk ed in particolare costruiamo una base ortonormale utilizzando una generalizzazione del processo di Gram-Smith
noto come metodo di Arnoldi (notare che non possiamo usare come base i vettori {r0 , Ar0 , . . . , Ak r0 } perchè tendono ad allinearsi all’autovettore associato
all’autovalore di modulo massimo). Indichiamo con vi la i-esima funzione di
base (i-esima colonna di Vk ), allora costruiamo iterativamente le vi a partire
r(0)
nel seguente modo
da v1 = kr(0)
k2
i−1
X
T
ṽi = Avi−1 −
AT vj )vj
(vi−1
j=1
vi =
ṽi
kṽi k2
Si verifica allora facilmente che vi ∈ Ki (r(0) , A) e che è ortogonale a vk k < i.
Infatti v2T v1 = v1T AT v1 − v1T AT v1 v1T v1 = 0, facciamo allora l’ipotesi induttiva
che la condizione di ortogonalità valga fino all’indice i − 2 allora
viT vk
=
T
vi−1
AT vk
−
i−1
X
(vi−1 AT vj )vjT vk =
j=1
T
vi−1
AT vk −
i−1
X
T
T
(vi−1 AT vj )δj,k = vi−1
AT vk − vi−1
A T vk = 0
j=1
T
Se ora indichiamo con hj,i−1 = vi−1
AT vj j < i e hi,i−1 = kv˜v˜iik2 allora dalla
P
relazione precedente ricaviamo che Avi−1 = ij=1 hj,i−1 vj , cioè la colonne i
di H fornisce la combinazione lineare delle vj che fornisce Avi−1 . Arrivando
fino al passo k, in forma matriciale possiamo scrivere
AVk−1 = Vk H = Vk−1 Hk−1 + hk,k−1 vk eTk
hl,m se l ≤ m + 1
è una matrice di dimensione k × (k − 1)
0
altrimenti
in forma di Hessemberg e Hk−1 è il minore principale di H di ordine k − 1 (ek
è il k-esimo versore della base canonica di Rn ). Sfruttando ora l’ortogonalità
dei vi otteniamo
dove Hl,m =
T
AVk−1 = Hk−1
Vk−1
quindi la matrice A viene trasformata per similitudine in una matrice di
Hessemberg superiore.
Chiaramente non potremo avere più di n vettori ortogonali e dunque se applicassimo il procedimento n volte arriveremmo alla soluzione esatta. Se
invece il procedimento si interrompesse ad un certo passo k, allora vorrebbe
28
P
dire
che
v
=
0
ovvero
h
=
0,
ma
allora
Av
=
k
k+1,k
k−1
i≤k−1 hi,k−1 vi =
P
i
δ
A
r
e
quindi
tenendo
conto
ancora
della
formula
ricorsiva otter(0)
i≤k−1 i
k
k−1
remmo A r(0) ∈ K (r(0) , A). Allora la dimensione massima dello spazio di
Krylov generato da A e r(0) sarebbe (k −1) (la dimostrazione è stata vista nel
capitolo relativo al gradiente coniugato) e quindi comunque avremmo trovato
la soluzione esatta del sistema.
Vediamo ora come si può calcolare x̃. Notiamo innanzitutto che Vk e1 = v1 =
r0
e quindi r(0) = Vk e1 kr(0) k2 . Possiamo allora scrivere che x = x0 + Vk y ∈
kr0 k
x0 + Vk allora
b − Ax = b − A(x0 + Vk y) = r0 − AVk y = Vk (kr(0) k2 e1 − Hy)
tenendo allora conto che x̃ minimizza la norma 2 del residuo (vedi teorema
precedente) e sfruttando l’ortonormalità della base Vk abbiamo che trovare
x̃ è quivalente a risolvere il problema:
x̃ = x0 + Vk ỹ dove ỹ è tale da rendere minima la kr(0) k2 e1 − Hyk2
Possiamo allora scrivere l’algoritmo GMRES nel modo seguente
• dato x0 e scelto k
• calcolo r0 = b − Ax0 , β = kr0 k2 , v1 =
r0
β
• calcolo Vk con il procedimento di Arnoldi
• trovo il vettore ỹ ∈ Rk che minimizza kβe1 − Hyk2
• calcolo x̃ = x0 + Vk ỹ
Resta da chiarire come scegliere k per garantire che il residuo sia sufficientemente piccolo e come risolvere il problema di minimo.
In effetti questi quesiti si possono facilmente risolvere fattorizzando la matrice
H come QR (Q ortogonale e R triangolare superiore) man mano che si avanza
con il metodo di Arnoldi. Al primo passo H è un vettore colonna di due
elementi, quindi Q1 sarà una matrice di rotazione 2 × 2 che manda la seconda
componente del vettore in 0, al secondo passo H è una matrice 3 × 2 che
possiamo fattorizzare in due passi: prima la moltiplichiamo per Q1 orlata con
l’ultima riga e colonna della matrice identità di dimensione 3 (cosı̀ la prima
colonna ha le ultime due componenti nulle) quindi moltiplico per la matrice
di rotazione F3 di dimensione 3 che agisce sulla 2 e terza componente che
manda l’elemento di posizione 2,3 in 0. Chiamo Q2 il prodotto di quest’ultima
matrice per Q1 orlata. In generale, supponiamo di essere arrivati al passo i
e di aver fattorizzato H = Qi R e di avanzare al passo successivo, allora vale
29

Qi


Q̃i H = 

...
0
...
∗
∗
0
0
∗
∗
∗
0
∗
∗
∗
∗
...








H = 



 0 0 0 ...
1

 0 0 0 0
0 0 0 0
..
.
0
..
.

∗
0
0
0

...
...
...
...
0
...
...
∗
∗
∗
∗
∗
∗
∗
∗










∗ ∗ 

0 r 
0 h
e quindi definendo

Fi+1
1 0 0
0 1 0
0 0 1




=


 0 0 0
0 0 0
0 ...
0 ...
0 ...
...
0
0
...
...
0
0
0
0
0
0








c −s 
s c
h
r
e s = √
abbiamo che Qi H = Fi+1 Q̃i H = R è
r2 + h2
r2 + h2
triangolare superiore e quindi ha l’ultima riga di tutti elementi nulli. Essendo
Qi ortonormale, abbiamo inoltre che
dove c = √
kβe1 − Hyk2 = kQi (βe1 − Hy)k2 = kgi − Ryk2
dove gi = βQi e1 . Ora il vettore Ry ha l’ultima componente nulla e quindi
per minimizzare kgi − Ryk2 basta risolvere il sistema triangolare costituito
dalle prime i equazioni. La soluzione trovata yi è tale che gi − Ryi ha le
prime i-componenti nulle e l’ultima data dalla (i+1)-esima componente di gi ;
il modulo di quest’ultima risulta pertanto essere il valore del residuo al passo
i.
L’algoritmo GMRES può allora essere modificato non fissando a priori il
valore di k, ma continuando ad avanzare con la costruzione della base Vi
finchè |hi+1,i | non è più piccolo della precisione richiesta, quindi si risolve il
sistema triangolare superiore visto in precedenza e si ottengono i coefficienti
dello sviluppo della soluzione cercata rispetto alla base Vi .
Un aspetto negativo del metodo è che devo memorizzare tutti i vettori di
base (non basta una formula ricorsiva a tre termini come per il metodo del
gradiente coniugato) e quindi si ha bisogno di molto spazio di memoria.
Un possibile modo per ovviare il problema è quello di definire una specie
di riavvio del metodo. Precisamente, si fissa un numero massimo m n
30
di funzioni di base che si vogliono costruire, si avvia il metodo GMRES
modificando il test d’arresto richiedendo di interrompere la procedura se il
residuo è minore della precisione richiesta oppure se ho costruito m funzioni
di base. Quindi costruisco la soluzione nel modo usuale. Se ho raggiunto
la precisione mi fermo, altrimenti riparto con lo stesso schema usando la
soluzione calcolata come dato iniziale.
Quest’ultimo metodo non ha una dimostrazione di convergenza, ma in genere,
funziona se m non è troppo piccolo.
31
Parte II
Approssimazione di funzioni
32
Capitolo 4
Interpolazione di Hermite
Supponiamo di conoscere sia i valori yi di una funzione nei nodi xi , i = 0, ..., n
(l)
i valori yi ,l = 1, · · · , ki − 1 di alcune derivate negli stessi nodi.
(l)
Ci poniamo allora il problema di determinare un polinomio p tale che ddxlp =
(l)
yi con l = 0, ..., ki − 1; i = 0, ..., n.
Per prima cosa dobbiamo individuare il grado di p, che dovrà essere sufficientemente alto da garantire di poter imporre le suscritte condizioni. Quindi p
dovrà essere almeno di grado m tale che:
!
n
X
m=
ki − 1 =⇒ p ∈ Pm
i=0
Teorema 7. Esiste uno ed un solo p ∈ Pm tale che
l = 0, ..., ki − 1 e i = 0, ..., n
d(l) p
(xi )
dx(l)
(l)
= yi
per
Dimostrazione. Vediamo l’unicitá: supponiamo p, q ∈ Pm , che soddisfino la
(l)
tesi. Sia z = p−q =⇒ ddxlz (xi ) = 0 per l = 0, ..., ki −1; per i = 0, ..., n. Allora
n
X
z ha
ki = m + 1 radici, ma z ∈ Pm quindi per il teorema fondamentale
i=0
dell’algebra z è il polinomio nullo.
Dimostriamo l’esistenza costruendo sviluppando p in una base che è una
generalizzazione dei polinomi di Lagrange. Precisamente vogliamo costruire
m polinomi Li,j (x) i = 0, · · · , n j = 0, ·, ki tali che
d(l) Li,s
(xp ) = δip δls
dxl
per s = 0, ..., ki − 1 e i = 0, ..., n.
33
allora è banale vedere che p è dato da:
p(x) =
n kX
i −1
X
(s)
Lis (x)yi
i=0 s=0
Cominciamo definendo
k
n (x − xi )j Y
x − xp p
lij (x) =
per j = 0, ..., ki − 1 e i = 0, ..., n.
j!
xi − xp
p=0
p6=i
allora lij (x) ∈ Pm ha una radice di molteplicità j in xi (e la derivata j-esima
in xi vale 1) e radici con molteplicità kp in xp 6= xi .
Definiamo quindi: Li,ki −1 (x) := li,ki −1 (x); per definire Li,j (x) con j < ki − 1,
dobbiamo togliere i contributi delle derivate successive alla j-esima, quindi:
Lij (x) = lij (x) −
kX
i −1
(k)
lij (xi )Lik (x) per j = ki − 2, · · · , 0
k=j+1
Il polinomio di interpolazione di Hermite può essere scritto nella forma di
Newton generalizzando la definizione delle differenze divise. Poichè abbiamo
in x0 , · · · , xn le condizioni k0 , · · · , kn , definiamo i nodi x̃i contando ogni xi
con la sua molteplicità, allora:
p(x) =
m
X
f [x̃0 , ..., x̃i ](x − x̃0 ) · · · (x − x̃i−1 ),
i=0
dove per nodi coincidenti x̃i , . . . , x̃i+k = xl , abbiamo:
f [x̃i , ..., x̃i+k ] =
34
f (k) (xl )
.
k!
Capitolo 5
Splines
Cerchiamo una funzione di interpolazione che sia un polinomio a tratti e che
presenti una certa regolaritá complessiva. Il problema è giustificato dal fatto
che con l’interpolazione polinomiale semplice si ottiene un polinomio, quindi
una funzione di classe C ∞ , ma si verificano problemi di stabilità con nodi
equispaziati all’aumentare del numero di nodi.
Definizione 4. Una funzione sk è una spline di ordine k se:
- sk sull’intervallo [xi , xi+1 ] ∈ Pk
- sk è una funzione di classe C k−1 su [x0 , ..., xn ]
Per sapere se il problema dell’interpolazione con spline è ben posto, cerchiamo
la dimensione dello spazio delle splines.
• sk |[xi ,xi+1 ] ∈ Pk quindi servono n(k + 1) coefficienti.
• sk è di classe C k−1 . I nodi interni sono n − 1, quindi abbiamo k(n − 1)
condizioni.
Possiamo concludere che la dimensione dello spazio delle spline è
nk + n − (nk − k) = n + k.
Dati di valori yi per i = 0, . . . , n, possiamo ora imporre la condizione di
interpolazione sk (xi ) = yi , che fornisce (n + 1) condizioni.
Per cui serviranno ancora (k − 1) condizioni (a questo punto il problema è
ben posto solo per k = 1).
Definizione 5. Una spline sk interpolante f si dice periodica se
sk (l) (x0 ) = sk (l) (xn ) per l = 1, ..., k − 1;
35
si dice naturale se
sk (l) (x0 ) = sk (l) (xn ) = 0 per l = m + 1, · · · , k − 1 con m =
k−1
.
2
Vediamo due diverse tecniche di calcolo delle splines; in particolare consideriamo ora il caso k = 3.
5.1
Splines cubiche
Sia
S3 = s3 : s3 |[xi ,xi+1 ] ∈ P3
e s3 di classe C 2 su [x0 , xn ]
con s3 (xi ) = fi per i = 0, ..., n. Allora
00
s3 |[xi ,xi+1 ] ∈ P1 , per i = 0, ..., n − 1
00
Sia Mi := s3 (xi ) per i = 0, ..., n, allora per x ∈ [xi , xi+1 ] e hi = xi+1 − xi :
00
s3 (x) = Mi
xi+1 − x
xi − x
xi+1 − x
x − xi
+ Mi+1
= Mi
+ Mi+1
xi+1 − xi
xi − xi+1
hi
hi
Integrando una volta si ottiene:
0
s3 (x) = −Mi
(xi+1 − x)2
(xi − x)2
+ Mi+1
+ ci
2hi
2hi
e integrando nuovamente:
(xi+1 − x)3
(xi − x)3
s3 (x) = Mi
− Mi+1
− ci (xi+1 − x) + c̃i .
6hi
6hi
Quindi per costruzione s3 (x) ∈ P3 e ha la derivata seconda continua.
Restano da imporre:
1. la condizione di interpolazione;
2. la condizione di continuitá della derivata prima.
1. Imponiamo s3 (xi ) = yi = fi e s3 (xi+1 ) = fi+1 :
(
h3
s3 (xi ) = Mi 6hii − ci hi + c̃i = fi
s3 (xi+1 ) = Mi+1 +
Si ottiene:
h3i
6hi
+ c̃i = fi+1
h2i
c̃i = fi+1 − Mi+1
6
36
fi+1 − fi
hi
+ (Mi − Mi+1 ) .
hi
6
ci =
0
+
−
0
2. Imponiamo s3 (xi ) = s3 (xi ) :
−Mi
hi fi+1 − fi
hi
hi−1 fi − fi−1
hi−1
+
+(Mi −Mi+1 ) = −Mi
+
+(Mi−1 −Mi )
2
hi
6
2
hi−1
6
hi−1
hi hi hi−1 hi−1
hi
−Mi−1
− Mi
− +
−
− Mi+1 =
6
2
6
2
6
6
fi − fi−1 fi+1 − fi
−
=: bi
=
hi−1
hi
hi + hi−1
hi
hi−1
+ Mi
+ Mi+1 = bi .
Mi−1
6
3
6
Moltiplichiamo per
6
hi +hi−1
Mi−1
Ponendo inoltre:
si ottiene il

µ1
 0

 ···
0
e poniamo di :=
6bi
,
hi +hi−1
si ottiene:
hi
hi−1
+ 2Mi + Mi+1
= di .
hi + hi−1
hi + hi−1
hi−1
hi
= µi e
= δi ,
hi + hi−1
hi + hi−1
sistema:
2
δ1
0
µ2 2
δ2
··· ··· ···
··· ··· 0

··· ···
0
M1
 ···
0
···
0 

··· ··· ···  ···
µn−1 2 δn−1
Mn−1



d1



 =  ··· 

 ··· 
dn−1
Bisogna orlare la matrice in modo corretto aggiungendo la riga zero:
2 δ0 0 · · · · · · · · · 0 ,
e la riga n:
0 ···
···
· · · 0 µn 2 .
i−1
La matrice cosı́ é fortemente diagonalizzata, infatti: µi + δi = hhii +h
=1
+hi−1
00
00
Per le spline naturali imponiamo le condizioni s3 (x0 ) = 0, s3 (xn ) = 0, quindi
δ0 = 0, µn = 0, b0 = 0, bn = 0.
Per spline periodiche imponiamo che i valori agli estremi della derivata seconda e prima siano coincidenti ottenendo una matrice diagonalmente dominante
(stretta se escludiamo l’equazione dei momentiagli estremi) ma non tridiagonale (ció comporta un piccolo costo comutazionale aggiuntivo).
Una volta calcolati gli Mi abbiamo l’espressione della spline su ogni intervallo; abbiamo ricondotto il problema alla risoluzione di un sistema lineare
facilmente risolvibile.
37
5.2
5.2.1
B-splines
Base sull’intero intervallo
Cerchiamo le n + k funzioni di base definite sull’intero intervallo, la spline
sarà allora una loro combinazione lineare.
Siano ϕi tali che:
ϕi (x) ∈ Sk ;
(l)
ϕi (xj ) = δij ;
ϕi (x0 ) = 0 ;
(l)
ϕi (xn ) = 0,
per l in numero sufficiente a garantire l’unicità di ϕi . Le ϕi serviranno a
imporre le condizioni di interpolazione. Cosı̀ abbiamo n + 1 funzioni di base,
mentre ne servono n + k. Scriviamo allora le altre k − 1: per p = 0 e p = n,
ϕ̃i,p (x) ∈ Sk ;
ϕ̃i,p (xj ) = 0 per j = 0, ..., n;
(l)
ϕ̃i,p (x0 ) = δil ,
per i = 1, ...,
k−1
k−1
e l = 1, ...,
.
2
2
n
X
2
X
La spline sarà:
S(x) =
k−1
k−1
fi ϕi (x) +
i=0
(l)
f0 ϕ̃i,0 (x)
i=1
+
2
X
fn(l) ϕ̃i,n (x)
i=1
(l)
(l)
Questo metodo è utile se cerchiamo splines al variare dei dati fi , f0 , fn , ma
non dei nodi.
5.2.2
Base locale
Scriviamo le basi su ogni [xi , xi+1 ]. Vediamo due modi:
A)
• Se k = 0 le spline sono funzioni costanti su ogni intervallo:
1 x ∈ [xi , xi+1 ]
Bi,0 (x) =
0 altrimenti
• Se k = 1 le spline sono polinomi di primo grado su ogni intervallo, con continuità complessiva. Usiamo la base precedente per
costruirle:
Bi,1 (x) = α(x − xi )Bi,0 (x) + β(x − xi+2 )Bi+1,0 ,
Bi,1 (x) 6= 0 solo in [xi , xi+2 ].
38
Calcoliamo α, β in modo che Bi,1 (xi+1 )− = Bi,1 (xi+1 )+ = 1
α(xi+1 −xi ) = β(xi+1 −xi+2 ) = 1 =⇒ α =
Allora: Bi,1 (x) =
x−xi
B (x)
xi+1 −xi i,0
+
1
−1
,β =
xi+1 − xi
xi+2 − xi+1
xi+2 −x
B
(x).
xi+2 −xi+1 i+1,0
• Se k = 2, come nel caso precedente scriviamo la nuova base a
partire da Bi,1 (x) generalizzando la formula precedente
Bi,2 (xi ) =
xi+3 − x
x − xi
Bi,1 (x) +
Bi+1,1 (x).
xi+2 − xi
xi+3 − xi+1
Notiamo che la normalizzazione dei due termini viene calcolata
mediante l’ampiezza degli intervalli in cui le B-spline di grado k
sono non nulle. Con un semplice calcolo si verifica che la funzione
cosı̀ ottenuta è di classe C (1) (in particolare il valore della derivata
2
).
prima in xi+1 vale xi+22−xi mentre in xi+2 vale − xi+3 −x
i+1
Quindi, in generale:
Bi,0 (x) =
Bi,k+1 (x) =
1 x ∈ [xi , xi+1 ]
0 altrove
x − xi
xi+k+2 − x
Bi,k (x) +
Bi+1,k (x)
xi+k+1 − xi
xi+k+2 − xi+1
k = 0, 1, · · ·
B) Vediamo un altro modo di costruire le basi. Definiamo:
(t − x)k t ≥ x
gx (t) = (t − x)+ =
0
altrimenti
La funzione g, su R, è di classe C k−1 .
Verifichiamo che vale la formula:
Bi,k (x) = (xi+k+1 − xi ) gx [xi , . . . , xi+k+1 ],
(5.1)
dove gx [xi , . . . , xi+k+1 ] il coefficiente direttivo del polinomio Gk+1 che
interpola gx (t) nei nodi [xi , . . . , xi+k+1 ].
- Se x > xi+k+1 , allora Gk+1 interpola g(x) che sempre nullo, quindi
Gk+1 il polinomio nullo, perciò ha coefficiente direttivo zero, allora
Bi,k (x) = 0;
39
- Se x < xi , allora Gk+1 interpola i valori di un polinomio di grado k,
ma Gk+1 ha grado k +1. Anche in questo caso Gk+1 ha coefficiente
direttivo nullo e quindi Bi,k (x) = 0.
Resta da verificare che Bi,k (x) un polinomio di grado k a tratti, con
regolarità globale k −1. Supponiamo di voler effettuare l’interpolazione
polinomiale di una funzione f . Possiamo procedere in due modi:
(a)
p(x) =
n
X
f [x0 , ..., xi ]ωi−1 (x),
i=0
dove ω−1 = 1 e ωi = (x − x0 )...(x − xi )
(b)
p(x) =
n
X
f (xi )Li (x),
i=0
dove Li (x) =
n
Y
ωn (x)
1
x − xj
Y
=
=
x i − xj
x − xi
(xi − xj )
j=0
i6=j
=
j6=i
ωn (x)
.
(x − xi )ωn0 (xi )
Per l’unicità del polinomio di interpolazione, i coefficienti direttivi devono assumere lo stesso valore, quindi:
f [x0 , ..., xn ] =
n
X
f (xi )
i=0
1
ωn (xi )
0
Scrivendo la relazione per g(x) e sostituendola nella formula generale
si ha:
k+1
X
(xi+j − x)k+
Bi,k (x) = (xi+k+1 − xi )
k+1
Q
j=0
(xi+j − xi+l )
l=0
l6=j
Abbiamo ottenuto che Bi,k (x) è una combinazione lineare di funzioni
che sono o nulle o polinomi di grado k, quindi sono polinomi a tratti
di grado k. Inoltre sono combinazioni lineari di funzioni con regolarità
k − 1 e quindi Bi,k ∈ C k−1 ([a, b]). Le due formule portano allora alla
costruzione della stessa base.
40
Vediamo se abbiamo abbastanza funzioni. Perchè Bi,k sia definita serve che:
xi+k+1 ≤ xn =⇒ i + k + 1 ≤ n =⇒ i ≤ n − (k + 1).
Mancano perciò (n + k) − (n − k) = 2k funzioni di base. Per aggiungere le
2k funzioni mancanti introduciamo i nodi:
x−1 = x−2 = . . . = x−k = x0 ,
xn+1 = xn+2 = . . . = xn+k = xn .
Abbiamo introdotto cosı̀ k nodi coincidenti con il primo e k nodi coincidenti con l’ultimo. Ora possiamo facilmente estendere la definizione delle Bi,k
tenendo conto che siamo in grado di calcolare le differenze divise per nodi
coincidenti. Evidentemente queste ultime funzioni di base serviranno per imporre le condizioni sulle derivate agli estremi dell’intervallo di interpolazione.
Vediamo ora come si calcolano le B-spline se è presente un nodo ripetuto
s + 1 volte. Per esempio sia xm ≡ xm+1 ≡ · · · ≡ xm+s ; per quanto detto precedentemente riguardo alla regolarità delle B-spline potremo calcolare solo
B-spline di grado k ≥ s. In caso di maggiore stretto, però, è facile verificare
che può essere applicata la formula ricorsiva abbassando di fatto il grado
dele B-spline da calcolare. Si ha cosı̀ che solo per il calcolo di Bm−1,i (x) e di
Bm,i (x) dobbiamo ricorrere alla definizione con le differenze divise.
Come passo preliminare calcoliamo per l = 0, · · · , s:
dl (t − x)s+
dl gx (t)
|
|t=xm
t=xm
l
dtl
=
gx [xm · · · xm+l ] = dt
l!
l!
=




0
s!(xm − x)s−l


=

l!(s − l)!
s
(xm − x)s−l x < xm
l
Sfruttando i valori calcolati nei casi (*) e (**), otteniamo:
41
x ≥ xm
(*)
(**)
Bm,s (x) = (xm+s+1 − xm )gx [xm · · · xm+s+1 ]
gx [xm+1 · · · xm+s+1 ] − gx [xm · · · xm+s ] (∗)
= (xm+s+1 − xm )
=
xm+s+1 − xm
gx [xm+2 · · · xm+s+1 ] − gx [xm+1 · · · xm+s ] (∗)
= gx [xm+1 · · · xm+s+1 ] =
=
xm+s+1 − xm
gx [xm+s xm+s+1 ]
gx [xm+2 · · · xm+s+1 ]
= ··· =
=
xm+s+1 − xm
(xm+s+1 − xm )s−1
s
(xm+s+1 − x)s+ − (xm+s − x)s+
xm+s+1 − x
=
=
(xm+s+1 − xm )s
xm+s+1 − xm
Bm−1,s (x) = (xm+s − xm−1 )gx [xm−1 · · · xm+s ]
gx [xm · · · xm+s ] − gx [xm−1 · · · xm+s−1 ] (∗∗)
= (xm − xm−1 )
=
xm − xm−1
s
gx [xm−2 · · · xm+s−1 ] − gx [xm−1 · · · xm+s−2 ] (∗∗)
=
=
(xm − x)0 −
xm − xm−1
s
s
xm − x
gx [xm−2 · · · xm+s−2 ] − gx [xm−1 · · · xm+s−3 ]
=1−
+
s − 1 xm − xm−1
(xm − xm−1 )2
s−1 X
s
gx [xm−1 xm ]
(xm − x)l
s−1
+
(−1)
=
= ··· =
(−1)l
l
s−1
s
−
l
(x
(x
m − xm−1 )
m − xm−1 )
l=0
s−1
s
s
l
X
s
l (xm − x)
s (xm − x)+ − (xm−1 − x)+
=
(−1)
+ (−1)
=
s−l
(xm − xm−1 )l
(xm − xm−1 )s
l=0
s−1 s
X
s
(xm − x)l
s (xm − x)
=
(−1)l
+
(−1)
l
(xm − xm−1 )l
(xm − xm−1 )s
l=0
s
P
s
(−1)l (xm − x)l (xm − xm−1 )s−l
l
= l=0
(xm − xm−1 )s
s
x − xm−1
=
xm − xm−1
dove abbiamo sfruttato l’uguaglianza
n
P
n-esima di un binomio: (a − b)n =
l=0
s
s−l
n
l
42
=
s
l
e lo sviluppo della potenza
(−1)l a(n−l) bl .
L’uso di basi locali permette di aggiungere facilmente nodi di interpolazione;
le spline hanno però uno svantaggio: sono dipendenti dalla posizione dei dati
yi (cambiano per rotazioni del sistema di riferimento); per avere indipendenza
si utilizza la forma parametrica:
x = x(t)
y = f (x) →
y = y(t)
e si costruiscono le splines che interpolano i valori di x e y al variare di t.
5.3
Funzioni di Brézier
Per approssimazione di Brézier, si intende una serie di tecniche nate nell’ambito del disegno tramite calcolatore (CAD) in quanto permettono di costruire
facilmente una curva con una determinata forma. La forma delle curve di
Brézier dipende da alcuni punti del piano (detti punti di controllo) quindi,
spostando questi ultimi, si può far assumere alla curva la forma desiderata.
La costruzione delle curve di Brézier si basa sui polinomi di Bernstain e
quindi dobbiamo innanzitutto introdurre alcune proprietà di questi ultimi.
Dato un intervallo [a, b], i polinomi di Bernstain di grado n sono definiti da
n (b − x)n−i (x − a)i
n
i = 0, 1, · · · , n
Bi (x) =
i
(b − a)n
che risultano essere linearmente indipendenti e quindi costituiscono una base
di Pn . Un
polinomio p ∈ Pn può dunque essere scritto come:
Pn qualunque
n
p(x) =
i=0 γi Bi (x), in particolare possiamo scrivere in questa forma il
polinomio di interpolazione nei nodi (xi , yi ) con xi ∈ [a, b].
Ovviamente i coefficienti γi in generale non saranno uguali ai valori yi come
nel caso dello sviluppo nella base di Lagrange. Se però x0 = a xn = b allora
γ0 = y0 e γn = yn (invece γi 6= yi i = 1, · · · n − 1).
Definiamo allora curva di Brézier un polinomio della forma
p(x) =
n
X
γi Bin (x) ∀x ∈ [a, b]
i=0
esso descrive una traiettoria che parte da (a, γ0 ) e termina in (b, γn ). Inoltre
p(x) non passa per i punti (xi , γi ), ma questi ultimi ne caratterizzano la forma.
In particolare, se si costruisce il poligono di vertici (xi , γi ) i = 0, · · · , n si ha
un’idea di come è fatta la curva di Brézier.
43
Figura 5.1: Esempio di curva di Brézier di terzo grado con i 4 punti di
controllo.
44
Capitolo 6
Miglior approssimazione
Sia f una funzione continua sull’intervallo [a, b]. Cerchiamo p ∈ V , spazio vettoriale di dimensione n < +∞ che approssimi f minimizzandone la
distanza:
kf − pk = min kf − ϕk.
ϕ∈V
Vogliamo usare la norma del massimo: kgk = max |g(x)|
a≤x≤b
Teorema 8. Esiste ed è unica p ∈ V tale che kf − pk = min kf − ϕk.
ϕ∈V
Osservazione 1. Dimostriamo l’esistenza nello spazio V e l’unicità se V
è strettamente convesso (cioè se la palla unitaria è strettamente convessa).
Opportune condizioni su V garantiscono l’unicità anche in spazi che non
siano necessariamente strettamente convessi.
Dimostrazione. Esistenza: consideriamo B̄ = B(f, kf k) allora 0 ∈ B̄, inoltre
0 ∈ V perchè V spazio vettoriale, quindi H = B̄ ∩ V 6= ∅ e H compatto.
Allora esiste min kf − ϕk. Inoltre min kf − ϕk = min kf − ϕk.
ϕ∈H
ϕ∈V
ϕ∈H
Dimostriamo ora l’unicità negli spazi strettamente convessi.
Siano p1 , p2 ∈ V tali che kf − p1 k = kf − p2 k = min kf − ϕk = d. Allora:
ϕ∈V
1
p
+
p
1
2
f −
≤ kf − p1 k + 1 kf − p2 k = d,
2 2
2
2
≥ d. Ma allora: k2f − p1 − p2 k = 2d =
ma d minimo, quindi f − p1 +p
2
kf − p1 k + kf − p2 k che in uno spazio strettamente convesso implica che
∃c > 0 tale che f − p1 = c ∗ (f − p2 ), ma, avendo la stessa norma, dovrà
essere c = 1 e quindi p1 = p2 .
45
L’unicità di soluzione in spazi non strettamente convessi (come nel caso di
spazio della scelta della norma del massimo), ci viene garantita dalla seguente
proprietá di Haar :
sia V di dimensione n allora ∀v ∈ V
v su [a, b] ha al piú n − 1 zeri.
Se V = Pn , allora dim(V ) = n + 1; siccome ogni polinomio di grado n ha
al più n radici, scegliere lo spazio dei polinomi garantisce unicità di soluzione.
Vogliamo quindi cercare p ∈ Pn tale che
kf − pk = min max |f (x) − ϕ(x)| := d(f )
ϕ∈V
a≤x≤b
Teorema 9 (di De La Vallè-Poussin). Sia p ∈ Pn tale da oscillare n + 2 volte
attorno ad f , quindi esistono n + 2 punti xi e n + 2 valori ei tutti dello stesso
segno, tali che
f (xi ) − p(xi ) = (−1)i ei per i = 0, ..., n + 1
Allora
d(f ) ≥ min |ei |
0≤i≤n+1
Dimostrazione. Supponiamo per assurdo che esista q ∈ Pn tale che
kf − qk ≤ min |ei |.
0≤i≤n+1
Sia z = p − q ∈ Pn , allora z(xi ) = q(xi ) − p(xi ) = q(xi ) − f (xi ) + f (xi ) − p(xi ).
Poich q(xi ) − f (xi ) < |ej | ∀j e f (xi ) − p(xi ) = (−1)i ei , z(xi ) ha segno (−1)i
in ogni xi , cioè cambia di segno n + 2 volte, quindi ha n + 1 radici. Ma z
ha grado n e quindi per il teorema fondamentale dell’algebra deve essere il
polinomio identicamente nullo.
Gli ei indicano il valore dei massimi della distanza tra la funzione f e il
polinomio p e quindi varrà che:
min(ei ) ≤ d(f ) ≤ max(ei ),
quindi se gli ei fossero tutti uguali otterremmo d(f ). (Teorema di Chebyshev ). Allora il problema di miglior approssimazione si risolve cercando un
polinomio che oscilla attorno a f n + 2 volte di una stessa quantità (ovvero
46
esistono n + 1 nodi incogniti in cui il polinomio interpola f ).
Supponiamo che f ∈ Pn+1 ; se p ∈ Pn allora:
kf − pk = min max |f (x) − ϕ(x)|
ϕ∈Pn
a≤x≤b
con f (x) − ϕ(x) ∈ Pn , dalla formula dell’errore di interpolazione, essendo
f (ξ)n+1 = cost, la condizione precedente equivale a cercare:

n
 n

Y
Y


min (x − xi ) = min max  (x − xi )
ϕ∈Pn a≤x≤b 

i=0
i=0
al variare dei nodi xi ; quindi si tratta di cercare il polinomio di grado n + 1
con la più piccola norma del massimo. Sappiamo che i polinomi di Chebyshev soddisfano la seguente proprietà: Tn+1 (x)2−n ha coefficiente direttivo
uno e ha la più piccola norma del massimo; allora i nodi di interpolazione
saranno gli zeri di Tn+1 . In questo caso quindi si trovano facilmente i punti di
interpolazione. In generale i nodi non sono molto lontani dagli zeri del polinomio di Chebyshev che quindi possono essere usati per innescare l’algoritmo
(0)
polinodi Remes: al primo passo indichiamo con xi i punti stazionari del
Pn+1
mio di Chebyshev e calcoliamo i coefficienti ai del polinomio p = i=0 ai xi
ed il valore e che verificano il sistema lineare ottenuto imponendo le n + 2
(0)
(0)
condizioni p(xi ) − f (xi ) = ei = 0, · · · , n + 1 (notiamo che si tratta di un
sistema lineare con n+2 incognite). Quindi si impone la condizione di sta0
0
(1)
(1)
zionarietà: p (xi ) − f (xi ) = 0, che porta a dover risolvere un’equazione
(1)
non lineare (ora le incognite soni gli xi ). Se si troviamo n + 2 soluzioni,
(1)
abbiamo tutti gli xi necessari per ripetere i passi precedenti; altrimenti è
necessario aggiungere altri nodi, per esempio gli estremi dell’intervallo. In
(k)
(k)
generale, noti x0 , · · · , xn+1 si ripete il procedimento fino a convergenza. Il
procedimento verrà interrotto quando
max(ei )
(k+1)
(k+1) ) − f (xi
)
min(ei ) − 1 < dove ei = p(xi
dove è la precisione richiesta.
47
Capitolo 7
Approssimazione di funzioni
periodiche
Vogliamo ora approssimare una funzione f ∈ L2[0,2π] , dove
L2[0,2π]
Z
= g : [0, 2π] → C
2π
g(t)g(t)dt < +∞ .
0
Consideriamo le seguenti funzioni in L2[0,2π] (i cosı̀ detti polinomi di Fourier ):
ϕj (x) = eijx , con j = 0, ±1, ±2, ... e dove i è l’unitá immaginaria.
allora, se f è continua vale lo sviluppo:
f (x) =
+∞
X
f˜j ϕj (x)
j=−∞
dove
1
f˜j =
2π
2π
Z
f (t)e−ijt dt =
0
1
(f, ϕj ),
2π
avendo definito prodotto scalare e norma su L2[0,2π] nel modo seguente:
Z
(f, g) :=
2π
f (t)g(t)dt;
1
kf k := (f, f ) 2
0
Verifichiamo che la base dei polinomi di Fourier è ortogonale.
Z 2π
Z 2π
ikt −ijt
(ϕk , ϕj ) =
e e dt =
ei(k−j)t dt
0
0
48
che risulta:
2π
1
ei(k−j)t |2π
0
k−j
se j = k
= 0 se j =
6 k
quindi la base è ortogonale e in particolare (ϕk , ϕj ) = 2πδkj .
Vediamo il caso f : [0, 2π] → R di funzioni a valori reali. In questo caso è
facile dimostrare che f˜k = f¯˜−k ∀k, infatti deve essere:
" +∞
#
X
=[f (x)] = =
f˜j ϕj (x) = 0
j=−∞
Calcoliamo gli addendi della somma e imponiamo che la somma sia un
numero reale.
f˜k ϕk (x) = <[f˜k ] + i=[f˜k ] (cos(kx) + sin(kx)) =
h
i
= <[f˜k ] cos (kx) − =[f˜k ] sin (kx) + i =[f˜k ] cos (kx) + <[f˜k ] sin (kx)
f˜−k ϕ−k (x) = <[f˜−k ] cos (kx) + =[f˜−k ] sin (kx)+
h
i
+i =[f˜−k ] cos (kx) − <[f˜−k ] sin (kx)
Quindi deve essere: =[f˜k ] = −=[f˜−k ] e <[f˜k ] = <[f˜−k ], cioè f˜k = f¯˜−k . Perciò
è sufficiente calcolare la metá dei coefficienti f˜j . Il loro calcolo comporta peró
la risoluzione di integrali dipendenti da f :
Z 2π
Z 2π
1
i
˜
fj =
f (t) cos(jt)dt −
f (t) sin(jt)dt.
2π 0
2π 0
Calcolare i coefficienti f˜j in questo modo non è sempre possibile, nè semplice.
Possiamo comunque accontentarci di alcuni degli f˜j : considerando che la
serie converge si puó avere una buona approssimazione di f eliminando le
code della serie.
Definizione 6. Definiamo la serie troncata di Fourier nel modo seguente:
N
fN (x) =
−1
2
X
f˜k ϕk (x)
k=− N
2
fN è l’approssimazione di f nel senso dei minimi quadrati continui sul sottospazio SN := span{ϕk (x) | k = − N2 , ..., N2 − 1}; infatti che fN tale
che:
kf − fN kL2 = min kf − ϕkL2 .
ϕ∈SN
49
Resta il problema del calcolo degli integrali: possiamo approssimarli attraverso una formula di quadratura, che permette di ottenere dei coefficienti fˆj ,
approssimazione di f˜j . Sia fˆN è l’approssimazione di f˜N . Sar poi necesssaria
una stima dell’errore:
kf − fˆN kL2 = kf − f˜N + f˜N − fˆN kL2 ≤ kf − f˜N k + kf˜N − fˆN k ≤
X
X
1
≤ kf − f˜N k +
|f˜k − fˆk |kϕk k = kf − f˜N k +
|f˜k − fˆk |(2π) 2
k
k
Quindi si stima l’errore attraverso l’errore di quadratura.
- Trasformata discreta di Fourier.
Siano dati N nodi equispaziati in [0, 2π], h =
0, ..., N − 1.
Definiamo il prodotto scalare discreto
(f, g)N = h
N
−1
X
2π
,
N
xj = jh per j =
f (xi )g(xi ).
i=0
Definiamo la trasformata discreta di Fourier :
N
ΠN f (x) =
−1
2
X
fˆk ϕk (x),
k=− N
2
N −1
1 X
(f, ϕk )N
dove fˆk =
f (xj )e−ikxj =
N j=0
2π
In questo modo ΠN f è facilmente calcolabile.
Verifichiamo l’ortogonalitá della base rispetto al prodotto scalare discreto:
N
−1
X
(ϕk , ϕk )N = h
eikxl e−ikxl = hN = 2π
l=0
(ϕk , ϕj )N = h
N
−1
X
e
i(k−j)xl
l=0
=h
N
−1
X
ei(k−j)h
l
=
l=0
1 − ei(k−j)N h
1 − ei(k−j)2π
=
=0
1 − ei(k−j)h
1 − ei(k−j)h
Si ha quindi che ΠN f è l’approssimazione di f nel senso dei minimi
quadrati discreti, analogamente al caso continuo.
=h
50
Dimostriamo ora che ΠN f è il polinomio di interpolazione di f (x) nei
nodi xi , cioè: ΠN f (xj ) = f (xj ):
N
−1
2
X
ΠN f (xj ) =
k=− N
2
N
−1
N −1
2
X
1 X
ˆ
fk ϕk (xj ) =
f (xl )e−iklh eikjh =
N
N
l=0
k=−
2
N
−1
N −1
2
X
1 X
eik(j−l)h =
=
f (xl )
N l=0
N
k=−
2
N −1
1 X
1
±(ϕj , ϕl )N
=
=
f (xj )2π = f (xj ).
f (xl )
N l=0
h
2π
Allora abbiamo
N
−1
2
X
fˆk ϕk (xj ) = f (xj )
j = 0, ..., N − 1.
(7.1)
k=− N
2
Per calcolare fˆk si deve perció risolvere il sistema lineare scritto sopra,
oppure è possibile calcolare il valore della funzione nei nodi a partire
da fˆk . In questo caso, il costo è equivalente al costo del prodotto matrice*vettore, cioè n2 operazioni.
Riprendiamo ora la formula per il calcolo dei coefficienti dello sviluppo
discreto di Furier, quindi:
N −1
1 X
ˆ
fl =
f (xj )e−ilhj
N j=0
l=−
N
N
, . . . , − 1,
2
2
(7.2)
che con un costo di n2 operazioni permette di calcolare i coefficienti a
partire dai valori di f (x) nei nodi.
- Trasformata rapida di Fourier.
è possibile modificare il calcolo della trasformata discreta di Fourier in
modo da abbassare il costo computazionale. Sia
2π
W = e±i N = cos(
51
2π
2π
) ± i sin( ),
N
N
la radice N -esima dell’unitá. Consideriamo i due vettori complessi, le
cui componenti sono dette campioni :
h = [h0 , ..., hN −1 ]T ,
H = [H0 , ..., HN −1 ]T , definiti dalle relazioni:
per calcolare (7.1): hj = fˆj− N ; Hk = f (xk )
2
per calcolare (7.2): hj = f (xj ); Hk = N fˆk− N
2
per j = 0, ..., N − 1 e k = 0, ..., N − 1.
In queste ipotesi abbiamo un’unica formula:
Hk =
N
−1
X
W jk hj
k = 0, ..., N − 1
j=0
2π
2π
dove W = ei N per il calcolo di (7.1), W = e−i N per il calcolo di (7.2).
Valutiamo il costo computazionale dell’algoritmo cosı́ modificato.
Separiamo i termini con indice pari da quelli con indice dispari, si ha:
N
N
−1
2
X
Hk =
W 2pk h2p +
p=0
−1
2
X
p=0
N
2
−1
X
=
W (2p+1)k h2p+1 =
N
W 2pk h2p + W k
p=0
−1
2
X
W 2pk h2p+1
p=0
Poniamo:
N
Hk0 :=
−1
2
X
W 2pk h2p e
p=0
N
Hk1 :=
−1
2
X
W 2pk h2p+1 , allora
p=0
Hk = Hk0 + W k Hk1 , per k = 0, ..., N − 1.
In questo modo lavoriamo con vettori di dimensione dimezzata.
Osserviamo che Hk0 e Hk1 sono periodici di periodo N2 , infatti:
N
0
Hk+
N =
2
−1
2
X
N
W
2p(k+ N
2
)
h2p =
p=0
−1
2
X
p=0
52
W 2pk (W pN )h2p =
N
=
−1
2
X
W 2pk h2p = Hk0
p=0
analogamente si ha:
1
Hk+
N
2
= Hk1 . Quindi:
N
Hk+ N = Hk0 + W k+ 2 Hk1 = Hk0 − W k Hk1 .
2
Allora è sufficiente calcolare Hk0 e Hk1 per K = 0, ..., N2 − 1 per avere
gli Hk da 0 a N − 1, ció significa che servono N2 moltiplicazioni e N
somme. è possibile suddividere ulteriormente il calcolo di Hk0 e Hk1 (tra
pari e dispari):
0
Hk = Hk00 + (W 2 )k Hk01
Hk+ N = Hk00 − (W 2 )k Hk01
4
(
1
Hk = Hk10 + (W 2 )k Hk11
10
2 k 11
1
Hk+
N = Hk − (W ) Hk
4
Il calcolo comporta cosı́ N4 + N4 = N2 prodotti e 4 · N4 somme, come
prima ma le matrici con cui si opera hanno dimensione pari alla metá
delle precendenti.
La suddivisione N → N2 viene ripetuta finchè serve un’unica operazione,
cioè log2 N volte. Allora, poichè il costo computazionale è di circa N2
prodotti per ogni passo, in totale sará circa N2 log2 N . Il procedimento si
applica bene se N una potenza di due; diversamente si puó generalizzare
ma sará meno efficiente. Nel caso reale si possono eseguire la metá delle
operazioni che si effettuano nel caso complesso.
53
Capitolo 8
Interpolazione in più
dimensioni
54
Parte III
Ottimizzazione
55
Capitolo 9
Ricerca del minimo di una
funzione
9.1
Metodo di Newton
Data la funzione f (x) cerchiamo min f (x).
x
Consideriamo lo sviluppo di f (xk + p) centrato in xk :
0
f (xk + p) = f (xk ) + pf (xk ) +
p2 00
f (xk ) + ...
2
Se xk è vicino al minimo α lo sviluppo
d una buona approssimazione
di f e
1 2 00
0
quindi f (α) = min f (xk + p) ' min f (xk ) + pf (xk ) + p f (xk ) .
p
p
2
Deriviamo rispetto a p e poniamo mandiamo a zero la derivata:
0
f (xk )
f (xk ) + pf (xk ) = 0; si ottiene p = − 00
.
f (xk )
0
00
0
Il punto di minimo è: xk+1 = xk + p = xk −
Lo schema iterativo sará, dato x(0) :
f (xk )
.
f 00 (xk )
0
xk+1 = xk −
f (xk )
,
f 00 (xk )
analogo al metodo di Newton per la soluzione di equazioni non lineari: xk+1 =
k)
xk − ff0(x
, che si usa cercando f (α) = 0.
(xk )
Il risultato sulla convergenza è quindi lo stesso nei due casi: se c’è convergenza
la velocitá è quadratica. Condizioni necessarie a garantire la convergenza
00
sono: x0 sufficientemente vicino al minimo e f > 0.
56
9.2
Approssimazione parabolica
Supponiamo di avere 3 nodi: xk , xk−1 , xk−2 . Scriviamo la parabola p(x) =
ax2 + bx + c, con a > 0, che interpola (xk , fk ), (xk−1 , fk−1 ), (xk−2 , fk−2 ) e
calcoliamo il minimo xk+1 = −b
della parabola. Questo metodo converge piú
2a
lentamente rispetto al precedente ma non richiede la regolaritá di f in quanto
0
00
non serve calcolare f e f .
9.3
Metodo della sezione aurea
Definizione 7. Consideriamo la funzione f : R → R. f si dice unimodale nell’intervallo [a, b] se esiste x∗ ∈]a, b[ tale che f (x∗ ) = min f (x) e se
x∈]a,b[
∀x1 , x2 ∈ [a, b] tali che x1 < x2 , valgono le seguenti propriet:
- se x∗ > x2 =⇒ f (x1 ) > f (x2 );
- se x∗ < x1 =⇒ f (x2 ) > f (x1 ).
Dalla definizione deduciamo che se f unimodale allora è strettamente decrescente prima del minimo, e strettamente crescente dopo il minimo. Possiamo
allora pensare di valutare la funzione in due nodi e restringere opportunamente l’intervallo che contiene il minimo. A partire dall’intervallo iniziale
[a0 , b0 ], escludendo il caso particolare in cui f (x1 ) = f (x2 ), abbiamo due
possibilitá che portano a determinare l’intervallo al primo passo [a1 , b1 ]:
- se f (x1 ) > f (x2 ) =⇒ x∗ ∈ [x1 , b0 ], allora poniamo a1 = x1 e b1 = b0
- se f (x1 ) < f (x2 ) =⇒ x∗ ∈ [a0 , x2 ], allora poniamo a1 = a0 e b1 = x2 .
Il metodo che vogliamo scrivere è simile al metodo di bisezione: costruiremo
una successione di intervalli che deve convergere a un intorno sempre pi
piccolo del punto x∗ .
Vogliamo che i due intervalli possibili abbiano la stessa ampiezza e vogliamo
poter restringere il piú possibile l’intervallo ad ogni passo. Dovremo quindi
imporre le condizioni:
- b 0 − x 1 = x 2 − a0 ;
- x1 =
a0 +b0
2
−ε ,
x2 =
a0 +b0
2
+ ε.
Con queste scelte l’intervallo viene quasi dimezzato, come avviene utilizzando
il metodo di bisezione, ma si ha lo svantaggio di dover valutare la funzione
due volte per ogni passo. Il costo computazionale risulterá doppio rispetto
57
al metodo di bisezione. Possiamo peró sfruttare ad ogni passo una delle
valutazioni precedenti. Imponiamo allora che uno dei nodi coincida tra un
passo e l’altro.
(
(k)
x1 = ak + τ (bk − ak )
(9.1)
(k)
x2 = ak + η(bk − ak )
Il nuovo intervallo sará:
(k)
[ak+1 , bk+1 ] = [x1 , bk ]
(9.2)
oppure
(k)
[ak+1 , bk+1 ] = [ak , x2 ]
(k)
(9.3)
(k+1)
- (9.2) Il nodo x2 deve diventare x1
quindi
(k)
(k+1)
(k)
(k)
x2 = x1
= ak+1 + τ (bk+1 − ak+1 ) = x1 + τ (bk − x1 ).
(k+1)
(k)
- (9.3) x1 = x2
(k)
(k)
= ak+1 + η(bk+1 − ak+1 ) = ak + η(x2 − ak ).
(k)
Sostituendo x2 e x1 dal sistema (9.1) in (9.2) e in (9.3) si ha:
- (9.2) ak + η(bk − ak ) = ak + τ (bk − ak ) + τ (bk − ak − τ (bk − ak )) =⇒
η = τ + τ − τ 2 =⇒ η = 2τ − τ 2
- (9.3) ak + τ (bk − ak ) = ak + η(ak + η(bk − ak ) − ak ) =⇒ τ = η 2
η = 2τ − τ 2
τ = η2
=⇒ η = 2η 2 − η 4 , quindi η(η 3 − 2η + 1) = 0 =⇒ η(η − 1)(η 2 + η − 1) = 0
√ !
√ !
1+ 5
−1 + 5
=⇒ η(η − 1) η −
η−
=0
2
2
Per η = 0√e η = 1 si ottengono come nodi gli estremi dell’intervallo, e il
valore −1−2 5 è negativo, quindi scegliamo:
√
−1 + 5
η=
,
2
allora τ =
Si ha:
3
2
√
−
5
2
= 1 − η.
(
(k)
x1 = bk − η(bk − ak )
(k)
x2 = ak + η(bk − ak )
58
(k)
(k)
In questo modo la funzione si valuta una volta per ogni passo e gli x1 e x2
sono equidistanti dagli estremi. Tale metodo prende il nome di metodo della
sezione aurea.
È facile vedere che, indicata con Lk la lunghezza dell’intervallo al passo k,
vale che:
Lk = Lk+1 + Lk+2
Lk+1
Lk+1
ak
k+1
xk+1
= xk1 xk2 = bk+1
1 x2
Lk+2
bk
Lk+2
Lk
Figura 9.1: Rappresentazione di tre passi del metodo della sezione aurea.
Per confrontare il metodo della sezione aurea con il metodo di bisezione in
modo da stabilire quale dei due è più efficiente, bisogna vedere confrontare di quanto si riduce l’intervallo di incertezza nei due metodi a parità di
valutazioni della funzione, quindi la lunghezza Lk+1 = 12 Lk dei un passo di
bisezione va confrontata con la lunghezza Lk+2 = η 2 Lk ' 0.38196601Lk di
due passi di sezione aurea che quindi risulta essere più efficiente.
Supponiamo ora che i coefficienti τ e η siano variabili, e siccome la distanza
tra xk1 e xk2 tende a diminuire imponiamo che ad un passo N dato si abbia
N
xN
1 ≡ x2 . In questo caso allora
LN −1 = 2LN
59
LN +1
aN
LN +1
N
xN
1 = x2
bN
LN
Figura 9.2: Passo finale del metodo di Fibonacci
sfruttando il legame tra tre segmenti consecutivi, abbiamo allora:
• LN2 = LN −1 + LN = 3LN
• LN3 = LN −2 + LN −2 = 5LN
• LN4 = LN −3 + LN −2 = 8LN
•
..
.
• LN −k = LN −k+1 + LN −k+2 = Fk LN
•
..
.
• L1 = L2 + L3 = FN −1 LN
• L0 = L1 + L2 = F N LN = b − a
dove FN è l’N-esimo termine della successione di Fibonacci, definita da F−1 =
1, F0 = 1, . . . , Fk+1 = Fk + Fk−1 , . . ..
Facendo ora il rapporto tra le ultime due relazioni otteniamo:
L1 =
FN −1
L0
FN
che ci dice come posizionare i primi due punti x01 e x02 perchè all’N-esimo
N
passo i punti xN
1 e x2 coincidano. In generale ad ogni passo il fattore di
riduzione dell’intervallo è pari al rapporto tra due termini consecutivi della
successione di Fibonacci.
Dall’ultima relazione, invece, ricaviamo qual’è l’ampiezza dell’intervallo di
incertezza finale che sarà dato da:
60
L0
FN
Volendo confrontare il metodo di Fibonacci con sezione aurea, possiamo dire
che, siccome il limite tra il rapporto di due termini consecutivi della successione di Fibonacci è uguale alla sezione aurea, se scegliamo un valore di N grande
allora i due metodi sono praticamente equivalenti. Per N piccolo,invece, Fibonacci risulta essere leggermente più efficiente (per esempio, dopo 5 passi
di Fibonacci l’intervallo si è ridotto di un fattore pari a FF16 ' 0.076, mentre
per sezione aurea il fattore di riduzione è η 5 ' 0.090).
Possiamo ora scivere l’algoritmo di Fibonacci come:
LN =
• dati a, b ed N
- calcolo x01 = b −
FN −1
(b
FN
− a), x02 = a +
FN −1
(b
FN
− a)
• per k = 1, . . . , N − 1
- se f (x1 ) < f (x2 )
- se f (x1 ) > f (x2 )

 b = x2
x2 = x1

x1 = a + (b − x2 )

 a = x1
x1 = x2

x2 = b − (x1 − a)
Poichè gli ultimi due nodi sono coincidenti, all’ultimo passo possiamo eseguire
un passo del metodo della bisezione:
x1 = a+b
−ε
2
x2 = a+b
+ε
2
in questo modo l’ampiezza finale dell’intervallo di incertezza sarà
E scegliendo N in modo che:
b 0 − a0
≤ε
2FN
FN ≥
b0 −a0
2FN
+ 2ε.
b 0 − a0
,
2ε
l’ampiezza finale dell’intervallo sará 2ε e, scegliendo infine il punto medio,
l’errore massimo sarà più piccolo di ε.
61
Parte IV
Integrazione
62
7.1
Estrapolazione di Richardson
L’estrapolazione di Richardson è una procedura che, mediante opportune
combinazioni lineari di valutazioni approssimate di una quantità α in funzione
di un certo parametro h, fornisce una nuova stima più accurata di α. Più
precisamente, supponiamo di avere la seguente relazione:
A(h) = α + γ0 h + γ1 h2 + · · · + γp hp + Rp+1 (h)
dove Rp+1 (h) è un infinitesimo in h di ordine maggiore o uguale a p + 1.
Dunque A(h) approssima α con un errore che tende a 0 per h → 0 con un
ordine di infinitesimo pari a 1. Se γ0 6= 0 e 0 < δ < 1, allora vale che
A1 (h) =
A(δh) − δA(h)
= α + γ̃2 h2 + · · · + γ̃p hp + R̃p+1 (h)
1−δ
i −δ
dove γ̃i = γ1−δ
. Quindi A1 (h) approssima ancora α ma ora l’errore tende a
zero con una velocità che dipende da h2 .
Se ora γ̃2 6= 0 il procedimento può essere ripetuto e otteniamo che A2 (h) =
A1 (δh)−δA1 (h)
approssima α con un errore che tende a zero con una velocità
1−δ 2
che dipende da h3 . Notiamo, però, che per poter calcolare A2 (h) dobbiamo
calcolare A1 (δh) che richiede il calcolo di A(δ 2 h) (oltre a A(δh) e A(h) che
già ci erano serviti).
Il procedimento può quindi essere generalizzato nel modo seguente:
Am,0 = A(δ m h)
m = 0, · · · , k
Am,i−1 −δ i Am−1,i−1
i = 1, · · · , k m = i, · · · , k
Am,i =
1−δ i
dove l’elemento Am,i approssima α con un errore che tende a zero come
(δ m h)i+1 .
63
7.2
Integrazione di Romberg
Si ottiene applicando l’estrapolazione di Richardson alla formula di integra!
n−1
X
f
(x
)
+
f
(x
)
0
n
zione dei Trapezi composita data da I˜n = h
+
f (xi )
2
i=1
e x0 = a, xi+1 = xi + h, xn = b che approssima la quantità
dove h = b−a
n
Rb
α = a f (x)dx.
Per prima cosa dobbiamo dimostrare che vale la seguente formula dell’errore,
nota come formula di Eulero-Maclaurin:
I˜n −
Z
b
f (x)dx =
a
k
X
γi h2i + (b − a)
i=1
P2k+2 (ξ) 2k+2 (2k+2)
h
f
(ξ)
(2k + 2)!
B2i
f (2i−1) (b) − f (2i−1) (a) , Bl sono i numeri
(2i)!
di Bernoulli e ξ ∈ [a, b]. Pm (x) = Bm (x − [x]) dove [x] indica la parte intera
di x e Bm (x) è il polinomio di Bernoulli di grado m.
Prima di poter dimostrare la formula, dobbiamo richiamare alcune proprietà
dei polinomi e dei numeri di Bernoulli.
I polinomi di Bernoulli Bm (x) m = 0, 1, 2, · · · possono essere definiti dalla
seguente formula ricorsiva:
dove f ∈ C 2k+2 ([a, b]), γi =
B0 (x) = 1
R1
(7.4)
0
Bm
(x) = nBm−1 (x) e
Bm (t)dt = 0 perm ≥ 1
0
Rx
Quindi per m ≥ 1 si ha m a Bm−1 (t)dt = Bm (x) − Bm (a) e dunque Bm (1) =
Bm (0). Il valore Bm (0) è il numero di Bernoulli di indice m.
Vale inoltre questo risultato:
∞
X
xetx
xm
= x
Bm (t)
m!
e −1
m=0
che, per t = 0, fornisce
∞
X
m=0
Bm
xm
x
= x
= g(x)
m!
e −1
È quindi facile verificare che g(x) − g(−x) = −x e dunque
∞
∞
∞
X
X
xm X
xm
x2m+1
Bm
−
Bm (−1)m
= −x ⇒ 2
B2m+1
= −x
m!
m!
(2m
+
1)!
m=0
m=0
m=0
64
∞
X
x2m+1
ricaviamo
B2m+1
essendo b1 =
=0
(2m + 1)!
m=1
che, dovendo essere verificata per ogni x implica che B2m+1 = 0 per m =
1, 2, 3, · · · . Quindi, tranne B1 , i numeri di Bernoulli di indice dispari sono
nulli.
Dimostriamo ora la formula di Eulero-Maclaurin sull’intervallo [0, N ] con N
intero.
Vediamo ora alcune proprietà delle funzioni Pm (j). Dalla definizione è evidente che si tratta di funzioni periodiche di periodo 1, inoltre dalle proprietà
dei numeri di Bernoulli segue che Pm (j) = Bm (j − j) = Bm per ogni j intero
e m > 1 e quindi si tratta di funzioni continue. Per quanto riguarda P1 , invece, si tratta di una funzione discontinua perchè P1 (j + ) = B1 = − 12 mentre
P1 (j − ) = −B1 = 21 . Consideriamo ora:
Z j+1
Z N
N
−1 Z j+1
N
−1
X
X
j+1
f 0 (t)P1 (t)dt =
f (t)dt =
f (t)dt =
[f (x)P1 (x)]j −
− 12
0
−B1
j
j=0
N
−1
X
j
j=0
Z
N
(f (j + 1) + f (j)) −
f 0 (t)P1 (t)dt
0
j=0
avendo integrato per parti in quanto P1 (t) è una primitiva di 1 in tutti gli
intervalli [j, j + 1]. Quindi
Z N
Z N
˜
f 0 (t)P1 (t)dt
f (t)dt =
IN −
0
0
Usando la formula ricorsiva e l’integrazione per parti, abbiamo che:
Z N
N
−1 Z j+1
X
0
f 0 (t)P1 (t)dt =
f (t)P1 (t)dt =
0
N
−1
X
j=0
j=0
f 0 (t)P2 (t)
2
j+1
j
j
1
−
2
Z
!
j+1
f 00 (t)P2 (t)dt
j
B2 0
1 N 00
(f (N ) − f 0 (0)) −
f (t)P2 (t)dt
2
2 0
Applicando iterativamente la stessa tecnica troviamo che:
Z N
k
X
Bj (j−1)
I˜N −
f (t)dt =
f
(N ) − f (j−1) (0) +
(−1)j
j!
0
j=2
Z N
Pk (t)
(−1)k
f (k) (t)
dt
k!
0
sfruttando il fatto che i Bj sono nulli per j dispari, operando un cambio
di variabili tali che [0, N ] −→ [a, b] e sfruttando il teorema del valor medio
otteniamo la formula 7.4.
Z
=
65
Osservazione: una immediata conseguenza di 7.4 è che la formula dei trapezi
composita è estremamente accurata se f (x) è una funzione periodica.
Il metodo di integrazione di Romberg si ottiene applicando l’estrapolazione
di Richardson con δ = 21 alla formula dei trapezi composita su 2k k > 0
sottointervalli di [a, b] di ampiezza costante h = b−a
. Tenendo conto che
2k
nella formula dell’errore non compaiono gli esponenti dispari, avremo allora
la formula:
Am,0 = I˜2m
m = 0, · · · , k
2i
Am,i =
Am,i−1 −( 21 ) Am−1,i−1
2i
1−( 12 )
i = 1, · · · , k
m = i, · · · , k
ovvero
Am,0 = I˜2m
m = 0, · · · , k
4i Am,i−1 −Am−1,i−1
i = 1, · · · , k m = i, · · · , k
Am,i =
4i −1
7.3
Integrazione automatica
Per integrazione automatica, si intendono delle procedure che, utilizzando più
valori calcolati di un certo integrale, consentono di stimare l’errore tra il valore approssimato e quello esatto e quindi permettono di calcolare l’integrale
a meno di una precisione prefissata dall’utente.
Si distinguono principalmente due tipi di metodi, quelli non adattivi in cui i
nodi della formula di quadratura vengono scelti equispaziati su tutto l’intervallo di integrazione e quelli adattivi che invece permettono di infittire i nodi
solo in quelle zone dell’intervallo di integrazione in cui è maggiore l’errore
tra integrale esatto ed approssimato. Questi ultimi metodi sono in generale
più efficienti dal punto di vista computazionale perchè richiedono un minor
numero di valutazioni della funzione integranda, ma sono più complessi da
implementare in modo efficiente.
Cominciamo a studiare il caso non adattivo. Si tratta di trovare una formula
per stimare l’errore commesso tra l’integrale approssimato e quello esatto senza conoscere il valore di quest’ultimo. Abbiamo visto che che per le formule
composite vale una stima di convergenza del tipo:
e(h) = I˜h − I = Chp
dove h è la distanza (costante) tra due nodi consecutivi, p dipende dall’ordine del metodo e C dipende dalla derivata p-esima di f e dall’ampiezza
dell’intervallo di integrazione. Se ora raddoppiamo i nodi della formula di
quadratura, o meglio se dimezziamo h otteniamo la formula:
66
h
hp
e( ) = I˜h − I ' C p
2
2
2
dove varrebbe l’uguaglianza se cambiassimo il valore di C, se la derivata pesima) è limitata comunque il circa uguale è accettabile. Se ora dividiamo
membro a membro le due equazioni otteniamo:
I˜h − I
1
2
' p
˜
2
Ih − I
da cui ricaviamo:
I˜h − I
I˜h − I '
2
2p
e quindi:
2p I˜h − I˜h
I=
2
2p − 1
che possiamo riscrivere come:
I − I˜h '
I˜h − I˜h
2
2p − 1
dove ora il secondo membro può essere calcolato e quindi ci fornisce una
stima dell’errore della formula con passo h2 .
Quindi si può procedere nel seguente modo: sia parte con un numero dato n
di nodi per la formula di quadratura e si continua a raddoppiare il numero di
nodi finchè il secondo membro dell’ultima equazione non diventa più piccolo
della precisione richiesta moltiplicata per un fattore minore di uno.
2
Per costruire un metodo adattivo, invece, si procede nel modo seguente. Si
sceglie una formula di quadratura semplice (per esempio Simpson) e si applica
prima su tutto l’intervallo di integrazione ottenendo un valore approssimato
˜ quindi si suddivide l’intervallo in due parti uguali e si applica la stessa
I;
formula su entrambi i sottointervalli, la somma dei due valori ottenuti fornisce
un’altra stima dell’integrale su tutto l’intervallo che chiameremo I˜2 .
Vale allora che:
p
h
I − I˜2 ' C p f (p−1) (ξ)
2
I − I˜ = Chp f (p−1) (ξ)
67
facendo l’ipotesi che la derivata (p − 1)-esima di f non sia ”troppo variabile”.
Quindi, operando come per il caso non adattivo, otteniamo che:
|I˜ − I˜2 |
err = |I − I˜2 | ' p
2 −1
che ci permette di stimare l’errore |I − I˜2 |. Possiamo allora operare nel modo
seguente:
Fissata una precisione 1. calcolo I˜ e I˜2 e la stima err
2. se err < ho finito
3. altrimenti pongo =
tointervalli
2
e ripeto i punti precedenti su entrambi i sot-
in questo modo andrò ad infittire i nodi solo dove non ho raggiunto una
precisione sufficiente a garantire che sommando tutti i contributi l’errore
finale sia più piccolo di .
68