Metodo di Bisezione

Il metodo di bisezione è una tecnica numerica utilizzata per trovare gli zeri di una funzione, ovvero i punti in cui $ f(x) = 0 $. È particolarmente utile quando la funzione è continua su un intervallo e si conoscono due valori $ a $ e $ b $ tali che $ f(a) \cdot f(b) \lt 0 $. Questo garantisce, per il teorema di Bolzano, che esista almeno uno zero della funzione nell’intervallo $[a, b]$.

Idea del metodo

Metodo di bisezione ++ > Il metodo si basa sul restringere progressivamente l’intervallo in cui si trova lo zero della funzione:

  1. Si calcola il punto medio dell’intervallo:
  2. Si valuta il segno di $ f(m) $:
    • Se $ f(m) = 0 $, abbiamo trovato lo zero della funzione.
    • Se $ f(a) \cdot f(m) \lt 0 $, lo zero si trova nell’intervallo $[a, m]$.
    • Altrimenti, si trova nell’intervallo $[m, b]$.
  3. Si ripete il processo sull’intervallo ristretto fino a raggiungere una tolleranza desiderata $ \varepsilon $ o un numero massimo di iterazioni.

Algoritmo in forma generale

Condizioni iniziali:

  • Una funzione continua $ f(x) $.
  • Un intervallo iniziale $[a, b]$ con $ f(a) \cdot f(b) \lt 0 $.
  • Una tolleranza $ \varepsilon \gt 0 $.

Passaggi principali:

  1. Calcolare il punto medio $ m $: $$ m = \frac{a + b}{2} $$
  2. Controllare il valore di $ f(m) $:
    • Se $ |f(m)| \lt \varepsilon $, restituire $ m $ come soluzione.
    • Altrimenti, aggiornare l’intervallo:
      • Se $ f(a) \cdot f(m) \lt 0 $, allora $ b = m $.
      • Altrimenti, $ a = m $
  3. Ripetere fino a raggiungere la tolleranza $ \varepsilon $ o un numero massimo di iterazioni.

Nota sull’implementazione

Il metodo di bisezione è semplice ed efficace, ma richiede che la funzione sia continua e che l’intervallo iniziale contenga un cambiamento di segno. Inoltre, la versione ricorsiva è elegante ma può soffrire di problemi di profondità di ricorsione per intervalli molto piccoli o tolleranze estremamente basse.

Suggerimenti per esercizi

Ecco alcune funzioni con i relativi intervalli iniziali per esercitarsi con il metodo di bisezione:

  1. $ f(x) = x^3 - x - 2 $ sull’intervallo $[1, 2]$.

Soluzione: $ x \approx 1.521 $

# Definizione della funzione f1
import math
def f1(x):
    return x**3 - x - 2
  1. $ f(x) = \sin(x) - 0.5 $ sull’intervallo $[0, \pi]$.

    Soluzione: $ x \approx \frac{\pi}{6} \approx 0.524 $

# Definizione della funzione f2
import math
def f2(x):
    return math.sin(x) - 0.5
  1. $ f(x) = \ln(x) - 1 $ sull’intervallo $[2, 4]$.

    Soluzione: $ x \approx e \approx 2.718 $

# Definizione della funzione f3
import math
def f3(x):
    return math.log(x) - 1
  1. $ f(x) = e^x - 3 $ sull’intervallo $[0, 2]$.

    Soluzione: $ x \approx \ln(3) \approx 1.099 $

# Definizione della funzione f4
import math
def f4(x):
    return math.exp(x) - 3
  1. $ f(x) = x^2 - 2 $ sull’intervallo $[1, 2]$.

    Soluzione: $ x \approx \sqrt{2} \approx 1.414 $

# Definizione della funzione f5
def f5(x):
    return x**2 - 2

Provate a calcolare gli zeri di queste funzioni utilizzando il metodo di bisezione!