You are on page 1of 4

Mtodo del Intervalo Medio o Biseccin

METODO DE LA BISECTRIZ
El mtodo de la bisectriz es un mtodo numrico sencillo, muy verstil para
encontrar una raz real en un intervalo en el que existe una raz.
Su singular ventaja consiste en que funciona incluso con funciones no analticas;
sin embargo, slo se debe utilizar el mtodo despus de un anlisis grfico.
Supongse que hay una raz de f(x) = 0 en un intervalo entre;
x = a y x = c,
denotado por [a, c] o, de forma equivalente, por c x a.
El mtodo de la bisectriz se basa en el hecho de que, cuando un intervalo [a, c]
tiene una raz, el signo de y(x) en los extremos es distinto, o sea, f(a) f(c) < 0.
El primer paso de este mtodo consiste en bisectar el intervalo [a, c] en dos
mitades: [a, b] y [b, c], donde;
b=(a+b)/2
Si se verifican los signos de f(a)f(b) y f(b)f(c), se sabe en que mitad del intervalo
se encuentra la raz.
De hecho, si 0 f(a)f(b), el intervalo [a, b], que incluye x = a y x = b, contiene a
la raz; de lo contrario, la raz esta en el otro intervalo, [b, c].
A continuacin, se bisecta de nuevo el intervalo que contiene a la raz.
Al repetir este procedimiento, el tamao del intervalo que contiene a la raz se
har cada vez ms pequeo.
En cada paso se toma el punto medio del intervalo como la aproximacin ms
actualizada a la raz.
La iteracin se detiene cuando el tamao de la mitad del intervalo es menor que
una tolerancia dada.
El tamao del intervalo despus de n pasos de iteracin es

(c0- a0)/2n
donde a0 y c0 son valores iniciales, de modo que el numerador es el tamao de
intervalo inicial.
La ecuacin anterior representa el mximo error que existe cuando se aproxima
la raz con el n-simo punto medio. Por tanto, si la tolerancia del error es , el
nmero de pasos de iteracin necesarios es el entero n ms pequeo que satisface
( c0- a0)/2n
De forma equivalente, n log[(c0- a0)/ ]/log(2) donde es la tolerancia.

Algoritmo:
1. Elija valores Iniciales para a y b de forma tal que lea funcin cambie de
signo sobre el intervalo. Esto se puede verificar asegurandose de que :
f(a)*f(b) < 0
2. La primera aproximacin a la raz se determina con la formula:
xn = (a + b) / 2
3. Realizar las siguientes evaluaciones para determinar en que subintervalo se
encuentra la raz:
f(a)*f(xn ) < 0 Entonces b = xn
f(a)*f(xn) > 0 Entonces a = xn
f(a)*f(xn) = 0 Entonces xn Es la Raz
4. Calcule la nueva aproximacin
xn+1 = (a + b) / 2
5. Evaluar la aproximacin relativa
| (xn+1 - xn ) / xn+1 | < Tolerancia
No. (Falso) Repetir el paso 3, 4 y 5
Si . (Verdadero) Entonces xn+1 Es la Raz
Down load el metodo de bisecin

en lenguaje C.

MatLAB
Para realizar este metodo en formato Matlab se procede como sigue:
Se utiliza la funcin bisec_g, para calculos de biseccin.
La cual muestra grficamente el avance de la iteracin de biseccin; en la figura
resultante del matlab ilustra la grfica final.
La sintaxis de bisec_g es la siguiente:
bisec_g(nombre_f, a, c, xmin, xmax, n_puntos)
Donde nombre_f es el nombre de la funcin que define la ecuacin por resolver,
a y c son los extremos del intervalo inicial, xmin y xmax son los valores mnimo y
mximo de x en la grfica, y n_puntos es el nmero de puntos que se usan para
graficar la funcin.
La tolerancia es = 10-6 por omisin.

bisec_g.m
function bisec_g(f_name, a,c, xmin, xmax, n_points)
f_name
%a, c : extremos del intervalo inicial
%tolerance:tolerancia
%It_limit:lmite de el nmero de iteraciones
%Y_a, Y_c : valores de los extremos actuales
%fun_f(x): valor funcional en x
clg, hold off
clear Y_a, clear Y_c
wid_x= xmax-xmin; dx = (xmax-xmin)/n_points;
xp=xmin:dx:xmax;
yp = feval(f_name, xp);
plot (xp,yp); xlabel('x'); ylabel('f(x)');
title('Mtodo de la bisectriz'), hold on
ymin=min(yp); ymax=max(yp); wid_y=ymax-ymin;
yp=0.*xp; plot(xp,yp);
fprintf('Mtodo de la bisectriz: \n\n');

tolerance=0.000001; it_limit=30;
fprintf(' It. a b c fa=f(a) ');
fprintf(' fc=f(c) abs(fc-fa) \n');
it=0;
Y_a=feval(f_name,a);Y_c=feval(f_name, c);
plot([a,a], [Y_a,0]); text(a,-0.1*wid_y,'x=a')
plot([c,c], [Y_c,0]); text(c,-0.1*wid_y,'x=c')
if (Y_a*Y_c > 0) fprintf('f(a)f(c > 0 \n');
else
while 1
it=it+1;
b= (a+c)/2; Y_b=feval(f_name, b);
plot([b,b], [Y_b,0],':'); plot(b,0,'o')
if it<4, text(b,wid_y/20, [num2str(it)]),end
fprintf('%3.0f %10.6f, %10.6f', it, a, b);
fprintf(' %10.6f, %10.6f, %10.6f', c, Y_a, Y_c);
fprintf(' %12.3e\n', abs((Y_c-Y_a)));
if (abs(c-a)<=tolerance)
fprintf(' Se satisface la tolerancia. \n');break
end
if( it>it_limit )
fprintf(' Se exedio el limite de iteraciones. \n');break
end
if (Y_a*Y_b <= 0) c=b; Y_c=Y_b;
else a=b; Y_a=Y_b;
end
end
fprintf('Resultado final: Raz=%12.6f \n',b);
end
x=b;
plot([x x],[0.05*wid_y 0.2*wid_y])
text(x, 0.25*wid_y, 'Solucin final')
plot([x( x-wid_x*0.004)], [0.05*wid_y 0.09*wid_y])
plot([x( x+wid_x*0.004)], [0.05*wid_y 0.09*wid_y])

You might also like