# 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 ++ >](https://upload.wikimedia.org/wikipedia/commons/thumb/8/8c/Bisection_method.svg/250px-Bisection_method.svg.png) 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. <im> ## 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. </im> ## 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 $ ```python # Definizione della funzione f1 import math def f1(x): return x**3 - x - 2 ``` 2. $ f(x) = \sin(x) - 0.5 $ sull'intervallo $[0, \pi]$. Soluzione: $ x \approx \frac{\pi}{6} \approx 0.524 $ ```python # Definizione della funzione f2 import math def f2(x): return math.sin(x) - 0.5 ``` 3. $ f(x) = \ln(x) - 1 $ sull'intervallo $[2, 4]$. Soluzione: $ x \approx e \approx 2.718 $ ```python # Definizione della funzione f3 import math def f3(x): return math.log(x) - 1 ``` 4. $ f(x) = e^x - 3 $ sull'intervallo $[0, 2]$. Soluzione: $ x \approx \ln(3) \approx 1.099 $ ```python # Definizione della funzione f4 import math def f4(x): return math.exp(x) - 3 ``` 5. $ f(x) = x^2 - 2 $ sull'intervallo $[1, 2]$. Soluzione: $ x \approx \sqrt{2} \approx 1.414 $ ```python # Definizione della funzione f5 def f5(x): return x**2 - 2 ``` Provate a calcolare gli zeri di queste funzioni utilizzando il metodo di bisezione!