Calcolo numerico/Integrazione automatica

Da testwiki.
Vai alla navigazione Vai alla ricerca

Template:Calcolo numerico

Descrizione del problema

Problema: approssimare I(f)=∫abf(x)dx con una tolleranza assoluta εa o relativa εr assegnata.

Viene generata una sequenza di valori Ik con k=1,…,n, e con εk=I(f)−Ik(f) stima dell'errore commesso. Ci si arresta al passo k tale che

|I(f)−Ik(f)|≤max⁡{εa,εR∗|Ik(f)|}

con Ik(f) stima ragionevole dell'integrale.

Si possono scegliere due strategie.

  1. Strategia non adattiva: nella procedura non adattiva Ik(f) viene calcolato con una legge di distribuzione dei nodi fissata. Al passo k consideriamo m nodi equispaziati, e nel passo successivo k+1 ne consideriamo 2m. Utilizziamo le formule di Newton-Coves composite.
  2. Strategia adattiva: la distribuzione dei nodi non è fissata a priori, gli intervalli vengono partizionati a seconda delle esigenze e integrati separatamente.

Stima dell'errore a priori nella strategia non adattiva

Per stimare |I(f)−Ik(f)|, usiamo un criterio basato sull'estrapolazione di Richardson.

In base alle stime di errore a priori per le formule composite e n pari, si ha

I(f)−In,m(f)=(b−a)/(n+2)!∗Mnnn+3Hn+2f(n+2)(ξn)

Ad esempio, nel caso di Simpson n=2 e si ha:

I(f)−I2,m(f)=(b−a)/4!M225H4f(4)(ξm)=δm(ξm)∗H4formula 1

Riscrivo la formula dell'errore con 2m sottointervalli:

I(f)−I2,2m(f)=(b−a)/4!Mn25∗(H/2)4f(4)(ξ2m)=δ2m(ξ2m)∗H424formula 2

Sottraggo membro a membro le formule 1 e 2, e tenendo conto che

δm(ξm)≃δ2m(ξ2m)=δ

segue che

I2,m−I2,2m≃δH4−δH4/24=δH4∗15/16

cioè

δH4≃16/15∗|I2,2m(f)−I2,m(f)|

e sostituendo l'espressione trovata per δH4 nella formula 2

I(f)−I2,2m(f)≃1/16∗16/15(I2,2m(f)−I2,m(f))=1/15(I2,m(f)−I2,2m(f))

Possiamo stimare l'errore commesso con la formula di Simpson su 2m sottointervalli sulla base del calcolo di due formule di quadratura approssimata. Si stima che l'errore assoluto, quando si passa a 2m sottointervalli, si riduca di 15.

Stima dell'errore a posteriori nella strategia adattiva

Questa strategia è utile quando la funzione ha delle singolarità. Consideriamo un sottointervallo qualsiasi [α,β] dell'intervallo su cui si vuole integrare, e si pone

I(f(α,β))=∫αβf

Poniamo H0=(β−α)/2. Per il metodo di Simpson

sn(f(α,β))=H0/3(f(α)+4f(α+H0)+f(β))

e per l'errore si ha

I(f(α,β))−s(f(α,β))=−H5/90f(4)(ξ),ξ∈[α,β],formula 1

Consideriamo Simpson su 2 sottointervalli, e definiamo

s2=s(f(α,α+β/2))+s(f(α+β/2,β)),

I(f(α,β))−s2(f(α,β))=−H590∗[f(4)(ξ)+f(4)(η)],ξ∈[α,α+β/2],η∈[α+β/2,β]

Se assumiamo che le due derivate quarte siano circa uguali, si può scrivere

I(f(α,β))−s2(f(α,β))≃−H5/90∗2∗f(4)(ξ)

e siccome H=H0/2 si ha

I(f(α,β))−s2(f(α,β))≃−H05/32∗1/90∗2∗f(4)(ξ)

=−1/16H05/90f(4)(ξ)formula 2

e abbiamo un fattore 16 di riduzione dell'errore.

Sottraiamo membro a membro le formule di errore 1 e 2.

s2(f(α,β))−s(f(α,β))=−15/16H05/90∗f(4)(ξ)

H05/90f(4)(ξ)=[s(f(α,β))−s2(f(α,β))]∗16/15

e sostituendo nella formula 2:

I(f(α,β))−s2(f(α,β))=−1/16∗16/15∗(s(f(α,β))−s2(f(α,β)))

L'errore si stima come

−s(f(α,β))−s2(f(α,β))15

Questa è una stima a posteriori dell'errore applicando Simpson quando lo applichiamo al generico intervallo (α,β).

Test d'arresto

Nella pratica, si considera il seguente test

|I(f(α,β))−s2(f(α,β))|≤|s2(f(α,β))−s(f(α,β)|10

dove chiamiamo ε(f(α,β)) la quantità al numeratore.

Per ottenere la stima d'errore sull'intero intervallo [a,b], ci si arresta quando

|ε(f(α,β))|/10≤ε∗(β−α)/(b−a)

Infatti, se questo avviene, per l'errore totale si ha:

|I(f(α,β))−∑(αi,βi)t.c.⋃i(αi,βi)=(a,b)s2(f(αi,βi))

≃∑(αi,βi)|Ef(αi,βi)|/10≤∑(αi,βi)ε/(b−a)∗|βi−αi|≤ε

perché la somma delle lunghezze degli intervallini è la lunghezza di (a,b).

Algoritmo dell'integrazione automatica adattiva

Chiamiamo A l'intervallo di integrazione attivo in cui si deve calcolare l'integrale. Chiamiamo S l'intervallo di integrazione già esaminato, in cui il test

|E(f(α,β))/10|≤ε(β−α)/(b−a)

è verificato.

Chiamiamo N l'intervallo di integrazione non ancora esaminato.

Fissiamo i tre intervalli:

N=∅

A=[a,b]

S=∅

Al generico istante dell'algoritmo chiamiamo

Js=∫sf≃∫aαf

JA=∫αβf

Supponiamo di aver calcolato J(α,β)(f). Se il test d'arresto è verificato, aggiungiamo a Js(f) il nuovo pezzo di integrale, altrimenti dividiamo Ja(f) in due parti.

if(|E(f(α,β))10|≤εβ−αb−a)

S=S∪A

A=N

α=β

β=b

N=∅

else

α′=α+β/2

A=(α,α′)

α=α

β=α′

N=N∪(α′,β)

end

Sul calcolatore si controlla anche che (α,α′) non diventi eccessivamente piccolo.

Function quad

La function quad è il metodo utilizzato da Matlab per calcolare gli integrali ed è ricorsiva.

Consideriamo il punto medio di [a,b], poniamo h=(b−a)/C, e consideriamo i sei sottointervalli ottenuti ponendo:

x1=a,x2=a+h,x3=a+2h,x4=(a+b)/2,x5=b−2h,x6=b−h,x7=b

La distribuzione non è esattamente uniforme.

Si applica Simpson sui punti a tre a tre, e si ottiene l'approssimazione dell'integrale:

q=q¯1+q¯2+q¯3

dove q¯1,q¯2,q¯3 si ottengono applicando Simpson rispettivamente a x1,x2,x3, a x3,x4,x5 e a x5,x6,x7.

Poniamo q¯=∫a¯b¯f. Dividiamo (a¯,b¯) esattamente a metà, considerandone il punto medio c. Poniamo d=a¯+c/2 e=c/2+b¯, h=b¯−a¯.

Per poter applicare il test d'arresto, calcoliamo

q¯(s1)=h/6[f(a¯)+4f(c)+f(b¯)]

e raddoppiando il numero dei nodi:

q¯(s2)=H/12[f(a¯)+4f(d)+2f(c)+4f(e)+f(b¯)]

e poniamo poi q¯−q¯(s2)=(q¯(s2)−q¯(s1))/15 (è la stima dell'errore tra il passo 0 e il passo 2s).

Se |q¯−q¯(s2)|<ε, il metodo si arresta, altrimenti (a¯,b¯) viene spezzato in due parti.

q¯=∫a¯cf+∫cb¯f

e si applica ricorsivamente la function quad ai due sottointervalli ottenuti.

Abbiamo una chiamata ricorsiva alla funzione, l'integrale complessivo viene calcolato come somma di due integrali.

Data una funzione con una singolarità, si spezza l'integrale in quel punto e si fa la somma degli integrali separati.

Template:Avanzamento