Sei sulla pagina 1di 9

Integratore di Cavalieri - Simpson adattivo

di Alberto Cella

Uno dei problemi largamente studiati nellAnalisi Numerica consiste nel pro-
porre diversi algoritmi in grado di calcolare lintegrale denito di una funzione
sopra uno specico intervallo.
Lesigenza di non a dare questo compito unicamente solo ad un integra-
tore motivata dalla presenza di diverse complicazioni di ordine tecnico, che
vanno dalla tipologia di funzione presa in esame sul dominio di riferimento, al
compromesso tra velocit di esecuzione dei calcoli e accuratezza della risposta
dellelaboratore.
In questa memoria tecnica vogliamo discutere un integratore potente che
annovera tra le sue caratteristiche peculiari quella di potersi adattare a situazioni
in cui la funzione integranda pu manifestare forti pendenze.
La formula di base che viene implementata nellalgoritmo quella di Cavalieri
- Simpson e verr esaminata in dettaglio nel primo paragrafo.
Lobiettivo di un integratore adattivo consiste nel fornire una approssimazione
del valore dellintegrale entro i limiti di una tolleranza ssata a priori, applicando
una distribuzione non uniforme del passo di integrazione sullintervallo.

Algoritmo di Cavalieri-Simpson a passo uniforme

Supponiamo di avere una funzione reale f (x) integrabile in un intervallo


chiuso [a; b], dove a e b sono due numeri reali tali che a < b.
Lo scopo del metodo fornire un valore approssimato dellintegrale denito
Z b
I= f (x)dx (1)
a

sullintervallo [a; b] sostituendo al posto di f il suo polinomio interpolatore P2 (x)


di grado 2 nei nodi x0 ; x1 ; x2 :
a+b
x0 = a , x1 = , x2 = b (2)
2
Grazie alla formula di interpolazione di Lagrange possiamo facilmente ricavare
lespressione analitica del polinomio suddetto:

(x x1 ) (x x2 ) (x x0 ) (x x2 )
P2 (x) = f (x0 ) + f (x1 )
(x0 x1 ) (x0 x2 ) (x1 x0 ) (x1 x2 )
(x x0 ) (x x1 )
+f (x2 ) (3)
(x2 x0 ) (x2 x1 )

1
Si noti che questa lunica espressione possibile di P2 (x) perch eettivamente
il polinomio di secondo grado che passa per i punti della funzione f nei nodi
voluti:
P2 (xi ) = f (xi ) 8i = 1; 2; 3
Indichiamo con L la lunghezza (positiva) dellintervallo [a; b], cio L = x2 x0
e andiamo a riscrivere il polinomio:
2f (x0 ) 4f (x1 )
P2 (x) = (x x1 ) (x x2 ) (x x0 ) (x x2 ) +
L2 L2
2f (x2 )
+ (x x0 ) (x x1 ) (4)
L2
Sia I2 (f ) lintegrale calcolato in [a; b] con il polinomio interpolatore P2 (x):
Z b Z b
I2 (f ) = P2 (x)dx f (x)dx (5)
a a
Per la propriet lineare lintegrale si scinde nella somma di tre contributi:
Z
(1) 2f (x0 ) x2
I2 = (x x1 ) (x x2 ) dx (6.1)
L2 x0
Z
(2) 4f (x1 ) x2
I2 = (x x0 ) (x x2 ) dx (6.2)
L2 x
Z x20
(3) 2f (x2 )
I2 = (x x0 ) (x x1 ) dx (6.3)
L2 x0

Tramite sostituzione di variabile ci si riconduce allintervallo [0; 1] con la seguente


legge di trasformazione:
x = x0 + t (x2 x0 ) t 2 [0; 1]
dierenziando poi si trova:
dx = (x2 x0 ) dt = Ldt
inne si ricavano i valori dei tre integrali:
Z
(1) 2f (x0 ) 1
I2 = [x0 x1 + t (x2 x0 )] [x0 x2 + t (x2 x0 )] Ldt =
L2 0
Z
2f (x0 ) 1 L
= + Lt ( L + Lt) dt =
L 0 2
2f (x0 ) 1 2 L
= L = f (x0 ) (7.1)
L 12 6
Z
(2) 4f (x1 ) 1
I2 = [x0 x0 + t (x2 x0 )] [x0 x2 + t (x2 x0 )] Ldt =
L2 0
Z 1
4f (x1 )
= (Lt) ( L + Lt) dt =
L 0
4f (x1 ) 1 2 2L
= L = f (x1 ) (7.2)
L 6 3

2
Z 1
(3) 2f (x2 )
I2 = [x0 x0 + t (x2 x0 )] [x0 x1 + t (x2 x0 )] Ldt =
L2 0
Z 1
2f (x2 ) L
= (Lt) + Lt dt =
L 0 2
2f (x2 ) 1 2 L
= L = f (x2 ) (7.3)
L 12 6
In conclusione la formula di Cavalieri-Simpson applicata alla funzione f sullintervallo
[a; b] :

L x0 + x2
I2 (f ) = f (x0 ) + 4f + f (x2 ) (8)
6 2
Vogliamo ora dare una stima allerrore che si commette utilizzando la formula
di C.S: Z x2
E2 (f ) = [f (x) P2 (x)] dx (9)
x0

Per ottenerla abbiamo bisogno prima del seguente risultato:

Proposizione 1. Sia f (x) una funzione denita in un dominio D e che sia


almeno di classe C 4 in un intorno Ix D del punto x 2 D: Allora la derivata
prima e la derivata seconda di f calcolata nel punto x si possono approssimare
come:
f (x + h) f (x h2 (3)
h)
f 0 (x) f (x) (10.1)
2h 6
f (x + h) 2f (x) + f (x h) h2 (4)
f 00 (x) f (x) (10.2)
h2 12

Dimostrazione.
Lo sviluppo di Taylor no al 5 ordine in avanti e indietro

h2 00 h3 000 h4 IV h5 V
f (x + h) = f (x) + hf 0 (x) + f (x) + f (x) + f (x) + f (x) + o(h5 )
2! 3! 4! 5!
h2 h3 000 h4 IV h5 V
f (x h) = f (x) hf 0 (x) + f 00 (x) f (x) + f (x) f (x) + o(h5 )
2! 3! 4! 5!
Sottraendo membro a membro si ha
h3 000 h5
f (x + h) f (x h) = 2hf 0 (x) + f (x) + f V (x) + o(h5 ) =
3 60
3
h
= 2hf 0 (x) + f 000 (x) + o(h4 )
3
e sommando si ottiene
h4 IV
f (x + h) + f (x h) = 2f (x) + h2 f 00 (x) + f (x) + o(h4 )
12

3
Dalla prima possiamo stimare la derivata prima:

f (x + h) f (x h) h2 000
f 0 (x) = f (x) + o(h3 )
2h 6
e dalla seconda possiamo ricavare una stima di f 00 (x):

f (x + h) 2f (x) + f (x h) h2 IV
f 00 (x) = f (x) + o(h2 )
h2 12
e la dimostrazione conclusa.

Proseguiamo nella ricerca della stima della formula dellerrore (9) e svilup-
piamo la f nel punto medio x1 di [a; b] in serie di Taylor no al 4 ordine:

h2 00 h3 h4
f (x) = f (x1 ) + hf 0 (x1 ) + f (x1 ) + f 000 (x1 ) + f IV (x1 ) + o(h4 )
2 6 24
dove h = x x1 : Integrando f (x) in [x0 ; x2 ] si ha
Z x2
L
h2 h3 h4 h5 IV 2

f (x)dx = f (x1 )h + f 0 (x1 ) + f 00 (x1 ) + f 000 (x1 ) + f (x1 ) =


x0 2 6 24 120 L
2

L3 00 L5 IV
= f (x1 )L + f (x1 ) + f (x1 )
24 1920
Per la proposizione precedente andiamo a sostituire lo sviluppo della derivata
seconda e otteniamo:
Z x2 " #
L 2
L3 f (x1 + L2 ) 2f (x1 ) + f (x1 L2 ) 2 IV L5 IV
f (x)dx = f (x1 )L + f (x) + f (x1 ) =
x0 24 L 2 12 1920
2
L L5 IV L5 IV
= f (x1 )L + [f (x2 ) 2f (x1 ) + f (x0 )] f (x) + f (x1 ) =
6 1152 1920
L 1
= [f (x2 ) + 4f (x1 ) + f (x0 )] L5 f IV ( )
6 2880
Senza alcuna pretesa di rigore abbiamo cos determinato lerrore che si ot-
tiene applicando la formula di C.S. dove un punto non specicato interno
ad [a; b]:
L5 IV
E2 (f ) = f ( ) (11.1)
2880
Alcuni testi riportano la formula relativa alla semiampiezza h = L=2 dellintervallo
[a; b]:
h5 IV
E2 (f ) = f ( ) (11.2)
90
Naturalmente nella teoria dellintegrazione numerica non si usa la formula di C.
S. in quanto tale, ma si genera lungo lintervallo [a; b] una griglia su cientemente
estesa di nodi in cui si applica ripetutamente la formula ogni tre nodi consecutivi.

4
Pi precisamente questo equivale ad approssimare la funzione integranda f
attraverso i cosiddetti polinomi interpolatori compositi.
Supponiamo allora di suddividere lintervallo [a; b] in m sottintervalli con
m 1, di ampiezza identica H = (b a)=m e andiamo a collocare i nodi di
quadratura xk = a + kH=2 per ogni k = 0; ::::; 2m:
In tal caso dobbiamo pensare di applicare la formula di C.S. ogni tre nodi
consecutivi:
H H
I2;m = [f (x0 ) + 4f (x1 ) + f (x2 )] + [f (x2 ) + 4f (x3 ) + f (x4 )] + ::
6 6
H
+::::: + [f (x2m 2 ) + 4f (x2m 1 ) + f (x2m )]
6
"m 1 m
#
H X X1 Xm
= f (x2r ) + 4 f (x2s+1 ) + f (x2r )
6 r=0 s=0 r=1

Raggruppando i termini ad indice pari si ha nalmente:


" m
#
H X1 m
X1
I2;m = f (x0 ) + f (x2m ) + 2 f (x2r ) + 4 f (x2s+1 ) (12)
6 r=1 s=0

Per quanto riguarda invece il calcolo dellerrore composito dobbiamo ricordare


prima il seguente Teorema del valor medio discreto di cui forniamo limmediata
dimostrazione:

Proposizione 2. Sia u(x) una funzione continua in [a; b] e siano dati s


punti xj in [a; b] ed s costanti j tutte positive. Esiste allora 2 [a; b] tale che
s
X s
X
j u(xj ) = u( ) j (13)
j=1 j=1

Dimostrazione. Sia um = min u(x) = u(xm ) e uM = max u(x) =


x2[a;b] x2[a;b]
u(xM ). Allora vera la disuguaglianza
s
X s
X s
X
um j j u(xj ) uM j
j=1 j=1 j=1
Ps
Sia ora U (x) = u(x) j=1 j , allora U (x) continua e per la disuguaglianza
Ps
precedente si ha U (xm ) j=1 j u(xj ) U (xM ). Allora per il teorema del
valor medio esiste 2 [a; b] tale che
s
X s
X
j u(xj ) = U ( ) = u( ) j
j=1 j=1

5
La dimostrazione analoga se i j fossero negativi.

Grazie al teorema precedente diventa facile stimare lerrore di quadratura


con polinomi compositi e pertanto esiste un valore compreso in [a; b] tale che:

Xm 5
1 H
E2 (f ) = f IV ( i ) =
i=1
90 2
5
m H
= f IV ( ) =
90 2
4
b a H
= f IV ( ) (14)
180 2

Dopo aver esposto tutte queste nozioni preliminari siamo ora in grado di af-
frontare il discorso sulladattivit della griglia apportando cos un notevole
miglioramento allintegratore di C.S.
Infatti non vogliamo soltanto limitarci a dare una stima dellintegrale, ma
desideriamo forzare lintegratore a restituire in output un valore che sia prossimo
a quello reale entro una pressata tolleranza.
Questo obiettivo si traduce nellabbandonare lipotesi di uniformit del passo
di integrazione lungo lintervallo considerato.
Un algoritmo ben congegnato adatta in modo automatico lampiezza del
passo in base al comportamento della funzione integranda, addensando mag-
giormente i nodi di quadratura non appena la funzione presenti variazioni pi
marcate.
Supponiamo di ssare una tolleranza massimale " e andiamo a considerare
il generico intervallo [ ; ] [a; b].
In base alla formula dellerrore per la formula di C.S. se volessimo ssare in
[ ; ] un passo h abbastanza accurato dovremmo teoricamente preoccuparci di
valutare le derivate quarte di f .
Echiaro che questa procedura assolutamente da scartare perch non pos-
siamo obbligare ogni volta lutente a valutare lentit dellerrore, cos appare
pi logico cercare una strada diversa senza studiare esplicitamente la funzione
f (IV ) (x):

Sempre in riferimento al sottointervallo [ ; ] deniamo:


Z
If ( ; ) = f (x)dx , h0 = ( ) =2 (15.1)

h0
Sf ( ; ) = [f ( ) + 4f ( + h) + f ( )] (15.2)
3
per cui lerrore diventa:

h50 (IV )
If ( ; ) Sf ( ; ) = f ( ) (16)
90

6
con 2 [ ; ]:
Per eliminare la dipendenza dalla derivata quarta utilizziamo di nuovo la
formula di C.S. separatamente ai due sottointervalli [ ; + h] e [ + h; ] :
A questo punto lintegrale approssimato vale :

Sf;2 ( ; ) = Sf ( ; + h) + Sf ( + h; ) (17)

e il nuovo errore commesso :

(h0 =2) h (IV ) i


5
If ( ; ) Sf;2 ( ; ) = f ( 1 ) + f (IV ) ( 2 )
90
dove 1 2 ( ; + h) e 2 2f ( + h; ):
Ipotizziamo per che f (IV ) non vari troppo allinterno di [ ; ] in modo
tale che f (IV ) ( 1 ) f (IV ) ( 2 ), allora possiamo concludere che esiste un certo
2 [ ; ] per cui :

h0 5 (IV )
If ( ; ) Sf;2 ( ; ) = f ( ) (18)
16 90
Appare evidente cos che la quantit "f ( ; ) = Sf ( ; ) Sf;2 ( ; ) si pu
stimare :
h50 (IV ) h0 5 (IV )
"f ( ; ) = If ( ; ) + f ( ) If ( ; ) f ( )
90 16 90
15 h50 (IV )
f ( ) (19)
16 90
In particolare ora sappiamo quanticare la stima dellerrore commesso appli-
cando le formule di C.S. perch combinando opportunamente i vari risultati si
ha infatti:
j"f ( ; )j
jIf ( ; ) Sf;2 ( ; )j (20)
15
Questa formula importantissima per la genesi del nostro algoritmo adattativo,
come vedremo in dettaglio tra poco, perch infatti ci consentir di modicare il
passo h dellintegrazione in maniera opportuna.
Nella pratica per si utilizza una stima pi grossolana dellerrore

j"f ( ; )j
jIf ( ; ) Sf;2 ( ; )j (21)
10
la ragione di cio quella di non sottovalutare eccessivamente lerrore per forzare
lalgoritmo a sviluppare ulteriori calcoli di elaborazione qualora occorresse avvic-
inarsi al valore esatto dellintegrale con un ampio margine di sicurezza.

Vediamo adesso come funziona questo algoritmo e indichiamo con:

1. A = ( ; ) lintervallo di integrazione attivo dove bisogna calcolare lintegrale.

7
2. S = (a; ) lintervallo di integrazione gi esaminato per il quale il test
sullerrore
j"f (a; )j a
"
10 b a
stato superato con successo.
3. N = ( ; b) lintervallo restante ancora da esaminare.

Il processo inizia ssando gli intervalli A = (a; b), S = ;, N = A e ponendo


il contatore JS dellintegrale uguale a zero, dove naturalmente ci si aspetta che
Rb
alla ne dellesecuzione del ciclo JS = JA a
f (x)dx:
Sia anche J( ; ) lintegrale approssimato di f sul generico intervallo ( ; ),
allora il metodo si esplica attraverso questi fondamentali passaggi:

1. Se il test sullerrore locale


j"f ( ; )j
"
10 b a
ha avuto successo allora si incrementa JS JS + J( ; ) e si aggiornano
gli intervalli:
S S[A , A=N , b

2. Se il test sullerrore locale non superato allora si dimezza A ponendo


come nuovo intervallo attivo

0 0 +
A=( ; ) con =
2
e si pone anche
N N [ ( 0; ) e 0

quindi si procede di nuovo alla stima dellerrore.

Talvolta pu capitare che il passo di integrazione diventi troppo piccolo spe-


cialmente in presenza di eventuali punti di singolarit per f e dunque per pre-
venire questo fenomeno conviene porre una limitazione sullampiezza di A:
Inne importante stabilire n da principio se la funzione integranda am-
metta punti singolari per adottare eventualmente strategie di calcolo diverse
opportunamente combinate con lalgoritmo adattivo.
Non intendiamo tuttavia addentrarci ulteriormente in questioni tecniche che
esulano dallo scopo principale di questo documento.
A conclusione di questo lavoro andiamo a riportare un esempio signicativo
che mette a confronto lintegratore composito di C.S. e quello adattivo.

8
ESEMPIO Consideriamo la funzione
ln(2x + 1)
f (x) =
(2x + 1)2
denita nellintervallo [0; 10] e calcoliamone lintegrale per mezzo dei due in-
tegratori, quello composito e quello adattivo, sapendo che il risultato atteso
vale Z 10
I= f (x)dx = [20 ln(21)]=42 0:403701:
0
Con lintegratore composito abbiamo ottenuto i seguenti risultati ampli-
cando di volta in volta il numero m di sottointervalli :

m = 20 : I = 0:401463
m = 40 : I = 0:403481
m = 60 : I = 0:403652
m = 80 : I = 0:403685
m = 100 : I = 0:403695
m = 120 : I = 0:403698
m = 140 : I = 0:403700

Si vede quindi che la convergenza alla 4 cifra decimale si raggiunta dopo


ben 140 iterazioni della formula C.S., mentre risultanti ben pi signicativi
sono stati ottenuti con lintegratore adattivo facendo scendere di volta in volta
la tolleranza:

tol = 0:1 : I = 0:240787; liv = 1


tol = 0:01 : I = 0:240787; liv = 1
tol = 0:001 : I = 0:403570; liv = 4
tol = 0:0001 : I = 0:403704; liv = 8

Allalgoritmo sono bastati solo 8 livelli di integrazione per raggiungere la 4


cifra decimale. Va notato per, che la formula della stima dellerrore non ha
funzionato nei 3 casi precedenti perch si scoperto che ci dovuto alla forma
curiosa della funzione che si impenna lievemente no al valore 0.3 (circa), per
poi decrescere lievemente per tutto il resto dellintervallo.
Evidentemente questo pennacchionon stato rivelato dallalgoritmo no a
quando non si deciso di ssare la tolleranza pi piccola tol = 0:0001:

Bibliograa:

A.Quarteroni, R.Sacco, F.Saleri, Matematica Numerica, 2 ed., Springer-


Verlag Italia, Milano, 2000.

data:
21/09/2008
ultima revisione:
22/05/2017