Quadratura gaussiana e formule composite adattive
In questa pagina 6
Con trapezi e Simpson (Formule di quadratura - trapezi, Cavalieri-Simpson ed estrapolazione di RichardsonUna formula di quadratura approssima $\int_a^b f,dx$ con $\sum w_if(x_i)$ ottenuta integrando il polinomio che interpola $f$ nei nodi. Trapezio $\frac{b-a}2[f(a)+f(b)]$ (grado di esattezza 1, errore $-\frac{(b-a)^3}{12}f''(\xi)$), punto medio $(b-a)f(m)$ (grado 1, errore $+\frac{(b-a)^3}{24}f''(\xi)$), Cavalieri-Simpson $\frac{b-a}6[f(a)+4f(m)+f(b)]$ (grado 3, errore $-\frac{(b-a)^5}{2880}f^{(4)}(\xi)$). Composite con passo $h=\frac{b-a}n$: trapezi errore $-\frac{(b-a)h^2}{12}f''(\xi)$ (ordine 2, rapporto tra errori 4 se $h$ si dimezza), Simpson errore $-\frac{(b-a)h^4}{180}f^{(4)}(\xi)$ (ordine 4, rapporto 16, $n$ pari). Estrapolazione di Richardson: se $Q(h)=I+Ch^p+\dots$ allora $I\approx\frac{2^pQ(h/2)-Q(h)}{2^p-1}$; per i trapezi $p=2$ e $\frac{4T_{h/2}-T_h}3=S_{h/2}$; ripetuta dà la tabella di Romberg. Stima dell'errore a posteriori: $I-Q(h/2)\approx\frac{Q(h/2)-Q(h)}{2^p-1}$.Formule di quadratura - trapezi, Cavalieri-Simpson ed estrapolazione di Richardson →) i nodi sono fissati (equispaziati) e si ottimizzano solo i pesi. Ma anche i nodi sono incognite: una formula a nodi ha parametri (nodi e pesi), non . Sfruttandoli tutti si ottiene una formula con grado di esattezza invece di (o ): è la quadratura gaussiana. Nella seconda parte si affronta un problema pratico: una funzione che varia poco quasi ovunque e molto in una zona piccola (un picco, un tratto ripido) non si integra bene con un passo uniforme. La soluzione è un passo che si adatta da solo alla funzione.
1. Quadratura di Gauss-Legendre
Si lavora su e si cerca con incognite da scegliere in modo che la formula sia esatta per (sono condizioni).
Caso . Esattezza su : , . È la formula del punto medio, grado .
Caso . Incognite ; condizioni su : Per simmetria si cerca , : la prima dà , la seconda e la quarta sono soddisfatte, la terza dà , cioè : Con due soli valori di si integra esattamente ogni cubico. Controllo: dà , quindi il grado è esattamente .
Caso . Con lo stesso metodo (o con il teorema qui sotto): con pesi , grado .
| nodi | pesi | grado | errore su | |
|---|---|---|---|---|
| 1 | 1 | |||
| 2 | 3 | |||
| 3 | 5 | |||
| 4 | 7 |
I nodi sono le radici dei polinomi di Legendre , , ... (in generale ha radici reali distinte in ). Il perché è nel teorema seguente.
Teorema (D). Siano le radici di e i pesi interpolatori. La formula ha grado di esattezza .
Dimostrazione. Sia un polinomio di grado . Si divide per (grado ): con di grado . Allora:
- , perché è ortogonale a tutti i polinomi di grado ;
- , perché la formula con pesi interpolatori è esatta sui polinomi di grado (il polinomio interpolante di in nodi è stesso);
- , perché .
Quindi .
Inoltre i pesi sono positivi (si vede applicando la formula al quadrato di grado : ). I pesi positivi significano nessuna amplificazione degli errori sui dati (come per trapezi e Simpson), mentre le formule di Newton-Cotes con molti nodi equispaziati hanno pesi di segno alterno e diventano instabili.
Altro intervallo. Con il cambio di variabile , :
Esempio. con . Nodi: . Valori: , . Per confronto Simpson con tre valori ha errore : la formula gaussiana con meno valori è più precisa. Con (, valori ): , errore .
Errore. Per : Per la costante è ; l'errore dipende da , come Simpson (con costante ) ma con un valore in meno. Per è con .
Pro e contro. Più precisa a parità di valutazioni, converge per ogni continua quando (pesi positivi) e dà accuratezza altissima per funzioni analitiche. Però i nodi di e non si ricoprono: per controllare l'errore bisogna rifare tutte le valutazioni. Per questo i programmi (integral di MATLAB, quad di SciPy) usano le coppie di Gauss-Kronrod, che aggiungono nodi a una formula gaussiana per ottenere una seconda stima, e la differenza dà l'errore.
2. Formule composite gaussiane
Come per i trapezi si divide in sottointervalli di ampiezza e si applica Gauss nodi su ciascuno. L'errore locale è , la somma di errori dà ordine . Per l'ordine è 4 come Simpson composito, ma con costante invece di . A parità di valutazioni la differenza si riduce: Gauss usa intervalli di ampiezza e Simpson sotto-intervalli di ampiezza , quindi gli errori valgono e volte : Gauss è circa volte più preciso.
Esempio (numero di intervalli). con e : , quindi (12 valutazioni; Simpson ne richiede 13, i trapezi 477). In realtà dà già errore : la maggiorazione è prudente.
Dimezzando l'errore si divide per ( per ): rapporti osservati per .
3. Formule adattive
Una funzione come su varia moltissimo vicino a (, ) e quasi niente altrove. Un passo uniforme abbastanza piccolo per il tratto ripido è sprecato sul resto. L'idea: partire da un solo intervallo, stimare l'errore e dividere solo dove non basta.
Stima dell'errore con due Simpson. Su con punto medio si calcolano (Simpson su tutto l'intervallo e sulle due metà, con passo dimezzato). Poiché Simpson ha ordine , per la stima di Richardson (Formule di quadratura - trapezi, Cavalieri-Simpson ed estrapolazione di RichardsonUna formula di quadratura approssima $\int_a^b f,dx$ con $\sum w_if(x_i)$ ottenuta integrando il polinomio che interpola $f$ nei nodi. Trapezio $\frac{b-a}2[f(a)+f(b)]$ (grado di esattezza 1, errore $-\frac{(b-a)^3}{12}f''(\xi)$), punto medio $(b-a)f(m)$ (grado 1, errore $+\frac{(b-a)^3}{24}f''(\xi)$), Cavalieri-Simpson $\frac{b-a}6[f(a)+4f(m)+f(b)]$ (grado 3, errore $-\frac{(b-a)^5}{2880}f^{(4)}(\xi)$). Composite con passo $h=\frac{b-a}n$: trapezi errore $-\frac{(b-a)h^2}{12}f''(\xi)$ (ordine 2, rapporto tra errori 4 se $h$ si dimezza), Simpson errore $-\frac{(b-a)h^4}{180}f^{(4)}(\xi)$ (ordine 4, rapporto 16, $n$ pari). Estrapolazione di Richardson: se $Q(h)=I+Ch^p+\dots$ allora $I\approx\frac{2^pQ(h/2)-Q(h)}{2^p-1}$; per i trapezi $p=2$ e $\frac{4T_{h/2}-T_h}3=S_{h/2}$; ripetuta dà la tabella di Romberg. Stima dell'errore a posteriori: $I-Q(h/2)\approx\frac{Q(h/2)-Q(h)}{2^p-1}$.Formule di quadratura - trapezi, Cavalieri-Simpson ed estrapolazione di Richardson →):
Procedura (Simpson adattivo). Dati e la tolleranza per questo intervallo:
- calcola e ;
- se accetta e restituisci (valore estrapolato, ordine 6);
- altrimenti dividi in e e applica la procedura a ciascuna con tolleranza ; il risultato è la somma.
La tolleranza dimezzata a ogni divisione garantisce che, se tutte le stime sono corrette, la somma degli errori resti . Il costo: sull'intervallo iniziale servono valutazioni (, , e i punti medi delle due metà). Ogni intervallo figlio, per esempio , eredita dal padre i valori in , nel suo punto medio e in , quindi richiede solo nuove valutazioni (i punti medi delle sue due metà). Nell'esempio sotto si esaminano intervalli: valutazioni.
Esempio (a mano). , . Ogni riga è un intervallo esaminato:
| intervallo | esito | |||||
|---|---|---|---|---|---|---|
| 2,929293 | 2,531407 | 0,01500 | dividere | |||
| 1,924603 | 1,815824 | 0,00750 | dividere | |||
| 1,276455 | 1,255718 | 0,00375 | dividere | |||
| 0,813746 | 0,811182 | 0,00188 | dividere | |||
| 0,485730 | 0,485524 | 0,00094 | accettato | |||
| 0,325453 | 0,325424 | 0,00094 | accettato | |||
| 0,441971 | 0,441843 | 0,00188 | accettato | |||
| 0,539369 | 0,539024 | 0,00375 | accettato | |||
| 0,606803 | 0,606188 | 0,00750 | accettato |
Primo passo a mano: ; con e , somma . Il risultato finale somma i cinque intervalli accettati col valore estrapolato: con intervalli, valutazioni, e quindi molto meglio dei richiesti. I punti sono addensati dove serve: gli intervalli accettati sono , , , , (larghezze ). Simpson uniforme per lo stesso errore avrebbe bisogno di (65 valutazioni).
Attenzione. La stima si basa sull'ipotesi che sia circa costante sull'intervallo: vicino a una singolarità o a un picco molto stretto può sottostimare l'errore, e l'algoritmo accetta troppo presto. Per con l'intervallo ha e viene accettato, ma l'errore vero è , tre volte la tolleranza: non è limitata in . Per questo i programmi aggiungono un limite al numero di divisioni e segnalano gli intervalli che non convergono.
4. Implementazione
import numpy as np
def gauss_legendre(f, a, b, m):
t, w = np.polynomial.legendre.leggauss(m) # nodi e pesi su [-1, 1]
x = (a + b) / 2 + (b - a) / 2 * t # cambio di intervallo
return (b - a) / 2 * np.sum(w * f(x))
def gauss_composita(f, a, b, n, m):
xs = np.linspace(a, b, n + 1)
return sum(gauss_legendre(f, xs[i], xs[i + 1], m) for i in range(n))
def simpson_adattiva(f, a, b, eps, intervalli=None):
"""Restituisce (valore, lista degli intervalli accettati)."""
c = (a + b) / 2
S = lambda p, q: (q - p) / 6 * (f(p) + 4 * f((p + q) / 2) + f(q))
S1, S2 = S(a, b), S(a, c) + S(c, b)
if abs(S2 - S1) <= 15 * eps:
return S2 + (S2 - S1) / 15, [(a, b)]
vl, il = simpson_adattiva(f, a, c, eps / 2)
vr, ir = simpson_adattiva(f, c, b, eps / 2)
return vl + vr, il + ir
print("Gauss su e^x in [0,1], errore I - Q:")
I = np.e - 1
for m in [1, 2, 3]:
print(f" m = {m}: {gauss_legendre(np.exp, 0, 1, m):.9f} errore {I - gauss_legendre(np.exp, 0, 1, m):.2e}")
f = lambda x: 1 / (x + 0.1)
v, iv = simpson_adattiva(f, 0, 1, 1e-3)
print(f"Simpson adattiva: {v:.6f} (esatto {np.log(11):.6f}),", len(iv), "intervalli,", 4 * len(iv) + 1, "valutazioni")
print([(round(a, 4), round(b, 4)) for a, b in iv])Output:
Gauss su e^x in [0,1], errore I - Q:
m = 1: 1.648721271 errore 6.96e-02
m = 2: 1.717896378 errore 3.85e-04
m = 3: 1.718281004 errore 8.24e-07
Simpson adattiva: 2.397915 (esatto 2.397895), 5 intervalli, 21 valutazioni
[(0, 0.0625), (0.0625, 0.125), (0.125, 0.25), (0.25, 0.5), (0.5, 1)]Equivalenti MATLAB: integral(@(x) 1./(x+0.1), 0, 1, 'AbsTol', 1e-3) (Gauss-Kronrod adattivo), quad (Simpson adattivo, versioni vecchie), quadgk (Gauss-Kronrod). MATLAB non ha una funzione per nodi e pesi di Gauss-Legendre: si tabulano o si calcolano come autovalori di una matrice tridiagonale (eig). In Python numpy.polynomial.legendre.leggauss(m) dà nodi e pesi, scipy.integrate.quad è l'equivalente di integral.
Errori da evitare
- Dimenticare il fattore nel cambio di intervallo (i pesi sono relativi a , lunghezza 2).
- Usare i nodi direttamente come senza la trasformazione affine.
- Credere che il grado di esattezza sia : è (: grado 3, non 2).
- Riusare nodi gaussiani di per : non sono annidati.
- Accettare ciecamente la stima adattiva vicino a punti dove non è liscia.
- Non dimezzare a ogni divisione (o, in alternativa, non dividere di conseguenza).
Esercizi svolti: Esercizio - Gauss a due e tre punti su 1 su x e confronto con Simpson, Esercizio - periodo del pendolo con grande ampiezza e quadratura gaussiana, Esercizio - Simpson adattiva a mano e confronto con il passo uniforme, Esercizio - nodi e pesi di Gauss a due punti, composita e numero di intervalli.
Domande d'esame
- Qual è il grado di esattezza della formula di Gauss a nodi? Perché non si può fare meglio? Traccia. ; con nodi e pesi ci sono parametri e condizioni (monomi ). Non esiste una formula a nodi esatta anche su di grado , il cui integrale è mentre .
- Dimostrare che con i nodi radici di la formula è esatta fino al grado . Traccia. Divisione , ortogonalità di ai polinomi di grado , esattezza interpolatoria su , .
- Ricavare nodi e pesi di Gauss a due punti. Traccia. Quattro condizioni su ; per simmetria , , .
- Come funziona un metodo di quadratura adattivo e perché dimezzare la tolleranza? Traccia. contro , stima , dividere se ; a ciascuna metà perché le due metà si sommano.
Versione ripasso
Gauss-Legendre. , incognite, esatta su : grado . Su : , .
| nodi | pesi | grado | errore | |
|---|---|---|---|---|
| 1 | 1 | |||
| 2 | 3 | |||
| 3 | 5 |
Errore generale . Nodi = radici di (, ). Pesi positivi (), non annidati.
Teorema (D). con : (ortogonalità), (pesi interpolatori), perché .
Caso : , , , ; simmetria , . Controllo: dà .
Composita: ordine , errore . , , : , (12 valutazioni; Simpson 13, trapezi 477).
Adattiva. su , , . Se : accetta ; altrimenti dividi con per metà. Esempio , : 5 intervalli, 21 valutazioni, (errore ), contro uniforme. Primo passo: , , .
Passaggi principali.
- Esempio su : , , , errore (Simpson, 3 valori); : , errore .
- Positività dei pesi: (grado ).
- Dimezzare : le due metà si sommano, quindi ciascuna ha metà dell'errore ammesso.
- Limite della stima: per con , è accettato () ma l'errore vero è , perché non è limitata in .
- Gauss-Kronrod: aggiunge nodi a Gauss e confronta; è l'algoritmo di
integral. - Gauss contro Simpson a parità di valutazioni : errori contro di , circa volte meglio.
- Tabella adattiva: divisi ( contro ), poi accettati , , , , ; Simpson uniforme con errore simile () ha .
- Costante d'errore: : ; : ; composita: si sommano errori locali e resta .
- Numero di intervalli per : , , quindi ; in realtà dà già .
- Costo: valutazioni per l'intervallo iniziale, poi nuove per ogni intervallo figlio (gli altri tre valori vengono dal padre): intervalli esaminati, .
Errori tipici.
- Manca o la trasformazione affine dei nodi.
- Grado invece di .
- Nodi di riusati per .
- Stima adattiva presa per garanzia vicino a singolarità.