Comments
Description
Transcript
Integrazione numerica
Regola dei trapezi - Metodo di Simpson ed estensioni di ordine superiore Torna all'indice generale Supponiamo di voler calcolare l'integrale di una funzione f su un certo intervallo xa , xb e di conoscere la funzione solo agli estremi f xa , f xb . Senza ulteriori ipotesi abbiamo solo due condizioni e possiamo calcolare l'integrale di f approssimandola con una retta che passa per i punti f x a , x a e f x b , x b . La retta ha equazione r( x) a 0 a 1.x dove a 0 , a 1 sono le soluzioni del sistema r xa f xa r xb f xb 1 xa ovvero . 1 xb a0 f xa a1 f xb che ha per soluzione 1 xa 1 . 1 xb f xa x b. f x a xb simplify f xb f xa xb x a. f x b xa f xb xa L'equazione della retta che passa per x a e x b è quindi x b.f x a xb x a. f x b xa f xa xb . f xb xa 1 x b. f x a xb collect , x x x a. f x b xa f xa xb f xb .x xa Integrando tra x a e x b xb x b. f x a xb x a. f x b xa f xa xb f xb . x d x factor xa 1. f xb 2 f xa . xb xa xa nota come regola dei trapezi. Con una procedura analoga si calcola anche l'ordine successivo. Conoscendo la a b funzione anche in un punto intermedio dell'intervallo avremo infatti (f ( a ) f 0 , f f 1 ,f ( b ) f 2 ) 2 x0 2. h 1 1 x0 1 x0 1 2 x0 x0 h 2. h x0 x0 f0 h 2 2.h . 2 f1 f2 1 . x d x factor 2 1. . . h 4f1 3 f2 f0 x x0 questa espressione è come regola di Simpson Con la stessa procedura possiamo calcolare anche approssimazioni di ordine superiore 13 Suddividendo l'intervallo in 3 parti si ottiene la regola 3/8 di Simpson x0 3. h 1 1 2 x0 x0 h x0 1 3 x0 x0 2 h x0 1 x0 2. h x0 2 2.h 1 x0 3. h x0 3.h 2 f0 3 h . 1 f1 x . 2 x0 3 2.h f2 x x0 3.h 3 f3 x 3. . . h 3f1 8 d x factor 3.f 2 f0 f3 3 x0 Suddividendo l'intervallo in 4 parti si ottiene la regola di Bode x0 4. h 1 1 x0 3 2 x0 h x0 2 h x0 1 x0 2. h x0 2. h 2 1 x0 3. h x0 3. h 2 1 x0 4. h x0 2 4. h 1 4 x0 x0 x0 3 h x0 x0 2. h 3 x0 3. h 3 x0 3 4. h 4 h x0 2. h 4 x0 3. h 4 x0 4 4. h . x0 = f0 1 f1 x f2 . 2 x d x= 3 f3 x f4 x 4 2. . . h 7 f0 45 32 . f 1 12 . f 2 32 . f 3 7 . f4 Analizziamo ora che accuratezza ci dobbiamo aspettare da un generico ordine di sviluppo. Le formule indicate all'ordine n sarebbero corrette se f fosse esattamente un polinomio di grado n. La funzione f tuttavia si differenzia in generale da un polinomio (in effetti dal suo polinomio di Taylor di grado n) in quanto ha le derivate di ordine n 1 diverse da zero. L'errore dovuto ad un troncamento del polinomio all'ordine n 1 su un intervallo h è di ordine n (n 1) n 1 O h .f . Integrando la funzione approssimata di conseguenza il risultato sarà di ordine O h se n è dispari. n 2 Sarà invece di ordine O h se n è pari perchè il termine dispari relativo all'errore grazie al fatto di aver scelto le posizioni su cui si calcola la funzione equispaziate, e quindi simmetriche sull'intervallo di integrazione, si annulla. Riassumendo avremo quindi che Trapezi 1 Simpson 2 h. f xb 2 f1 Simpson 3/8 3 Bode 4 3 4. f 2 3. . h f3 8 3.f 1 2. . . h 7 f0 45 32 . f 1 3 (2) O h .f f xa f3 3. f 2 12 . f 2 5 (4) O h .f .h 3 5 (4) O h .f f0 32 . f 3 7 . f4 7 (6) O h .f In generale tuttavia non siamo interessati al calcolo di un integrale su un dominio h ma su un intervallo esteso. Le formule elencate devono essere composte in modo da coprire tutto l'intervallo di integrazione. Con la regola dei b a trapezi avremo ad esempio, con h N N b 1 xi h f( x ) dx a f( x ) dx i=0 xi h. f 2 0 2. f 1 2 . ...... 2 . fN 1 fN O b a N 3 .N Visto che l'intervallo di integrazione è fissato dal problema, riducendo h cresce il numero di intervalli su cui è 1 approssimato l'integrale. La regola dei trapezi converge quindi con l'ordine O . La stessa procedura può essere 2 N 14 applicata alla regola di Simpson per calcolare una sequenza che converga con l'ordine O 1 N 4 . Applicando la regola ripetutamente su intervalli consecutivi si ottiene xi h N b f( x ) dx a h. f( x ) dx xi i=1 1. f 3 1 4. f 3 2 2. f 3 3 .... 2. f 3 N 2 4. f 3 N 1 1. f 3 N O (b a) N 5 4 Possiamo scrivere a questo punto una routine che data la funzione f ( x ) , ne calcoli l'integrale. Il diagramma di flusso è in questo caso molto semplice TrapeziN ( f , x , N ) h x1 x0 N 1 S 0.5 . v x0 N è il numero di punti su cui è calcolato l'integrale, divido quinti l'intervallo totale per il numero di intervalli risultanti f x1 Preparo l'integrale sommando nella variabile S il valore della funzione agli estremi ed il valore dell'ascissa v f x0 for i ∈ 2 .. N Calcolo la funzione sulle ascisse nell'intervallo, distanziate di h 1 v v h S S f( v ) Restituisco il risultato dell'integrale S.h Nella figura seguente è rappresentato l'errore risultante dal calcolo dell'integrale della funzione f ( x ) sin ( x ) sull'intervallo ( 0 , π ) in funzione del numero di suddivisioni dell'intervallo N 4 , 6 .. 40 . La curva continua è la funzione 2 Errore (1/N^2 è la linea continua) N 0.2 0.1 0 0 10 20 30 40 Numero di valutazioni di f, N Questa routine assume che il numero di suddivisioni sia scelto a priori. In pratica tuttavia quello che si desidera è di calcolare un integrale con un certo grado di accuratezza, e di scegliere il numero di suddivisioni necessario in funzione di questa accuratezza. A tal fine risulta utile una routine che permette di valutare l'integrale e di incrementare il numero N senza per questo dover ricalcolare la funzione integranda in posizioni in cui il calcolo è gia stato effettuato. La seguente routine esegue questo compito suddividendo l'intervallo in potenze di due La routine che calcola l'integrale parziale è la seguente 15 TrapN ( f , a , N , ∆ ) v a j 0 0.5 . ∆ Parziale Trasla l'inizio dell'intervallo di ∆/2 ed inizializza le variabili 0 Calcola la funzione su intervalli equispaziati ∆ while j< N Parziale xj v v v j j Parziale f( v ) ∆ 1 Restituisce la somma parziale Parziale La seguente routine Trapezi, utilizzando la routine descritta, calcola l'integrale con la regola dei trapezi con accuratezza ε Trapezi ( f , x , ε ) 0.5 . f x0 S ∆ x1 I S.∆ it 1 f x1 x0 for i ∈ 0 .. 40 S S it it . 2 TrapN f , x0 , it , ∆ ∆ ∆ 2 Iv I S.∆ I I return if I i 2 1 Iv <ε Piuttosto che scrivere un algoritmo analogo per la regola di Simpson, consideriamo la seguente regola di somma di Eulero - Mclauren b f( x ) dx a h. f 2 0 + B2 2. f 1 . h2 2! . 2 . ...... (1) f 2 . fN 1 (1) N f 1 .... f N ... B2 . k ( 1) . . h2 k ( 2 . k) ! . ( 2 .k f ( 2 .k 1) N f 1) 1 I numeri Bk sono noti come numeri di Bernoulli e sono definiti in base alla seguente funzione generatrice ∞ t t e 1 Bn . n=0 n t n! t moltiplicati per n ! . L'espansione ( 1 ) e 1 rappresenta l'espressione dell'errore commesso con la regola dei trapezi, in termini delle derivate successive della funzione calcolate agli estremi dell'intervallo ( a , b ) . Osserviamo che, oltre al fatto che la serie contiene solo potenze ovvero sono i coefficienti dello sviluppo in serie di Taylor della funzione t 2 pari di h, all'ordine O h , il valore dell'errore ottenuto suddividendo l'intervallo in N sottointervalli, è esattamente 4 volte l'errore che si ottiene suddividendolo in 2 . N sottointervalli. Potremo quindi scrivere 16 b b f( x ) dx a SN 2 E 2.h 4 E 4. h ed anche .... f( x ) dx E4 E. 2 h 4 S 2 .N a 16 . h4 ..... dove h rappresenta il passo della prima suddivisione. Combinando le due espressioni possiamo eliminare l'errore 2 all'ordine O h b f( x ) dx a 4. S . 3 2N 1. S 3 N 13 . E 4 12 . h4 ..... 1/|Errore| e questa non è altro che la regola di Simpson (dei 4/3) ricavata precedentemente. Nella figura seguente è rappresentato in scala doppio-logaritmica il grafico dell'inverso dell'errore commesso sulla funzione f ( x ) sin ( x ) integrata sull'intervallo ( 0 , π ) per N 6 , 8 .. 60 1 .10 5 1 .10 4 1 .10 3 100 10 1 10 100 Numero di valutazioni di f, N Simpson Trapezi Una routine che implementi il metodo di Simpson con un controllo dell'errore è quindi la seguente: Simpson ( f , x , ε ) S 0.5 . f x0 ∆ x1 Trap f x1 x0 S.∆ I Trap it 1 for i ∈ 0 .. 40 TrapN f , x0 , it , ∆ S S it it . 2 ∆ ∆ 2 Trap v Iv Trap I S.∆ Trap Trap . 4 I Trap v 3 I return i 2 if I 1 Iv <ε 17 v Verifichiamo questa routine calcolando 0 , 0.1 .. π . Nel grafico seguente (figura a sinistra) è sin ( x ) d x per v 0 v rappresentato in funzione di v il modulo della differenza sin ( x ) d x ( 1 cos ( x ) ) dove l'integrale è calcolato 0 rispettivamente con il metodo dei Trapezi e con la routine suindicata per il metodo di Simpson, entrambe con 5 accuratezza ε 10 . Nella figura di destra è invece rappresentato il numero di valutazioni della funzione integranda utilizzate effettivamente dalle routine che implementano il metodo dei Trapezi e di Simpson in funzione della variabile v 4 .10 6 3 .10 6 600 2 .10 6 1 .10 6 N Accuratezza 400 200 0 0 0 1 2 3 4 0 1 2 3 4 v v Trapezi Simpson Trapezi Simpson E' interessante la possibilità di estendere questo metodo anche agli ordini superiori. Dalla regola di somma di Eulero-McLaurin abbiamo f ( x ) d x S0 2 ∆ . E1 4 ∆ . E2 .... Le quantità incognite sono per noi (N in 2 1) ∆ 2 .N . B2 . n . . f( 2 n 1 ) En 1 b . ( 2 n) ! EN f ( x ) d x E1 E3 .. EN e cioè N ( 2 .n f 1) a 1. E' necessario quindi valutare la funzione punti per determinare queste quantità. In questo modo si determina automaticamente il valore dell'integrale eliminando l'errore sino all'ordine 2 . N . Introduciamo u ∆2 , in forma matriciale abbiamo 1 1 2 u u u u 2 2 u 2 N 2 .2 2 .N 2 . 2 .2 . 2 u .... 2 u 1 N .... . . . 2 . u . . 2 . n. m . 2 2 u 1 2 .N 2 u 2 .2 . N 2 E1 . n . f( x ) dx EN N u . 2 .N S0 S2 . . S 2 .N 2 2 In effetti a noi non interessa calcolare i termini E1 , E2 .. EN , ma piuttosto solo l'integrale di f , ovvero il coefficiente r0 . Possiamo quindi eliminare la dipendenza dal parametro u, ovvero dall'internallo di integrazione, ridefinendo gli errori E1 , E2 .. EN 2 N u . E1 , u . E 2 .. u . EN . La matrice diventa in questo caso 18 1 1 1 1 1 1 2 2 2 .N 2 2 . 2 .2 . 2 1 .... 2 .2 1 1 1 .... . . . . . 1 1 1 2 .N 2 2 .2 . N 2 .N S 2 .N EN 1 . 2 . . 2 O utilizzando una notazione sintetica, .U . r s dove 1 avremo per l'elemento generico di Un, m . ( 2 ( n .m ) ) 2 . . . 2 . n. m S2 E1 . 2 1 S0 f( x ) dx 2 2 Per estrarre il primo elemento dalla soluzione scriviamo 1 f( x ) dx ( 1 0 . . 0 ) . U . s r0 Supponiamo quindi che questo integrale si possa scrivere come S0 N w i . S 2 .i f( x) d x w 0 . . wN . i=0 S2 . S2 . N Il vettore w deve quindi soddisfare l'identità w 0 . . wN (1 0 . . 0 ) .U 1 Moltiplicando a destra per U e trasponendo (U è simmetrica) si ottiene U. w0 1 w1 0 . . wN 0 e cioè il vettore dei pesi è la soluzione di un sistema lineare che può essere determinata una volta per tutte prima dell'inizio dell'integrazione. U è una matrice di tipo Vandermond 1 x0 x0 1 x1 2 .... x0 . . x1 Matrice di Vandermond: 1 . . . . 1 . . . . 1 xN xN 2 .... xN N N N ed il determinante di una matrice di Vandermond è dato dalla produttoria xi xj . Nel nostro caso particolare, ( i< j ) xn 1 n e la soluzione si scrive nella forma 4 19 xi xj ( i< j ) x 0 k wk xi xj ( i< j ) Per ora ci limitiamo ad utilizzare le routine di Mathcad per la risoluzione dei sistemi lineari ed a fornire il valore 1 numerico dei pesi w per N 5. Definiamo gli indici m 0 .. N ed n 0 .. N , la matrice Un, m ed il vettore 2 . ( n. m ) 2 vn 0 eccetto v0 1. Il vettore w è semplicemente w T w = 1.352 . 10 9 1.844 . 10 6 1 U . v . Nel nostro caso 5.017 . 10 4 0.032 0.483 1.452 La seguente una routine che valuta il vettore w che utilizzeremo per implementare l'integrazione con il metodo di Simpson esteso. w(N) for i ∈ 0 .. N vi 0 Definisco il vettore v for j ∈ 0 .. N Ui , j v0 U i .j Definisco la matrice U 0.25 1 1 1 2 .i .j 2 v Calcolo il vettore w Ed ecco infine la routine che, sfruttando la precedente ed il mattone fondamentale che implementa la regola dei trapezi, calcola la regola di Simpson all'ordine più elevato possibile con gli N punti a disposizione. Questo metodo è noto come metodo di Romberg Romberg ( f , x , ε ) S 0.5 . f x0 ∆ x1 I S.∆ it 1 f x1 Inizializza le variabili x0 for i ∈ 0 .. 20 TrapN f , x0 , it , ∆ S S it 2 . it ∆ 0.5 . ∆ S.∆ Trapi Iv I Calcola la somma parziale dei valori di f Conserva nel vettore Trap gli integrali parziali valutati con il metodo dei Trapezi I Conserva il valore precedente dell'integrale per una stima dell'errore e valuta l'integrale come prodotto scalare con il vettore w w ( i) . Trap I return i 2 if I 1 Iv <ε Restituisce il risultato in modo analogo alle altre routine di esempio riortate 20 v Verifichiamo anche questa routine calcolando 0 , 0.1 .. π . Nel grafico seguente (figura a sinistra) sin ( x ) d x per v 0 v è rappresentato in funzione di v il modulo della differenza sin ( x ) d x ( 1 cos ( x ) ) dove l'integrale è calcolato 0 rispettivamente con il metodo di Simpson e con la routine suindicata per il metodo di Romberg, entrambe con 8 accuratezza ε 10 . Nella figura di destra è invece rappresentato il numero di valutazioni della funzione integranda utilizzate effettivamente dalle routine che implementano i due metodi in funzione della variabile v 0 , 0.1 .. π Accuratezza 1 . 10 9 1 .10 10 1 .10 11 1 .10 12 1 .10 13 1 .10 14 1 .10 15 1 .10 16 1 .10 17 150 100 N v 50 0 1 2 3 4 0 0 1 v 2 3 4 v Simpson Romberg Simpson Romberg Per confrontare la velocità di convergenza dei vai metodi, nella figura seguente è riportato il grafico dell'inverso M 1/|Errore| dell'errore commesso in funzione del numero di valutazioni della funzione N 2 , con M 1 , 2 .. 5 . Si osservi il comportamento non lineare della curva corrispondente al metodo di Simpson Esteso, dove l'ordine di convergenza cresce con il numero di punti su cui è valutata la funzione integranda. 1 .10 12 1 .10 11 1 .10 10 1 . 10 9 1 . 10 8 1 . 10 7 1 . 10 6 1 . 10 5 1 . 10 4 1 . 10 3 100 10 1 1 10 100 Numero di valutazioni di f, N Simpson Trapezi Romberg 21 L'implementazione fornita del metodo di Romberg non è ne l'unica ne probabilmente la migliore. Se da un lato la scelta di utilizzare il vettore dei pesi tabulati w consente di ridurre al minimo le operazioni da compiere, dall'altro ci sono due controindicazioni intrinseche che sono, da una parte il fatto che una volta tabulati i valori w , siamo limitati nel D numero di suddivisioni dell'intervallo al numero 2 1 dove D è la dimensione massima di w . Dall'altra, osserviamo che il vettore w contiene valori sempre più piccoli a mano a mano che la sua dimensione cresce, ed è moltiplicato per numeri sempre crescenti, relativi alle somme parziali che contengono un numero sempre crescente di termini. L'alternativa è la seguente. Riprendiamo la regola di Eulero Mclaurin Stiamo approssimando la nostra funzione con un polinomio, e poi stiamo integrando. Il polinomio sarà in generale di grado pari al numero di punti in cui è valutata la funzione (meno uno). 2 ∆ . E1 f ( x ) d x S0 4 ∆ . E2 .... ∆ 2 .N . EN ed invertiamola nel modo seguente. S( ∆ ) 2 ∆ . f( x) d x E1 4 ∆ . E2 .... ∆ 2 .N . EN ovvero il termini relativo alle somma ottenuta con il metodo dei trapezi, è esprimibile come un polinomio in ∆2 , il cui termine noto è l'integrale da calcolare. Conosco le somme parziali N 1 valori di ∆ ed ovviamente i valori di ∆2 . Posso quindi utilizzare la routine che calcola il polinomio di Legendre che passa per questi punti. Se valuto questo polinomio in ∆ 0 ottengo una routine che stima l'integrale allo stesso ordine di quella descritta precedentemente (N). La seguente è una routine che calcola il polinomio interpolante, analoga a quella riportata nella sezione relativa all'interpolazione, ottimizzata per il calcolo del polinomio in ∆ 0 polint ( Dx , Dy ) n last( Dx ) P Dyn ns n C Dy D Dy 1 for m ∈ 1 .. n for i ∈ 0 .. n dy m T Ci 1 Di Dxi Dxi m Ci T. Dxi Di T. Dxi m C ns 1 if ( 2 . ns ) < ( n m) otherwise dy Dns P ns ns P dy 1 P dy 22 La seguente è invece una routine che implementa il metodo di Romberg con il metodo esposto Romberg2 ( f , x , ε ) ∆ x1 St 0.5 . x1 it 1 H0 x0 x0 . f x0 Inizializza le variabili f x1 1 for j ∈ 0 .. 20 St 0.5 . St Sj St it 2 . it ∆ 0.5 . ∆ ∆ . TrapN f , x0 , it , ∆ Calcola la somma parziale dei valori di f if j> 0 SS polint ( H , S ) return SS0 j 2 Sj 1 Sj Hj 1 0.25 . Hj Calcola il polinomio interpolante if SS1 < ε Restituisce il risultato in modo analogo alle altre routine di esempio riportate 1 Conserva in S e H le somme parziali ed i valori dell'intervallo v Verifichiamo anche questa routine calcolando 0 , 0.1 .. π . Nel grafico seguente (figura a sinistra) sin ( x ) d x per v 0 v è rappresentato in funzione di v il modulo della differenza sin ( x ) d x (1 cos ( x ) ) dove l'integrale è calcolato 0 8 9 1 . 10 10 1 .10 11 1 .10 12 1 .10 13 1 .10 14 1 .10 15 1 .10 16 1 .10 17 1 .10 40 30 N Errore rispettivamente con le routines Romberg e Romberg2, entrambe con accuratezza ε 10 . Nella figura di destra è invece rappresentato il numero di valutazioni della funzione integranda utilizzate effettivamente dalle routine che implementano i due metodi in funzione della variabile v 20 10 0 1 2 3 4 0 0 1 v Romberg 2 Romberg 2 3 4 v Romberg 2 Romberg Le due routines in questo caso presentano risultati analoghi. In generale, per una routine che deve calcolare un gran numero di volte lo stesso integrale o integrali simili tra loro, è preferibile la prima, per una routine di integrazione di carattere generale è invece preferibile la seconda. Un'ultima considerazione. Ordine elevato non significa necessariamente precisione elevata. E' necessario ricordare come nell'espansione in termini della regola di Eulero McLaurain (come del resto nello sviluppo d Taylor), compaiano le derivate di ordine sempre più elevato con il crescere dell'ordine, calcolate agli estremi. Questo può portare al crescere dll'ordine ad un crescita del coefficiente che moltiplica l'errore. Ordine elevato significa accuratezza solo per quelle funzioni che possono essere approssimate efficientemente con dei polinomi. Torna all'indice generale 23