Está en la página 1de 3

Método de Bisección

después de una raíz de f (x) = 0 ha sido entre corchetes en el intervalo (x 1, x 2), pueden utilizar varios
métodos
para cerrar él. El método de Bisección logra esto sucesivamente reducir el intervalo hasta que sea
suficientemente pequeña. Esta técnica es también conocido como el intervalo de método de reducir a la
mitad. Bisección no es el método más rápido disponible para las raíces de la computación, pero es el más
confiable. Una vez que una raíz ha sido entre corchetes, bisección siempre cerrará él.
El método de Bisección utiliza el mismo principio como búsqueda incremental: si hay es una raíz en el
intervalo (x 1, x 2), entonces f (x 1) · f (x 2) < 0. con el fin de reducir a la mitad el intervalo calculamos f (x
3), donde x 3 = 1/2 (x 1 x 2) es el punto medio del intervalo. Si f (x 2) ·
f (x 3) < 0, entonces la raíz debe ser (x 2, x 3) y grabamos esto sustituyendo el original encuadernado x 1 x
3. De lo contrario, la raíz se encuentra en (x 1, x 3), en cuyo caso x 2 se sustituye por x 3. En cualquier
caso, el nuevo intervalo (x 1, x 2) es la mitad del intervalo original. La bisección se repite hasta que el
intervalo se ha reducido a un valor pequeño de ε, por lo que
|x2 − x1| ≤ ε
Es fácil calcular la cantidad de bi-secciones necesaria para alcanzar una ε
prescrito. El intervalo original x se reduce a x / 2 después de una Bisección, x / 22 tras dos
bi-secciones y bi-secciones n es x / 2n. Configuración de x / 2n = ε y despejando n,
obtenemos
Claramente, el método de Bisección converge linealmente, puesto que el error se comporta como Ek 1 =
Ek/2.
Bisección
esta función utiliza el método de Bisección para calcular la raíz de f (x) = 0 que es
que se encuentran en el intervalo (x 1, x 2). El número de bi-secciones n necesaria para reducir el
intervalo de
a tol se calcula de la ecuación (4.1). El filtro del argumento de entrada controla la filtración de
singularidades sospechosos. Configuración de filtro = 1, forzamos la rutina para comprobar si la
magnitud de f (x) disminuye con la mitad de cada intervalo.
Si lo hace no, la "raíz" puede no ser una raíz, sino una singularidad, en cuyo caso raíz = se devuelve NaN.
Puesto que esta función no siempre es deseable, que el valor predeterminado es filtro = 0.

function root = bisect(func,x1,x2,filter,tol)


% Finds a bracketed zero of f(x) by bisection.
% USAGE: root = bisect(func,x1,x2,filter,tol)
% INPUT:
% func = handle of function that returns f(x).
% x1,x2 = limits on interval containing the root.
% filter = singularity filter: 0 = off (default), 1 = on.
% tol = error tolerance (default is 1.0e4*eps).
% OUTPUT:
% root = zero of f(x), or NaN if singularity suspected.
if nargin < 5; tol = 1.0e4*eps; end
if nargin < 4; filter = 0; end
f1 = feval(func,x1);
if f1 == 0.0; root = x1; return; end
f2 = feval(func,x2);
if f2 == 0.0; root = x2; return; end
if f1*f2 > 0;
error(’Root is not bracketed in (x1,x2)’)
end
n = ceil(log(abs(x2 - x1)/tol)/log(2.0));
for i = 1:n
x3 = 0.5*(x1 + x2);
f3 = feval(func,x3);
if(filter == 1) & (abs(f3) > abs(f1))...
& (abs(f3) > abs(f2))
root = NaN; return
end
if f3 == 0.0
root = x3; return
end
if f2*f3 < 0.0
x1 = x3; f1 = f3;
else
x2 = x3; f2 = f3;
end
end
root = (x1 + x2)/2;

EJEMPLO 4.2
bisección de uso para encontrar la raíz de f (x) = x 3 − 10 x 2 que se encuentra en el intervalo
(0.6, 0.8) 5 = 0.
Solución de la mejor manera de implementar el método es utilizar la tabla que se muestra a
continuación.
Nota que se determina el intervalo de ser atravesada por el signo de f (x), no su magnitud.
x F(x) Intervalo
0.6 1.616 −
0.8 -0.888 (0.6 , 0.8)
(0.6+0.8)/2 = 0.7 0.443 (0.7 , 0.8)
(0.8+0.7)/2 = 0.75 -0.203 (0.7 , 0.75)
(0.7 + 0.75)/2 = 0.725 0.125 (0.725 , 0.75)
(0.75 + 0.725)/2 = 0.7375 -0.038 (0.725 , 0.7375)
(0.725 + 0.7375)/2 = 0.73125 0.044 (0.7375 , 0.73125)
(0.7375 + 0.73125)/2 = 0.73438 0.003 (0.7375 , 0.73438)
(0.7375 + 0.73438)/2 = 0.73594 -0.017 (0.73438 , 0.73594)
(0.73438 + 0.73594)/2 = 0.73516 -0.007 (0.73438 , 0.73516)
(0.73438 + 0.73516)/2 = 0.73477 -0.002 (0.73438 , 0.73477)
(0.73438 + 0.73477)/2 = 0.73458 0.000 −

El resultado final x = 0.7346 es correcto dentro de cuatro decimales.

EJEMPLO 4.3
encontrar todos los ceros de f (x) = x − tan x en el intervalo (0, 20) por el método de Bisección.
Utilizar la funciones rootsearch y atraviesan.
Solución nota que tan x es singular y cambia de signo en x = π/2, 3π/2. Para evitar
atraviesan de confundir estos punto para raíces, establecemos filtro = 1. La cercanía de las raíces a las
singularidades es otro problema que puede aliviarse mediante el uso de pequeño x en rootsearch. Elegir
x = 0.01, llegamos al siguiente programa:

% Example 4.3 (root finding with bisection)


func = @(x) (x - tan(x));
a = 0.0; b = 20.0; dx = 0.01;
nroots = 0;
while 1
[x1,x2] = rootsearch(func,a,b,dx);
if isnan(x1)
break
else
a = x2;
x = bisect(func,x1,x2,1);
if ˜isnan(x)
nroots = nroots + 1;
root(nroots) = x;
end
end
end
root
Running the program resulted in the output
>> root =
0 4.4934 7.7253 10.9041 14.0662 17.2208