lunes, 6 de junio de 2011

Metodo de Biseccion

El método de la bisección o corte binario es un método de búsqueda incremental que divide el intervalo siempre en 2. Si la función cambia de signo sobre un intervalo, se evalúa el valor de la función en el punto medio. La posición de la raíz se determina situándola en el punto medio del subintervalo donde exista cambio de signo. El proceso se repite hasta mejorar la aproximación.


Algoritmo



Paso 1


Elegir los valores iniciales Xa y Xb, de tal forma de que la función cambie de signo:

f(Xa)f(Xb) < 0


Paso 2


La primera aproximación a la raíz se determina con la fórmula del punto medio de esta forma:



Paso 3


Realizar las siguientes evaluaciones para determinar el intervalo de la raíz:
Si f(Xa)f(Xb) < 0, entonces la solución o raíz está entre Xa y Xpm, y Xb pasa a ser el punto medio (Xpm).
Si f(Xa)f(Xb) > 0, entonces la solución o raíz está fuera del intervalo entre Xa y el punto medio, y Xa pasa a ser el punto medio (Xpm).


Paso 4


Si f(Xa)f(Xb) = 0 ó Error = | Xpm – Xpm – 1 | < Tolerancia

Donde Xpm es el punto medio de la iteración actual y Xpm – 1 es el punto medio de la iteración anterior.
Al cumplirse la condición del Paso 4, la raíz o solución es el último punto medio que se obtuvo.

Para el error relativo porcentual se tiene la siguiente fórmula:







Implementado en Matlab



disp(' METODO DE LA BISECCION ');
disp(' ---------------------- ');
f=input('INGRESE FUNCION: ','s');
xai=input('INGRESE LIMITE INFERIOR DEL INTERVALO: ');
xbi=input('INGRESE LIMITE SUPERIOR DEL INTERVALO: ');
tol=input('INGRESE PORCENTAJE DE ERROR: ');
f=inline(f);
i=1;
ea(1)=100;
if f(xai)*f(xbi) < 0
xa(1)=xai;
xb(1)=xbi;
xr(1)=(xa(1)+xb(1))/2;
fprintf('It. Xa Xr Xb Error aprox \n');
fprintf('%2d \t %11.7f \t %11.7f \t %11.7f \n',i,xa(i),xr(i),xb(i));
while abs(ea(i)) >= tol,
if f(xa(i))*f(xr(i))< 0
xa(i+1)=xa(i);
xb(i+1)=xr(i);
end
if f(xa(i))*f(xr(i))> 0
xa(i+1)=xr(i);
xb(i+1)=xb(i);
end
xr(i+1)=(xa(i+1)+xb(i+1))/2;
ea(i+1)=abs((xr(i+1)-xr(i))/(xr(i+1))*100);
fprintf('%2d \t %11.7f \t %11.7f \t %11.7f \t %7.3f \n',...
i+1,xa(i+1),xr(i+1),xb(i+1),ea(i+1));
i=i+1;
end
else
fprintf('No existe una raíz en ese intervalo');
end



No hay comentarios.:

Publicar un comentario