[RECUERDA, EN ESTA PÁGINA EL CÓDIGO SE ENCUENTRA AL FINAL PARA SU DESCARGA]
Una de los usos mas importares en la aplicación de los métodos numéricos es el de hallar las raíces de ecuaciones o también llamados ceros de las funciones, ya sean funciones lineales o no lineales, como siempre, los métodos numéricos son usados en las ocasiones donde lo que necesitamos no requiere de la precisión exacta como cuando se hallan dichos valores analíticamente, es decir con papel y lápiz y hacer ciertos despejes, en algunos casos esto resulta trivial, pero en otros, no resulta tan fácil, y si se hicieran de forma simbólica, el costo computacional no permitiría que fuera para nada optimo, es aquí donde entran nuestros métodos numéricos a salvar nuestros diseños o cualquier trabajo que con base a esos datos estemos desarrollando.
Existe gran variedad de métodos para hallar dichas raíces de ecuaciones, algunos son originales, otros tantos son derivaciones de estos, o corrigen falencias presentadas por los originales, haciéndolos mas óptimos tanto computacionalmente hablando como más precisos en sus resultados.
En esta vez será de nuestro interés el desarrollo de un tipo de métodos, conocidos como «métodos de intervalo» partiendo del hecho que un intervalo, matemáticamente hablando es el conjunto que esta comprendido entre dos valores.
Los métodos de intervalo, sacan ventaja del hecho que una función normalmente cambia de signo en la vecindad de una raíz como se ve en la figura 1.
En la figura 1 se puede apreciar lo anteriormente dicho, donde en un intervalo comprendido entre XL (lower) y XU (upper) la función cambia de signo al cortar el eje x, es esta situación en particular la que aprovechan los métodos de intervalo.
El algoritmo de la bisección es muy básico y consta de los siguientes pasos:
- Escoger las estimaciones iniciales XL y Xu es decir, el intervalo, de tal forma que se cumpla que:
2. Realizar una división del intervalo que corresponderá a un estimado de la raíz:
3. Realizar las siguientes evaluaciones para determinar el intervalo en el cual esta la raíz:
- Si f(XL)*f(Xr)<0 la raíz se encuentra en el intervalo inferior, entonces Xu=Xr, y se retorna al paso 2.
- Si f(XL)*f(Xr)>0 la raíz se encuentra en el intervalo superior, entonces XL=Xr, y se retorna al paso 2.
- Si f(XL)*f(Xr)=0 la raíz es igual a Xr (muy poco probable), se terminan las iteraciones.
Código en Matlab.
En nuestro caso, inicialmente podemos hacer una representación gráfica de la función para que se vea con mayor claridad el intervalo apropiado para iniciar las iteraciones. (para ver la imagen mejor, dar clic sobre ella).
Seguidamente de la visualización de la respectiva gráfica de la función, se pretende que el usuario ingrese los limites: ya sea que la función reciba estos como parámetros o de la siguiente forma dentro de la función:
Debido a la posibilidad que el usuario ingrese un intervalo no apropiado, es decir un intervalo donde no se cumpla que la función cambia de signo, es bueno enviar un mensaje de advertencia, avisando que el intervalo no es valido, esto lo hemos hecho de la siguiente forma: (para visualizar mejor la imagen darle clic).
Finalmente se inicia el método de bisección, con un ciclo, un umbral de error que ya hemos definido previamente de 0.000001% y con las respectivas sentencias condicionales ( if ) para cada uno de los 3 posibles casos: (dar clic en la imagen para ver mejor).
Cabe aclarar que para el correcto llamado de la función, debe de ser previamente definida una variable simbólica ‘X’ con el comando SYMS de Matlab, y posteriormente escribir la función ‘Y’ correspondiente, para pasarla como parámetro a la función ‘biseccion(Y)’ como ilustra la siguiente imagen.
Finalmente, después de la ejecución del código la función de Matlab llamada bisección, nos retorna una variable con el respectivo valor aproximado de la raíz, con una precisión del 0.000001% de error.
El método de bisección en particular sirve para encontrar una raíz simple en una función fácil de evaluar, pero debido a que principalmente los métodos numéricos son usados para ecuaciones que no son tan fáciles de evaluar, las funciones programadas requieren de bastantes lineas de código y se deben evaluar muchas veces para ir cambiando los límites para finalmente «encontrar» la raíz, este método ya no es tan efectivo. Debido a factores de este tipo, es muy importante que los algoritmos numéricos hagan lo más mínimo posible el número de evaluaciones de la función. Es por esto que el método de bisección se hace ineficiente, ya que la función debe ser evaluada en cada ciclo.
El código respectivo del programa mostrado en las imágenes anteriores, puede ser descargado aquí puedes comentar las preguntas que tengas con respecto a este código.
Comentar es una forma de agradecer.
septiembre 9, 2013 at 3:10 pm
gracias por la información
Me gustaMe gusta
diciembre 31, 2013 at 4:46 pm
con gusto amigo, ojalá te haya servido.
Me gustaMe gusta
julio 28, 2014 at 12:13 am
amigo ingeniero12 aplique este metodo pero me dio como respuesta 0 hice el ejemplo de tu plicacion agradeceria si solucionas esta duda uso matlab 2013
Me gustaMe gusta
julio 28, 2014 at 11:57 am
Hola @liga0257, gracias por ser tan activo, que bueno que comentaste aquí hace un tiempo que no había revisado este post.
Te comento, resulta que este método tiene cierta convergencia, y se basa en elegir correctamente el intervalo, debido a eso decidimos incluir en el script la opción de generar un gráfico para que se pudiera hacer una elección mas acertada de límites, en este caso la raíz que nos debería arrojar debería ser 1 pero si por ejemplo le decimos al método que me busque la raíz en un intervalo que no contiene al 1 los resultados pueden ser inesperados o simplemente arrojar el mensaje de error que hemos programado.
Puedes por ejemplo ingresar un intervalo entre 0 y 1.5, y el resultado será 1.00 o por ejemplo ingresar un intervalo entre -4 y 40 y el resultado será acertado.
Gracias por comentar este caso, fue error mio no haber concluido bien el ejemplo. saludos liga.
Me gustaMe gusta
diciembre 20, 2014 at 9:07 am
Gracias. Me has sacado de un gran apuro
Me gustaMe gusta
febrero 21, 2015 at 10:37 pm
Buenas Julio César, al ejecutar este código me sale:
??? function [xr] = biseccion(y)
|
Error: Function definitions are not permitted in this context
Soy un poco nueva en esto,podria indicarme por favor que debo hacer para corregir dicho error?
Muchas gracias
Me gustaMe gusta
febrero 21, 2015 at 11:13 pm
¡Hola Kelly!
Gracias por comentar, ¿has utilizado el script que publicamos en esta entrada?
si es así, ¿cómo lo llamaste en la ventana de comandos?
El mensaje que mencionas normalmente aparece, cuando se intenta definir una función en la propia ventana de comandos y no en un archivo aparte, esperamos tu respuesta.
Saludos.
Julio
Me gustaMe gusta
febrero 22, 2015 at 4:29 pm
Gracias por responder,ya apliqué lo que me recomendó, pero ahora al ejecutar me sale el sgte error:
??? Input argument «y» is undefined.
Gracias por su ayuda
Me gustaMe gusta
febrero 24, 2015 at 9:20 am
Hola Kelly, disculpa por la tardanza en la respuesta, solo que de vuelta a la Universidad el tiempo disminuye, pero espero poder seguir ayudando aquí.
Lo que te aparece, es porque primero debes definir la función ‘Y’ antes de usar el método de bisección para hallar sus raíces, es decir, primero debes escribir la función como por ejemplo (escribe esto en la ventana de comandos)
syms x
y = x^3-1;
biseccion(y)
Tal cual está en el ejemplo, asegúrate además que en el »current folder» esté la función biseccion.m para que Matlab pueda encontrar el archivo.
Saludos.
Julio.
Me gustaMe gusta
marzo 17, 2015 at 11:10 am
GENIAL!!
Me gustaMe gusta
abril 7, 2015 at 9:48 pm
Hola Paula, gracias por tu comentario!!
esperamos que los demás artículos de este sitio también te resulten útiles.
Saludos.
Me gustaMe gusta
agosto 19, 2015 at 11:19 pm
Muy buena explicación del método, y muy completo blog, ojalá sigan apoyando a la comunidad de ingeniería 😉 Gracias!
Me gustaMe gusta
septiembre 1, 2015 at 3:23 am
Muchisimas Gracias por el contenido amigo!! me sirvió de mucho
Me gustaMe gusta