You are on page 1of 16

INSTITUTO TECNOLGICO DE COSTA RICA

ESCUELA DE INGENIERA ELECTRNICA

Mtodos Numricos (CM3201)

Mtodo de la Biseccin

Profesor: Ing. Marvin Hernndez C.

II semestre 2006

MTODO DE BISECCIN PARA CALCULO DE RAICES Es un mtodo cerrado o de intervalos que se utiliza para calcular las races de ecuaciones, cuya caracterstica es que las funciones cambian de signo en la vecindad de la raz. Para esta tcnica se requiere proporcionar dos valores iniciales para la raz. Definicin : En general, si f(x) es real y continua en el intervalo que va desde X L a XU, y f(XL) y f(XU) tienen signos opuestos, es decir,
f (X L ) * f (XU ) < 0

entonces hay al menos una raz real entre XL y XU. Los mtodos de bsqueda incremental aprovechan esta caracterstica localizando un intervalo en el que la funcin cambie de signo. Entonces, la localizacin del cambio de signo (y, en consecuencia, de la raz) se logra con ms exactitud al dividir el intervalo en varios subintervalos. Se investiga estos subintervalos para encontrar el cambio de signo. El proceso se repite y la aproximacin a la raz mejora cada vez ms en la medida que los subintervalos se dividen en intervalos cada vez ms pequeos . En numero de iteraciones para el clculo del valor de X R (valor para el cual la funcin f(XR) = 0) mas preciso; se definir mediante el criterio de error relativo porcentual a, donde:
a =
Xr nuevo Xr anterior * 100% Xr nuevo

a =
XU X L * 100% XU + X L

Cuando a es menor que un valor previamente prefijado s, termina el clculo

Algoritmo El algoritmo para el mtodo de biseccin se puede resumir en los siguientes pasos : Paso 1 : Elija valores iniciales inferior, XL, y superior Xu, que encierran la raz, de forma tal que la funcin cambie de signo en el intervalo. Esto se verifica comprobando que f(XL)* f(XU) < 0. Paso 2: Una aproximacin de la raz XR se determina mediante :
X R= X L + XU XL

Paso 3: Realice las siguientes evaluaciones para determinar en qu subintervalo est la raz : a) b) c) Si f(XL)* f(XU) < 0, entonces la raz se encuentra dentro del subintervalo inferior o izquierdo. Por lo tanto, haga XU = XR y vuelva al paso 2. Si f(XL)* f(XU) > 0, entonces la raz se encuentra dentro del subintervalo superior o derecho. Por lo tanto, haga XL = XR y vuelva al paso 2. Si f(XL)* f(XU) = 0, entonces la raz es igual a XR; termina el clculo.

Programa Para desarrollar el programa se utiliz el Software MATLAB y las herramientas para implementar los m-files. Programa para ejecutar el mtodo de biseccin, evaluando la funcin particular Paracadas.

Ejemplo1 Se desea determinar el coeficiente de arrastre c necesario para que un paracaidista de masa m = 68 . 1Kg tenga una velocidad de 40 m/s despus de una cada libre de t = 10 s. La aceleracin de la gravedad es 9.8m/s2 . Solucin : El problema se resuelve determinando la raz de la ecuacin (1)
f (c ) = g *m (1 e ( c / m )*t ) V (1) c

Al sustituir los parmetros en(1) se obtiene :


f (c ) = 667.38 (1 e 0.146843c ) 40 c

La raz de la ecuacin 1 se define para los valores de c, que hagan f(c) = 0 A continuacin se muestra el cdigo de programacin para ejecutar el mtodo iterativo de biseccin para obtener la raz de la ecuacin 1, donde f(c) = 0.

Ejemplo1
xl = input('Limite inferior del intervalo : '); xu = input('Limite superior del intervalo : '); es = input('Criterio de terminacion : '); imax = input('Numero de iteraciones propuesto : '); Biseccion (xl, xu, es, imax); function Biseccion = f(xl, xu, es, imax) ea = 0; xr = 0; iter = 0; xrold = 0; while (1) xrold = xr; xr = ( xl + xu ) / 2; iter = iter + 1; if xr ~= 0 ea = abs (( xr - xrold) / xr ) * 100 ; end test = Paracaidista (xl) * Paracaidista (xr); if test < 0 xu = xr; elseif test > 0 xl = xr; else ea = 0; end if (ea < es)||( iter >= imax), break, end end Biseccion = xr Iteraciones = iter Evaluacion = abs(Paracaidista (xr)) end function Paracaidista = f (c) p = (( 667.38 / c ) * ( 1 - exp ( -0.146843 * c ))) - 40 ; Paracaidista = p;

Resultados Para este caso el algoritmo de Biseccin, tiene 2 criterios de paro que estn definidos por : -

a es menor que un valor previamente prefijado s


El numero de iteraciones que el usuario quiere que se realicen para el clculo del valor de la raz

Se define que, el paro se realice cuando se presente cualquiera de las 2 condiciones anteriores. Si se requiere bastante precisin se puede escoger un s bastante pequeo bien dar un numero de iteraciones suficientemente grande. Caso 1 : s = 0.5 , Iteraciones = 10

Caso 2 : s = 0.00001 , Iteraciones = 10

Caso 3 : s = 0.00001 , Iteraciones = 3

Note que a medida que se disminuye el nmero de iteraciones el criterio s , el valor de c para la raz se hace ms impreciso, lo cual se puede observar en el resultado de la evaluacin de f(c). Si s el nmero de iteraciones se aumenta, el valor de c se vuelve ms preciso, tal como se muestra en el caso 4.

Caso 4 : s = 0.000001 , Iteraciones = 2000

Grfica de la funcin

Para, calcular races de otras funciones, lo nico que hay que hacer es definir otra funcin que cumpla con los requisitos dados en la definicin. El programa de biseccin sera el mismo function Biseccion = f(xl, xu, es, imax); y lo nico que habra que redefinir es la funcin a la cual se le van a calcular las races test = Paracaidista
(xl) * Paracaidista (xr);

Para este caso a test se le asignara otra funcin f previamente definida


test = f (xl) * f (xr);

Donde f puede ser definicin anterior

un polinomio; o cualquier funcin que cumpla con la

Ejemplo 2 : Hallar la raz de f(x)= x2-2 en el intervalo [0,2]. Como f(x) es continua en el intervalo dado y f(0) f(2)<0, podemos asegurar que existe una raiz, y como f(x) es diferenciable con derivada continua siendo f(x) > 0 en [0,2], la raz es nica. El valor terico para la raz es : X = 2 1.4114...

Ejemplo2
xl = input('Limite inferior del intervalo : '); xu = input('Limite superior del intervalo : '); es = input('Criterio de terminacion : '); imax = input('Numero de iteraciones propuesto : '); Biseccion1 (xl, xu, es, imax); function Biseccion1 = f(xl, xu, es, imax) ea = 0; xr = 0; iter = 0; xrold = 0; while (1) xrold = xr; xr = ( xl + xu ) / 2; iter = iter + 1; if xr ~= 0 ea = abs (( xr - xrold) / xr ) * 100 ; end test = Polinomio (xl) * Polinomio (xr); if test < 0 xu = xr; elseif test > 0 xl = xr; else ea = 0; end if (ea < es)||( iter >= imax), break, end end Biseccion = xr Iteraciones = iter Evaluacion = abs(Polinomio (xr)) end function Polinomio = f (c) p = exp(2*log(abs(c)))-2; Polinomio = p;

Resultados Caso 1 : s = 0.5 , Iteraciones = 10

Caso 2 : s = 0.000005, iteraciones = 1000

Grfica de la funcin

You might also like