Este método es conocido también como de corte binario. de partición en dos intervalos iguales o método de Bolzano. Es un método de búsqueda incremental donde el intervalo de búsqueda se divide en dos. Si la función cambia de signo sobre un intervalo, se calcula el valor en el punto medio. El nuevo intervalo de búsqueda será aquel donde el producto de la función cambie de signo.
Ejemplo.
Considere la función f(x) = x-cosx, a priori sabemos que la función tiene un cruce por cero en el intervalo [0,1], así que nuestra búsqueda se concentrará en este.
iter |
inicio |
mitad |
fin |
f(ini) |
f(mitad) |
f(fin) |
0 |
0.0 |
0.5 |
1.0 |
-1.0 |
-0.3775 |
0.4596 |
1 |
0.5 |
0.75 |
1.0 |
-0.3775 |
0.0183 |
0.4596 |
2 |
0.5 |
0.625 |
0.75 |
-0.3775 |
-0.1859 |
0.0183 |
3 |
0.625 |
0.6875 |
0.75 |
-0.1859 |
-0.0853 |
0.0183 |
4 |
0.6875 |
0.71875 |
0.75 |
-0.0853 |
-0.0338 |
0.0183 |
5 |
0.71875 |
0.734375 |
0.75 |
-0.0338 |
-0.0078 |
0.0183 |
6 |
0.734375 |
0.7421875 |
0.75 |
-0.0078 |
0.0051 |
0.0183 |
7 |
0.734375 |
0.73828125 |
0.7421875 |
-0.0078 |
-0.0013 |
0.0051 |
8 |
0.73828125 |
0.740234375 |
0.7421875 |
-0.0013 |
0.0019 |
0.0051 |
9 |
0.73828125 |
0.7392578125 |
0.740234375 |
-0.0013 |
0.0002 |
0.0019 |
La implementación
recursiva de este algoritmo es:
public static double Biseccion(double ini,
double fin)
{
double mitad; mitad =
(fin + ini)/2.0;
if((fin - ini) > 0.001)
{
if(funcion(ini)*funcion(mitad) < 0)
return Biseccion(ini, mitad);
else return Biseccion(mitad, fin);
}
else return (mitad);
}
public static double funcion(double x)
{
return (x - Math.cos(x));
}