Salta al contenuto
Note per Studenti Quadratura gaussiana e formule composite adattive

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 mm nodi ha 2m2m parametri (nodi e pesi), non mm. Sfruttandoli tutti si ottiene una formula con grado di esattezza 2m−12m-1 invece di m−1m-1 (o mm): è 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 [−1,1][-1,1] e si cerca ∫−11f(t) dt≈∑i=1mwif(ti)\int_{-1}^1f(t)\,dt\approx\sum_{i=1}^mw_if(t_i) con 2m2m incognite (ti,wi)(t_i,w_i) da scegliere in modo che la formula sia esatta per 1,t,t2,…,t2m−11,t,t^2,\dots,t^{2m-1} (sono 2m2m condizioni).

Caso m=1m=1. Esattezza su 1,t1,t: w1=2w_1=2, w1t1=0⇒t1=0w_1t_1=0\Rightarrow t_1=0. È la formula del punto medio, grado 11.

Caso m=2m=2. Incognite w1,w2,t1,t2w_1,w_2,t_1,t_2; condizioni su 1,t,t2,t31,t,t^2,t^3: w1+w2=2,w1t1+w2t2=0,w1t12+w2t22=23,w1t13+w2t23=0.w_1+w_2=2,\qquad w_1t_1+w_2t_2=0,\qquad w_1t_1^2+w_2t_2^2=\tfrac23,\qquad w_1t_1^3+w_2t_2^3=0 . Per simmetria si cerca t2=−t1t_2=-t_1, w1=w2w_1=w_2: la prima dà w1=w2=1w_1=w_2=1, la seconda e la quarta sono soddisfatte, la terza dà 2t12=232t_1^2=\frac23, cioè t12=13t_1^2=\frac13: t1,2=∓13=∓0,57735,w1=w2=1.t_{1,2}=\mp\frac1{\sqrt3}=\mp0{,}57735,\qquad w_1=w_2=1 . Con due soli valori di ff si integra esattamente ogni cubico. Controllo: t4t^4 dà Q=2⋅19=29≠25Q=2\cdot\frac19=\frac29\ne\frac25, quindi il grado è esattamente 33.

Caso m=3m=3. Con lo stesso metodo (o con il teorema qui sotto): t=0,±3/5=±0,774597t=0,\pm\sqrt{3/5}=\pm0{,}774597 con pesi 89,59,59\frac89,\frac59,\frac59, grado 55.

mm nodi tit_i pesi wiw_i grado errore su [a,b][a,b]
1 00 22 1 (b−a)324f′′(ξ)\frac{(b-a)^3}{24}f''(\xi)
2 ±0,577350\pm0{,}577350 1, 11,\,1 3 (b−a)54320f(4)(ξ)\frac{(b-a)^5}{4320}f^{(4)}(\xi)
3 0, ±0,7745970,\ \pm0{,}774597 89, 59, 59\frac89,\ \frac59,\ \frac59 5 (b−a)72016000f(6)(ξ)\frac{(b-a)^7}{2016000}f^{(6)}(\xi)
4 ±0,339981, ±0,861136\pm0{,}339981,\ \pm0{,}861136 0,652145, 0,3478550{,}652145,\ 0{,}347855 7

I nodi sono le radici dei polinomi di Legendre P2(t)=3t2−12P_2(t)=\frac{3t^2-1}2, P3(t)=5t3−3t2P_3(t)=\frac{5t^3-3t}2, ... (in generale PmP_m ha mm radici reali distinte in (−1,1)(-1,1)). Il perché è nel teorema seguente.

Teorema (D). Siano t1,…,tmt_1,\dots,t_m le radici di PmP_m e wi=∫−11ℓi(t) dtw_i=\int_{-1}^1\ell_i(t)\,dt i pesi interpolatori. La formula ha grado di esattezza 2m−12m-1.

Dimostrazione. Sia pp un polinomio di grado ≤2m−1\le2m-1. Si divide per PmP_m (grado mm): p=q Pm+rp=q\,P_m+r con q,rq,r di grado ≤m−1\le m-1. Allora:

  • ∫−11q Pm dt=0\int_{-1}^1q\,P_m\,dt=0, perché PmP_m è ortogonale a tutti i polinomi di grado <m<m;
  • ∫−11r dt=∑wir(ti)\int_{-1}^1r\,dt=\sum w_ir(t_i), perché la formula con pesi interpolatori è esatta sui polinomi di grado ≤m−1\le m-1 (il polinomio interpolante di rr in mm nodi è rr stesso);
  • p(ti)=q(ti)Pm(ti)+r(ti)=r(ti)p(t_i)=q(t_i)P_m(t_i)+r(t_i)=r(t_i), perché Pm(ti)=0P_m(t_i)=0.

Quindi ∫p=∫r=∑wir(ti)=∑wip(ti)\int p=\int r=\sum w_ir(t_i)=\sum w_ip(t_i). ■\blacksquare

Inoltre i pesi sono positivi (si vede applicando la formula al quadrato ℓj2\ell_j^2 di grado 2m−22m-2: 0<∫ℓj2=∑iwiℓj(ti)2=wj0<\int\ell_j^2=\sum_iw_i\ell_j(t_i)^2=w_j). 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 x=a+b2+b−a2tx=\frac{a+b}2+\frac{b-a}2t, dx=b−a2dtdx=\frac{b-a}2dt: ∫abf(x) dx≈b−a2∑i=1mwi f(a+b2+b−a2ti).\int_a^bf(x)\,dx\approx\frac{b-a}2\sum_{i=1}^mw_i\,f\Big(\frac{a+b}2+\frac{b-a}2t_i\Big).

Esempio. ∫01ex dx=1,718282\int_0^1e^x\,dx=1{,}718282 con m=2m=2. Nodi: x=12±12⋅0,57735=0,211325; 0,788675x=\frac12\pm\frac12\cdot0{,}57735=0{,}211325;\ 0{,}788675. Valori: e0,211325=1,235314e^{0{,}211325}=1{,}235314, e0,788675=2,200479e^{0{,}788675}=2{,}200479. Q=1−02 (1⋅1,235314+1⋅2,200479)=3,4357932=1,717896,I−Q=3,85⋅10−4.Q=\frac{1-0}2\,(1\cdot1{,}235314+1\cdot2{,}200479)=\frac{3{,}435793}2=1{,}717896,\qquad I-Q=3{,}85\cdot10^{-4}. Per confronto Simpson con tre valori ha errore 5,79⋅10−45{,}79\cdot10^{-4}: la formula gaussiana con meno valori è più precisa. Con m=3m=3 (x=0,112702; 0,5; 0,887298x=0{,}112702;\,0{,}5;\,0{,}887298, valori 1,119298; 1,648721; 2,4285601{,}119298;\,1{,}648721;\,2{,}428560): Q=12(59⋅1,119298+89⋅1,648721+59⋅2,428560)=1,718281Q=\frac12\big(\frac59\cdot1{,}119298+\frac89\cdot1{,}648721+\frac59\cdot2{,}428560\big)=1{,}718281, errore 8,2⋅10−78{,}2\cdot10^{-7}.

Errore. Per f∈C2mf\in C^{2m}: Em=(b−a)2m+1(m!)4(2m+1) [(2m)!]3 f(2m)(ξ).E_m=\frac{(b-a)^{2m+1}(m!)^4}{(2m+1)\,[(2m)!]^3}\,f^{(2m)}(\xi). Per m=2m=2 la costante è 165⋅243=14320\frac{16}{5\cdot24^3}=\frac1{4320}; l'errore dipende da f(4)f^{(4)}, come Simpson (con costante 12880\frac1{2880}) ma con un valore in meno. Per m=3m=3 è 12016000\frac1{2016000} con f(6)f^{(6)}.

Pro e contro. Più precisa a parità di valutazioni, converge per ogni ff continua quando m→∞m\to\infty (pesi positivi) e dà accuratezza altissima per funzioni analitiche. Però i nodi di mm e m+1m+1 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 [a,b][a,b] in nn sottointervalli di ampiezza hh e si applica Gauss mm nodi su ciascuno. L'errore locale è O(h2m+1)O(h^{2m+1}), la somma di nn errori dà I−Qn,m≈(b−a) h2m (m!)4(2m+1) [(2m)!]3f(2m)(ξ):I-Q_{n,m}\approx\frac{(b-a)\,h^{2m}\,(m!)^4}{(2m+1)\,[(2m)!]^3}f^{(2m)}(\xi): ordine 2m2m. Per m=2m=2 l'ordine è 4 come Simpson composito, ma con costante 14320\frac1{4320} invece di 1180\frac1{180}. A parità di valutazioni NN la differenza si riduce: Gauss usa N2\frac N2 intervalli di ampiezza 2(b−a)N\frac{2(b-a)}N e Simpson NN sotto-intervalli di ampiezza b−aN\frac{b-a}N, quindi gli errori valgono 164320=1270\frac{16}{4320}=\frac1{270} e 1180\frac1{180} volte (b−a)5N4f(4)\frac{(b-a)^5}{N^4}f^{(4)}: Gauss è circa 1,51{,}5 volte più preciso.

Esempio (numero di intervalli). ∫01ex dx\int_0^1e^x\,dx con m=2m=2 e ε=10−6\varepsilon=10^{-6}: (b−a)h44320e≤10−6⇒h4≤4320⋅10−6e=1,589⋅10−3⇒h≤0,1997⇒n≥5,008\frac{(b-a)h^4}{4320}e\le10^{-6}\Rightarrow h^4\le\frac{4320\cdot10^{-6}}e=1{,}589\cdot10^{-3}\Rightarrow h\le0{,}1997\Rightarrow n\ge5{,}008, quindi n=6n=6 (12 valutazioni; Simpson ne richiede 13, i trapezi 477). In realtà n=5n=5 dà già errore 6,4⋅10−76{,}4\cdot10^{-7}: la maggiorazione è prudente.

Dimezzando hh l'errore si divide per 22m2^{2m} (=16=16 per m=2m=2): rapporti osservati 15,6; 15,9; 16,015{,}6;\ 15{,}9;\ 16{,}0 per n=1→2→4→8n=1\to2\to4\to8.

3. Formule adattive

Una funzione come f(x)=1x+0,1f(x)=\frac1{x+0{,}1} su [0,1][0,1] varia moltissimo vicino a 00 (f(0)=10f(0)=10, f(1)≈0,9f(1)\approx0{,}9) 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 [a,b][a,b] con punto medio cc si calcolano S1=b−a6[f(a)+4f(c)+f(b)],S2=S(a,c)+S(c,b)S_1=\frac{b-a}6\big[f(a)+4f(c)+f(b)\big],\qquad S_2=S(a,c)+S(c,b) (Simpson su tutto l'intervallo e sulle due metà, con passo dimezzato). Poiché Simpson ha ordine p=4p=4, 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 →): I−S2≈S2−S124−1=S2−S115.I-S_2\approx\frac{S_2-S_1}{2^4-1}=\frac{S_2-S_1}{15}.

Procedura (Simpson adattivo). Dati [a,b][a,b] e la tolleranza ε\varepsilon per questo intervallo:

  1. calcola S1S_1 e S2S_2;
  2. se ∣S2−S1∣≤15 ε|S_2-S_1|\le15\,\varepsilon accetta e restituisci S2+S2−S115S_2+\dfrac{S_2-S_1}{15} (valore estrapolato, ordine 6);
  3. altrimenti dividi in [a,c][a,c] e [c,b][c,b] e applica la procedura a ciascuna con tolleranza ε2\frac\varepsilon2; il risultato è la somma.

La tolleranza dimezzata a ogni divisione garantisce che, se tutte le stime sono corrette, la somma degli errori resti ≤ε\le\varepsilon. Il costo: sull'intervallo iniziale servono 55 valutazioni (aa, bb, cc e i punti medi delle due metà). Ogni intervallo figlio, per esempio [a,c][a,c], eredita dal padre i valori in aa, nel suo punto medio e in cc, quindi richiede solo 22 nuove valutazioni (i punti medi delle sue due metà). Nell'esempio sotto si esaminano 99 intervalli: 5+2⋅8=215+2\cdot8=21 valutazioni.

Esempio (a mano). I=∫01dxx+0,1=ln⁡11=2,397895I=\int_0^1\frac{dx}{x+0{,}1}=\ln11=2{,}397895, ε=10−3\varepsilon=10^{-3}. Ogni riga è un intervallo esaminato:

intervallo ε\varepsilon S1S_1 S2S_2 S2−S1S_2-S_1 15ε15\varepsilon esito
[0,1][0,1] 10−310^{-3} 2,929293 2,531407 −0,397886-0{,}397886 0,01500 dividere
[0,0,5][0,0{,}5] 5⋅10−45\cdot10^{-4} 1,924603 1,815824 −0,108779-0{,}108779 0,00750 dividere
[0,0,25][0,0{,}25] 2,5⋅10−42{,}5\cdot10^{-4} 1,276455 1,255718 −0,020737-0{,}020737 0,00375 dividere
[0,0,125][0,0{,}125] 1,25⋅10−41{,}25\cdot10^{-4} 0,813746 0,811182 −0,002564-0{,}002564 0,00188 dividere
[0,0,0625][0,0{,}0625] 6,25⋅10−56{,}25\cdot10^{-5} 0,485730 0,485524 −0,000206-0{,}000206 0,00094 accettato
[0,0625,0,125][0{,}0625,0{,}125] 6,25⋅10−56{,}25\cdot10^{-5} 0,325453 0,325424 −0,000028-0{,}000028 0,00094 accettato
[0,125,0,25][0{,}125,0{,}25] 1,25⋅10−41{,}25\cdot10^{-4} 0,441971 0,441843 −0,000129-0{,}000129 0,00188 accettato
[0,25,0,5][0{,}25,0{,}5] 2,5⋅10−42{,}5\cdot10^{-4} 0,539369 0,539024 −0,000345-0{,}000345 0,00375 accettato
[0,5,1][0{,}5,1] 5⋅10−45\cdot10^{-4} 0,606803 0,606188 −0,000616-0{,}000616 0,00750 accettato

Primo passo a mano: S1=16[10+4⋅10,6+11,1]=16 [10+6,666667+0,909091]=2,929293S_1=\frac16\big[10+4\cdot\frac1{0{,}6}+\frac1{1{,}1}\big]=\frac16\,[10+6{,}666667+0{,}909091]=2{,}929293; S2=S(0,12)+S(12,1)S_2=S(0,\tfrac12)+S(\tfrac12,1) con S(0,12)=0,56[10+40,35+10,6]=1,924603S(0,\tfrac12)=\frac{0{,}5}6\big[10+\frac4{0{,}35}+\frac1{0{,}6}\big]=1{,}924603 e S(12,1)=0,56[10,6+40,85+11,1]=0,606803S(\tfrac12,1)=\frac{0{,}5}6\big[\frac1{0{,}6}+\frac4{0{,}85}+\frac1{1{,}1}\big]=0{,}606803, somma 2,5314062{,}531406. Il risultato finale somma i cinque intervalli accettati col valore estrapolato: Q=2,397915,I−Q=−1,9⋅10−5,Q=2{,}397915,\qquad I-Q=-1{,}9\cdot10^{-5}, con 55 intervalli, 4⋅5+1=214\cdot5+1=21 valutazioni, e quindi molto meglio dei 10−310^{-3} richiesti. I punti sono addensati dove serve: gli intervalli accettati sono [0,0,0625][0,0{,}0625], [0,0625,0,125][0{,}0625,0{,}125], [0,125,0,25][0{,}125,0{,}25], [0,25,0,5][0{,}25,0{,}5], [0,5,1][0{,}5,1] (larghezze 0,0625,0,0625,0,125,0,25,0,50{,}0625,0{,}0625,0{,}125,0{,}25,0{,}5). Simpson uniforme per lo stesso errore avrebbe bisogno di n=64n=64 (65 valutazioni).

Attenzione. La stima S2−S115\frac{S_2-S_1}{15} si basa sull'ipotesi che f(4)f^{(4)} 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 ∫01x dx\int_0^1\sqrt x\,dx con ε=10−3\varepsilon=10^{-3} l'intervallo [0,12][0,\frac12] ha ∣S2−S1∣=0,0065<15⋅5⋅10−4=0,0075|S_2-S_1|=0{,}0065<15\cdot5\cdot10^{-4}=0{,}0075 e viene accettato, ma l'errore vero è 3,1⋅10−33{,}1\cdot10^{-3}, tre volte la tolleranza: f(4)∝x−7/2f^{(4)}\propto x^{-7/2} non è limitata in 00. Per questo i programmi aggiungono un limite al numero di divisioni e segnalano gli intervalli che non convergono.

4. Implementazione

python
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 b−a2\frac{b-a}2 nel cambio di intervallo (i pesi sono relativi a [−1,1][-1,1], lunghezza 2).
  • Usare i nodi tit_i direttamente come xix_i senza la trasformazione affine.
  • Credere che il grado di esattezza sia mm: è 2m−12m-1 (m=2m=2: grado 3, non 2).
  • Riusare nodi gaussiani di mm per m+1m+1: non sono annidati.
  • Accettare ciecamente la stima adattiva vicino a punti dove ff non è liscia.
  • Non dimezzare ε\varepsilon a ogni divisione (o, in alternativa, non dividere 15ε15\varepsilon 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

  1. Qual è il grado di esattezza della formula di Gauss a mm nodi? Perché non si può fare meglio? Traccia. 2m−12m-1; con mm nodi e mm pesi ci sono 2m2m parametri e 2m2m condizioni (monomi 1,…,t2m−11,\dots,t^{2m-1}). Non esiste una formula a mm nodi esatta anche su ∏(t−ti)2\prod(t-t_i)^2 di grado 2m2m, il cui integrale è >0>0 mentre Q=0Q=0.
  2. Dimostrare che con i nodi radici di PmP_m la formula è esatta fino al grado 2m−12m-1. Traccia. Divisione p=qPm+rp=qP_m+r, ortogonalità di PmP_m ai polinomi di grado <m<m, esattezza interpolatoria su rr, Pm(ti)=0P_m(t_i)=0.
  3. Ricavare nodi e pesi di Gauss a due punti. Traccia. Quattro condizioni su 1,t,t2,t31,t,t^2,t^3; per simmetria t2=−t1t_2=-t_1, w1=w2=1w_1=w_2=1, t12=13t_1^2=\frac13.
  4. Come funziona un metodo di quadratura adattivo e perché dimezzare la tolleranza? Traccia. S1S_1 contro S2S_2, stima S2−S115\frac{S_2-S_1}{15}, dividere se >15ε>15\varepsilon; ε/2\varepsilon/2 a ciascuna metà perché le due metà si sommano.

Versione ripasso

(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 →)

Gauss-Legendre. ∫−11f≈∑i=1mwif(ti)\int_{-1}^1f\approx\sum_{i=1}^mw_if(t_i), 2m2m incognite, esatta su 1,…,t2m−11,\dots,t^{2m-1}: grado 2m−12m-1. Su [a,b][a,b]: xi=a+b2+b−a2tix_i=\frac{a+b}2+\frac{b-a}2t_i, Q=b−a2∑wif(xi)Q=\frac{b-a}2\sum w_if(x_i).

mm nodi pesi grado errore
1 00 22 1 (b−a)324f′′\frac{(b-a)^3}{24}f''
2 ±13\pm\frac1{\sqrt3} 1,11,1 3 (b−a)54320f(4)\frac{(b-a)^5}{4320}f^{(4)}
3 0,±3/50,\pm\sqrt{3/5} 89,59,59\frac89,\frac59,\frac59 5 (b−a)72016000f(6)\frac{(b-a)^7}{2016000}f^{(6)}

Errore generale (b−a)2m+1(m!)4(2m+1)[(2m)!]3f(2m)(ξ)\frac{(b-a)^{2m+1}(m!)^4}{(2m+1)[(2m)!]^3}f^{(2m)}(\xi). Nodi = radici di PmP_m (P2=3t2−12P_2=\frac{3t^2-1}2, P3=5t3−3t2P_3=\frac{5t^3-3t}2). Pesi positivi (wj=∫ℓj2>0w_j=\int\ell_j^2>0), non annidati.

Teorema (D). p=qPm+rp=qP_m+r con deg⁡q,r≤m−1\deg q,r\le m-1: ∫qPm=0\int qP_m=0 (ortogonalità), ∫r=∑wir(ti)\int r=\sum w_ir(t_i) (pesi interpolatori), p(ti)=r(ti)p(t_i)=r(t_i) perché Pm(ti)=0P_m(t_i)=0.

Caso m=2m=2: w1+w2=2w_1+w_2=2, w1t1+w2t2=0w_1t_1+w_2t_2=0, ∑witi2=23\sum w_it_i^2=\frac23, ∑witi3=0\sum w_it_i^3=0; simmetria ⇒w=1\Rightarrow w=1, t2=13t^2=\frac13. Controllo: t4t^4 dà 29≠25\frac29\ne\frac25.

Composita: ordine 2m2m, errore (b−a)h2m(m!)4(2m+1)[(2m)!]3f(2m)\frac{(b-a)h^{2m}(m!)^4}{(2m+1)[(2m)!]^3}f^{(2m)}. ∫01ex\int_0^1e^x, m=2m=2, ε=10−6\varepsilon=10^{-6}: h4≤4320⋅10−6eh^4\le\frac{4320\cdot10^{-6}}e, n=6n=6 (12 valutazioni; Simpson 13, trapezi 477).

Adattiva. S1S_1 su [a,b][a,b], S2=S(a,c)+S(c,b)S_2=S(a,c)+S(c,b), I−S2≈S2−S115I-S_2\approx\frac{S_2-S_1}{15}. Se ∣S2−S1∣≤15ε|S_2-S_1|\le15\varepsilon: accetta S2+S2−S115S_2+\frac{S_2-S_1}{15}; altrimenti dividi con ε2\frac\varepsilon2 per metà. Esempio ∫01dxx+0,1=ln⁡11\int_0^1\frac{dx}{x+0{,}1}=\ln11, ε=10−3\varepsilon=10^{-3}: 5 intervalli, 21 valutazioni, Q=2,397915Q=2{,}397915 (errore −1,9⋅10−5-1{,}9\cdot10^{-5}), contro n=64n=64 uniforme. Primo passo: S1=2,929293S_1=2{,}929293, S2=2,531406S_2=2{,}531406, ∣S2−S1∣=0,398>0,015|S_2-S_1|=0{,}398>0{,}015.

Passaggi principali.

  • Esempio m=2m=2 su exe^x: x=0,211325; 0,788675x=0{,}211325;\,0{,}788675, f=1,235314; 2,200479f=1{,}235314;\,2{,}200479, Q=12(3,435793)=1,717896Q=\frac12(3{,}435793)=1{,}717896, errore 3,85⋅10−4<5,79⋅10−43{,}85\cdot10^{-4}<5{,}79\cdot10^{-4} (Simpson, 3 valori); m=3m=3: 1,7182811{,}718281, errore 8,2⋅10−78{,}2\cdot10^{-7}.
  • Positività dei pesi: 0<∫ℓj2=∑wiℓj(ti)2=wj0<\int\ell_j^2=\sum w_i\ell_j(t_i)^2=w_j (grado 2m−2≤2m−12m-2\le2m-1).
  • Dimezzare ε\varepsilon: le due metà si sommano, quindi ciascuna ha metà dell'errore ammesso.
  • Limite della stima: per x\sqrt x con ε=10−3\varepsilon=10^{-3}, [0,12][0,\frac12] è accettato (0,0065<0,00750{,}0065<0{,}0075) ma l'errore vero è 3,1⋅10−33{,}1\cdot10^{-3}, perché f(4)f^{(4)} non è limitata in 00.
  • Gauss-Kronrod: aggiunge nodi a Gauss e confronta; è l'algoritmo di integral.
  • Gauss contro Simpson a parità di valutazioni NN: errori 1270\frac1{270} contro 1180\frac1{180} di (b−a)5N4f(4)\frac{(b-a)^5}{N^4}f^{(4)}, circa 1,51{,}5 volte meglio.
  • Tabella adattiva: [0,1]→[0,12]→[0,14]→[0,18][0,1]\to[0,\frac12]\to[0,\frac14]\to[0,\frac18] divisi (∣S2−S1∣=0,398; 0,109; 0,0207; 0,00256|S_2-S_1|=0{,}398;\,0{,}109;\,0{,}0207;\,0{,}00256 contro 0,015; 0,0075; 0,00375; 0,001880{,}015;\,0{,}0075;\,0{,}00375;\,0{,}00188), poi accettati [0,116][0,\frac1{16}], [116,18][\frac1{16},\frac18], [18,14][\frac18,\frac14], [14,12][\frac14,\frac12], [12,1][\frac12,1]; Simpson uniforme con errore simile (1,9⋅10−51{,}9\cdot10^{-5}) ha n=64n=64.
  • Costante d'errore: m=2m=2: (2!)45⋅(4!)3=1669120=14320\frac{(2!)^4}{5\cdot(4!)^3}=\frac{16}{69120}=\frac1{4320}; m=3m=3: (3!)47⋅(6!)3=12016000\frac{(3!)^4}{7\cdot(6!)^3}=\frac1{2016000}; composita: si sommano nn errori locali O(h2m+1)O(h^{2m+1}) e resta (b−a)h2m(b-a)h^{2m}.
  • Numero di intervalli per exe^x: h≤(4320⋅10−6e)1/4=0,1997h\le\big(\frac{4320\cdot10^{-6}}e\big)^{1/4}=0{,}1997, n≥5,008n\ge5{,}008, quindi n=6n=6; in realtà n=5n=5 dà già 6,4⋅10−76{,}4\cdot10^{-7}.
  • Costo: 55 valutazioni per l'intervallo iniziale, poi 22 nuove per ogni intervallo figlio (gli altri tre valori vengono dal padre): 99 intervalli esaminati, 5+2⋅8=215+2\cdot8=21.

Errori tipici.

  • Manca b−a2\frac{b-a}2 o la trasformazione affine dei nodi.
  • Grado mm invece di 2m−12m-1.
  • Nodi di mm riusati per m+1m+1.
  • Stima adattiva presa per garanzia vicino a singolarità.

Esercizi su questo argomento