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