Bisezione
Calcolo Numerico: Zeri di funzione
di Giuseppe Sottile


Data una generica funzione continua \( f(x) \) in un certo intervallo compatto \( [a, b]\), siamo interessati alla ricerca degli zeri "radici" (o meglio di uno zero in [a, b]) attraverso un metodo non algebrico. In generale per una funzione che non sia una di quelle elementari non esiste una "formula risolutiva" per la ricerca delle radici, per le equazioni algebriche esiste la formula fino al grado 4. Come possiamo risolvere sempre una equazione della forma \(f(\alpha) = 0 \)?.

Ci viene anzitutto in aiuto un teorema classico dell'analisi (Teorema degli zeri "di Bolzano") che ci assicura sempre che: se la funzione è continua in [a, b] ed assume segni opposti negli estremi (\( f(a)\cdot f(b) < 0\)), allora ci sarà sicuramente un punto \(\alpha\) da qualche parte nell'intervallo in cui \(f(\alpha) = 0\). Da un punto di vista intuitivo, il grafico della funzione deve per forza intersecarsi con l'asse delle ascisse se provaste a tracciare una curva continua da un punto negativo ad uno positivo!


Bisezione

Fatte queste premesse, possiamo costruire un algoritmo, per la ricerca degli zeri detto metodo di bisezione in grado di ricercare un intervallo in cui ricade lo zero con una certa precisione \(\epsilon\). Tutto quello che dobbiamo fare e suddividere in due (da qui "bisezione") l'intervallo di partenza e verificare "iterativamente" le condizioni del teorema di Bolzano e scartare la parte di intervallo in cui non valgono. Il mnetodo si arresta quando la dimenzione dell'intervallo corrente, diventa minore di \( \epsilon \).

Partiamo da una funzione \(f(x)\). Al passo zero, l'intervallo è tutto \([a, b]\). Chiaramente per ipotesi \(f(a)f(b) < 0 \): lo zero deve trovarsi nell'intervallo, altrimenti sarebbe inutile partire!.

$$ \diamond $$

Esempio

Facciamo un esempio: prendiamo la funzione \( y = x^2-5\). Questa funzione sappiamo già avere due zeri, in particolare \( x_{12} = \pm \sqrt 5\) \(\Rightarrow x_1 \approx {2.236}, x_2 \approx {-2.236}\). Mettiamoci ad esempio nell'intervallo \( [1, 3]\), sicuri di beccare lo zero positivo, e fissiamo una precisione pari a \( \epsilon = 0.3 \).


$$ \diamond $$

Numero di iterazioni

Sappiamo che al primo passo la lunghezza dell'intrvallo è: \( b-a\).

Proviamo a manipolare questa formula, applicando il logaritmo in base 2 ad ambo i membri: $$ log_2\left({b-a \over 2^n}\right) < log_2(\epsilon) $$ $$ log_2(b-a) - log_2(2^n) < log_2(\epsilon) $$ $$ log_2(b-a) - log_2(\epsilon) < n $$ $$ log_2\left({b-a \over \epsilon}\right) < n $$ In particolare la quantità \( \left({b-a \over \epsilon}\right) = {\left( lunghezza([a, b]) \over precisione \right) } = N \) corrisponde al numero di sottointervalli, mentre il logaritmo "per eccesso" di tale quantità corrisponde al numero di iterazioni. Nell'esempio precedente: \( \left\lceil log_2\left( 3-1 \over 0.3\right) \right\rceil = \lceil 2.73 \rceil = 3 \).







Torna alla home