Bisecció

El mètode de Bisecció és una aplicació del teorema de Bolzano que permet trobar aproximacions de les arrels d’una funció \(f\) contínua dins d’un interval on està definida la funció. Aquest mètode consisteix en dividir l’interval de la definició de la funció \([a,b]\) per la meitat i seleccionar el subinterval que conté l’arrel que estem buscant. Un interval conté l’arrel si es compleix que \(f(a) \cdot f(b) \,{<}\, 0\). El mètode acaba quan la funció \(f\) avaluada en el centre \({c}\) de l’interval \([a,b]\) val zero. Per comprovar la igualtat d’un valor \({c}\) amb zero, cal usar una tolerància epsilon, és a dir \(\left|f(c)\right| \,{<}\; \epsilon\)

../../../_images/biseccio.svg

El teorema de Bolzano estableix que si \(f(a) \cdot f(b) \,{<}\, 0\) i \(f\) és contínua en \([a,b]\) existeix un valor, \({c}\), contingut en \([a,b]\) tal que \(f(c) = 0\). Per tant, inicialment haurem de buscar dos valors \(a\) i \(b\) dins del domini de la funció, que compleixin l’esmentada propietat i que seran els límits de l’interval inicial de cerca de l’arrel.

En el fitxer bolzano.py (mòdul bolzano) dissenyeu la funció recursiva:

bolzano.bisecció(f, a, b, eps)

A partir de la funció contínua f, els límits de l’interval on hi ha l’arrel a i b, i l’error mínim d’aproximació que es vol aconseguir eps, retorna l’arrel d”f en l’interval \([a, b]\) calculada segons el mètode de bisecció amb una tolerància eps.

Per exemple:

>>> import bolzano

>>> import math

>>> f = math.sin
>>> eps = 1e-5
>>> x = bolzano.bisecció(f, -1, 2, eps)
>>> print('{:.6g}'.format(x))
7.62939e-06
>>> f = math.cos
>>> eps = 1e-5
>>> x = bolzano.bisecció(f, -1, 2, eps)
>>> print('{:.6g}'.format(x))
1.5708

Nota

Disposeu de jocs de proves addicionals al fitxer test-biseccio.txt.

Solució

Disposeu d’una solució al fitxer bolzano.py.