Para este método debemos considerar una función
continua dentro de un intervalo [a,b]
tal que f(a) tenga diferente signo f(a)*f(b) <0.
El proceso de decisión para encontrar la raíz
consiste en dividir el intervalo [a, b]
a la mitad c = (a+b)/2 y luego
analizar las tres posibilidades que se pueden dar.
1.- Si f(a)
y f(c) tienen signos opuestos, entonces
hay un cero entre [a,c].
2.- Si f(c)
y f(b) tienen signos opuestos,
entonces, hay un cero en [a,b].
3.- Si f(c)
es igual a cero, entonces c es un cero.
La implementación en Java es:
double biseccion()
{
int i;
double
inicio =0, fin = 1, mitad;
mitad =
(fin+inicio)/2.0;
while(fin
- inicio > 0.0001)
{
System.out.println(mitad);
pausa(300);
mitad = (fin+inicio)/2.0;
if(f(mitad) == 0) return mitad;
if(f(inicio)*f(mitad) < 0 )
fin = mitad;
else
inicio = mitad;
}
return mitad;
}
Ejemplo
Calcular los ceros de la función x-cos(x)
utilizando el algoritmo de bisección en el intervalo [0,1].
iter |
a |
c |
b |
f(a) |
f(
c) |
f(b) |
0 |
0.0000 |
0.5000 |
1.0000 |
-1.0000 |
-0.3776 |
-1.0000 |
1 |
0.5000 |
0.7500 |
1.0000 |
-0.3776 |
0.0183 |
-0.3776 |
2 |
0.5000 |
0.6250 |
0.7500 |
-0.3776 |
-0.1860 |
-0.3776 |
3 |
0.6250 |
0.6875 |
0.7500 |
-0.1860 |
-0.0853 |
-0.1860 |
4 |
0.6875 |
0.7188 |
0.7500 |
-0.0853 |
-0.0339 |
-0.0853 |
5 |
0.7188 |
0.7344 |
0.7500 |
-0.0339 |
-0.0079 |
-0.0339 |
6 |
0.7344 |
0.7422 |
0.7500 |
-0.0079 |
0.0052 |
-0.0079 |
7 |
0.7344 |
0.7383 |
0.7422 |
-0.0079 |
-0.0013 |
-0.0079 |
8 |
0.7383 |
0.7402 |
0.7422 |
-0.0013 |
0.0019 |
-0.0013 |
9 |
0.7383 |
0.7393 |
0.7402 |
-0.0013 |
0.0003 |
-0.0013 |
10 |
0.7383 |
0.7388 |
0.7393 |
-0.0013 |
-0.0005 |
-0.0013 |
11 |
0.7388 |
0.7390 |
0.7393 |
-0.0005 |
-0.0001 |
-0.0005 |
12 |
0.7390 |
0.7391 |
0.7393 |
-0.0001 |
0.0001 |
-0.0001 |
13 |
0.7390 |
0.7391 |
0.7391 |
-0.0001 |
0.0000 |
-0.0001 |
Su ejecución puede verse [aquí].