En matemáticas , el método de bisección es un método de búsqueda de raíces que se aplica a cualquier función continua para la que se conocen dos valores con signos opuestos. El método consiste en bisecar repetidamente el intervalo definido por estos valores y luego seleccionar el subintervalo en el que la función cambia de signo y, por lo tanto, debe contener una raíz . Es un método muy simple y robusto, pero también es relativamente lento. Debido a esto, a menudo se utiliza para obtener una aproximación aproximada a una solución que luego se utiliza como punto de partida para métodos de convergencia más rápida. [1] El método también se llama método de división por la mitad del intervalo , [2] método de búsqueda binaria , [3] o método de dicotomía . [4]
Para los polinomios , existen métodos más elaborados para comprobar la existencia de una raíz en un intervalo ( regla de los signos de Descartes , teorema de Sturm , teorema de Budan ). Estos métodos permiten extender el método de bisección a algoritmos eficientes para encontrar todas las raíces reales de un polinomio; véase Aislamiento de raíces reales .
El método es aplicable para resolver numéricamente la ecuación f ( x ) = 0 para la variable real x , donde f es una función continua definida en un intervalo [ a , b ] y donde f ( a ) y f ( b ) tienen signos opuestos. En este caso se dice que a y b encierran una raíz ya que, por el teorema del valor intermedio , la función continua f debe tener al menos una raíz en el intervalo ( a , b ).
En cada paso, el método divide el intervalo en dos partes/mitades calculando el punto medio c = ( a + b ) / 2 del intervalo y el valor de la función f ( c ) en ese punto. Si c en sí es una raíz, entonces el proceso ha tenido éxito y se detiene. De lo contrario, ahora solo hay dos posibilidades: o f ( a ) y f ( c ) tienen signos opuestos y encierran una raíz, o f ( c ) y f ( b ) tienen signos opuestos y encierran una raíz. [5] El método selecciona el subintervalo que se garantiza que es un corchete como el nuevo intervalo que se utilizará en el siguiente paso. De esta manera, un intervalo que contiene un cero de f se reduce en ancho en un 50% en cada paso. El proceso continúa hasta que el intervalo sea suficientemente pequeño.
Explícitamente, si f ( c ) = 0 entonces c puede tomarse como la solución y el proceso se detiene. De lo contrario, si f ( a ) y f ( c ) tienen signos opuestos, entonces el método establece c como el nuevo valor para b , y si f ( b ) y f ( c ) tienen signos opuestos entonces el método establece c como el nuevo a . En ambos casos, los nuevos f ( a ) y f ( b ) tienen signos opuestos, por lo que el método es aplicable a este intervalo más pequeño. [6]
La entrada del método es una función continua f , un intervalo [ a , b ] y los valores de función f ( a ) y f ( b ). Los valores de función son de signo opuesto (hay al menos un cruce por cero dentro del intervalo). Cada iteración realiza estos pasos:
Al implementar el método en una computadora, puede haber problemas con la precisión finita, por lo que a menudo hay pruebas de convergencia adicionales o límites al número de iteraciones. Aunque f es continua, la precisión finita puede impedir que un valor de función sea cero. Por ejemplo, considere f ( x ) = cos x ; no hay ningún valor de punto flotante que se aproxime a x = π /2 que dé exactamente cero. Además, la diferencia entre a y b está limitada por la precisión de punto flotante; es decir, a medida que la diferencia entre a y b disminuye, en algún punto el punto medio de [ a , b ] será numéricamente idéntico a (dentro de la precisión de punto flotante de) a o b .
El método puede escribirse en pseudocódigo de la siguiente manera: [7]
entrada: Función f , valores de punto final a , b , tolerancia TOL , iteraciones máximas NMAX condiciones: a < b , o bien f ( a ) < 0 y f ( b ) > 0 o bien f ( a ) > 0 y f ( b ) < 0 resultado: valor que difiere de una raíz de f ( x ) = 0 en menos de TOL N ← 1 while N ≤ NMAX do // limitar iteraciones para evitar un bucle infinito c ← ( a + b )/2 // nuevo punto medio if f ( c ) = 0 or ( b – a )/2 < TOL then // solución encontrada Output( c ) Stop end if N ← N + 1 // incrementar contador de pasos if sign( f ( c )) = sign( f ( a )) then a ← c else b ← c // nuevo intervalo end while Output("Método fallido.") // número máximo de pasos excedido
Supongamos que se utiliza el método de bisección para encontrar una raíz del polinomio
En primer lugar, se deben encontrar dos números y de manera que y tengan signos opuestos. Para la función anterior, y satisfacen este criterio, como
y
Como la función es continua, debe haber una raíz dentro del intervalo [1, 2].
En la primera iteración, los puntos finales del intervalo que encierra la raíz son y , por lo que el punto medio es
El valor de la función en el punto medio es . Como es negativo, se reemplaza por en la siguiente iteración para garantizar que y tengan signos opuestos. A medida que esto continúa, el intervalo entre y se hará cada vez más pequeño, convergiendo en la raíz de la función. Vea cómo sucede esto en la tabla a continuación.
Después de 13 iteraciones, se hace evidente que hay una convergencia hacia aproximadamente 1,521: una raíz del polinomio.
Se garantiza que el método convergerá a una raíz de f si f es una función continua en el intervalo [ a , b ] y f ( a ) y f ( b ) tienen signos opuestos. El error absoluto se reduce a la mitad en cada paso, por lo que el método converge linealmente . Específicamente, si c 1 = a + b/2 es el punto medio del intervalo inicial, y c n es el punto medio del intervalo en el n -ésimo paso, entonces la diferencia entre c n y una solución c está acotada por [8]
Esta fórmula se puede utilizar para determinar, de antemano, un límite superior para el número de iteraciones que el método de bisección necesita para converger a una raíz dentro de una cierta tolerancia. El número n de iteraciones necesarias para lograr una tolerancia requerida ε (es decir, un error garantizado como máximo ε), está limitado por
donde el tamaño del corchete inicial y el tamaño del corchete requerido La principal motivación para utilizar el método de bisección es que sobre el conjunto de funciones continuas, ningún otro método puede garantizar producir una estimación c n para la solución c que en el peor de los casos tiene un error absoluto con menos de n 1/2 iteraciones. [9] Esto también es cierto bajo varios supuestos comunes sobre la función f y el comportamiento de la función en la vecindad de la raíz. [9] [10]
Sin embargo, a pesar de que el método de bisección es óptimo con respecto al peor desempeño en el caso bajo criterios de error absoluto, es subóptimo con respecto al desempeño promedio bajo supuestos estándar [11] [12] así como al desempeño asintótico . [13] Las alternativas populares al método de bisección, como el método secante , el método de Ridders o el método de Brent (entre otros), generalmente funcionan mejor ya que compensan el peor desempeño en el caso para lograr órdenes más altos de convergencia a la raíz. Y, se puede lograr una mejora estricta del método de bisección con un orden más alto de convergencia sin sacrificar el desempeño en el peor caso con el método ITP . [13] [14]
El método de bisección se ha generalizado a funciones multidimensionales. Estos métodos se denominan métodos de bisección generalizados . [15] [16]
Algunos de estos métodos se basan en el cálculo del grado topológico , que para una región acotada y una función diferenciable se define como una suma sobre sus raíces:
¿Dónde está la matriz jacobiana , , y
es la función signo . [17] Para que exista una raíz, es suficiente que , y esto se puede verificar utilizando una integral de superficie sobre el límite de . [18]
El método de bisección característica utiliza sólo los signos de una función en diferentes puntos. Sea f una función de R d a R d , para algún entero d ≥ 2. Un poliedro característico [19] (también llamado polígono admisible ) [20] de f es un politopo en R d , que tiene 2 d vértices, tales que en cada vértice v , la combinación de signos de f ( v ) es única y el grado topológico de f en su interior no es cero (criterio necesario para asegurar la existencia de una raíz). [21] Por ejemplo, para d = 2, un poliedro característico de f es un cuadrilátero con vértices (digamos) A,B,C,D, tales que:
Una arista propia de un polígono característico es una arista entre un par de vértices, de modo que el vector de signos difiere en un solo signo. En el ejemplo anterior, las aristas propias del cuadrilátero característico son AB, AC, BD y CD. Una diagonal es un par de vértices, de modo que el vector de signos difiere en todos los signos d . En el ejemplo anterior, las diagonales son AD y BC.
En cada iteración, el algoritmo elige una arista propia del poliedro (por ejemplo, A—B) y calcula los signos de f en su punto medio (por ejemplo, M). Luego procede de la siguiente manera:
Supóngase que el diámetro (= longitud de la arista propia más larga) del poliedro característico original es D . Entonces, se requieren al menos bisecciones de aristas para que el diámetro del polígono restante sea como máximo ε . [20] : 11, Lema 4.7 Si el grado topológico del poliedro inicial no es cero, entonces existe un procedimiento que puede elegir una arista tal que el siguiente poliedro también tenga un grado distinto de cero. [21] [22]