Il teorema degli zeri non dice dove sta lo zero, solo che esiste. L’algoritmo di bisezione lo trova per approssimazioni successive, dimezzando l’intervallo a ogni passo.

In sintesi — Procedimento

  1. Partire da [a,b][a,b] con f(a)f(b)<0f(a)\cdot f(b)<0.
  2. Calcolare il punto medio m=a+b2m = \dfrac{a+b}{2} e il segno di f(m)f(m).
  3. Se f(a)f(m)<0f(a)\cdot f(m) < 0: lo zero sta in [a,m][a,m], pongo b=mb=m. Altrimenti sta in [m,b][m,b], pongo a=ma=m.
  4. Ripetere dal passo 2 finché ba<ε|b-a|<\varepsilon (la precisione desiderata).

A ogni passo l’intervallo si dimezza: dopo nn passi l’errore è ba2n\le\dfrac{b-a}{2^n}.

Esempio — Bisezione applicata a ln(x+3)3x+0,1=0\ln(x+3)-3x+0{,}1=0

Sia f(x)=ln(x+3)3x+0,1f(x) = \ln(x+3)-3x+0{,}1. Cerchiamo uno zero.

f(0)=ln3+0,11,2>0f(0) = \ln 3 + 0{,}1 \approx 1{,}2 > 0; f(1)=ln43+0,11,5<0\quad f(1) = \ln 4 - 3 + 0{,}1 \approx -1{,}5 < 0. Segni opposti: c’è uno zero in [0,1][0,1].

Passoaabbmmf(m)f(m)
100110,50{,}5f(0,5)0,15<0f(0{,}5)\approx -0{,}15 < 0
2000,50{,}50,250{,}25f(0,25)0,43>0f(0{,}25)\approx 0{,}43 > 0
30,250{,}250,50{,}50,3750{,}375f(0,375)0,12>0f(0{,}375)\approx 0{,}12 > 0
40,3750{,}3750,50{,}50,43750{,}4375f(0,4375)0,02<0f(0{,}4375)\approx -0{,}02 < 0
50,3750{,}3750,43750{,}43750,4060{,}406f(0,406)0,05>0f(0{,}406)\approx 0{,}05 > 0

Dopo 5 passi lo zero è in [0,406; 0,4375][0{,}406;\ 0{,}4375], con errore <0,032<0{,}032. Valore approssimato: x0,42x\approx 0{,}42.

La forza della bisezione è la sua robustezza: richiede solo di saper valutare ff e riconoscere il suo segno, e converge sempre (purché si parta da un cambio di segno). Il prezzo è la lentezza: guadagna circa una cifra decimale ogni 3,33{,}3 iterazioni.

Collegamenti

Argomenti: Continuita
Concetti: Algoritmo di bisezione · Teorema degli zeri
Competenze: Stimare · Usare formule