Matlab, Método de Bisección para Raices de Ecuaciones

[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.

cambio de signo en la vecindad de una raíz.

cambio de signo en la vecindad de una raíz.

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:

  1. Escoger las estimaciones iniciales XL y Xu es decir, el intervalo, de tal forma que se cumpla que:

biseccion

       2.  Realizar una división del intervalo que corresponderá a un estimado de la raíz:

biseccion

       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).

biseccion

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:

biseccion

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).

biseccion

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).

biseccion

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.

biseccion

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.

15 comentarios en “Matlab, Método de Bisección para Raices de Ecuaciones

  1. Pingback: Matlab, Método de la Posición Falsa. | blogdelingeniero1

    • 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 gusta

  2. Pingback: Método de Bisección en Scilab -código | El Blog de Programación para Ingenierías

  3. 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 gusta

    • ¡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 gusta

    • 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 gusta

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s