2. Método de la Falsa Posición en Fortran

Publicado por Danilo Toro en

Banner- Método de la Falsa Posición

Ya vimos el método de la bisección en Fortran. Hoy veremos a su hermano 😏, el método de la falsa posición.

Requisitos

  • Conocimientos básicos de funciones matemáticas
  • Conocimiento de programación. Idealmente en Fortran

El método de la Falsa posición sigue la misma lógica que el método de la bisección para encontrar raíces pero con una mejora en rapidez, ya que, toma la idea del método de la secante (que veremos más adelante 🔜).

Método de la Falsa Posición

Se parte de un intervalo inicial [a0,b0] con f(a0) y f(b0) de signos opuestos, lo que garantiza que en su interior hay al menos una raíz… El algoritmo va obteniendo sucesivamente en cada paso un intervalo más pequeño [ak, bk] que sigue incluyendo una raíz de la función f.

Método de la regla falsa – Wikipedia

Similar al método de la bisección, tenemos un intervalo [a,b] donde al multiplicar el valor de sus funciones f(a)*f(b) obtenemos un valor negativo, f(a)*f(b) < 0. Con esto, garantizamos que en el intervalo existe un valor de x, donde f(x)=0

Hasta acá todo igual. Lo que hace diferente al método de la falsa posición es que no se divide el intervalo en partes iguales para obtener la aproximación de la raíz, sino que, la aproximación se calcula como la intersección con el eje X de la recta que une los puntos a y b.

Representación gráfica del método de la falsa posición
Representación gráfica del método de la falsa posición

Los pasos son los siguientes

  • Elegir un intervalo que contenga la raíz. [a,b]
  • Obtener la recta que une los extremos del intervalo
  • Obtener la intersección de la recta con el eje X, ese valor de x será nuestra aproximación.
  • Realizamos las siguientes comparaciones:
    • Si f(a)*f(x)<0, entonces la raíz se encuentra entre a y x, y hacemos b=x
    • Si f(a)*f(x)>0, entonces la raíz se encuentra entre x y b, y hacemos a=x
    • Si f(a)*f(x)=0, entonces a y/o x son raíz

Como puedes notar, el algoritmo de la falsa posición es casi el mismo que el de la bisección, a excepción de la aproximación de la raíz.

La aproximación de la raíz, se obtiene con la raíz de la recta que une los dos puntos 🤔. ¿Tenemos que usar un método numérico para encontrar la raíz de esta nueva recta? Aunque parezca que caemos en un bucle, no es así 😅

Como puedes ver en la imagen de más arriba, al unir los puntos del intervalo, se generan dos triángulos con exactamente los mismos ángulos. Usando triángulos semejantes, tenemos lo siguiente:

    \[    \frac{f(a)}{x - a}=\frac{f(b)}{x-b} \]

Despejando x, nos queda:

    \[    x = b - \frac{f(b)(a-b)}{f(a)f(b)} \]

Método de la Falsa Posición en Fortran

El código que verás a continuación es el mismo que te mostré para el post anterior, con la diferencia en la fórmula de la aproximación de la raíz.

Método de la bisección v/s método de la Falsa posición

Si imprimes el valor de las aproximaciones en ambos códigos y cuentas cuantas veces realiza el cálculo en los dos métodos, notarás que el método de la Falsa Posición encuentra la raíz en mucho menos iteraciones que el método de la Bisección.

Esta eficiencia se debe a que, al encontrar la intersección de la recta con el eje X, estamos tomando en cuenta las magnitudes de f(a) y f(b). Si f(a) o f(b) están más cerca del cero, entonces, nuestra primera iteración comienza más cerca de a o b respectivamente.

Aunque este método es más eficiente que el de la bisección la mayoría de las veces, existen algunos casos donde es ineficiente, por ejemplo funciones similares a esta:

    \[    f(x) = x^(10) - 1 \]

Este problema, lo podemos solucionar modificando el método, dando lugar al método de la Falsa Posición Modificada

Método de la Falsa Posición Modificada

El problema con el método normal es que a medida que se va iterando, uno de los límites tiende a permanecer fijos, por lo tanto, en nuestro código debemos tener “algo” que sea capaz de detectar cuando uno de los límites se estanca.

¿Qué es lo que haremos? Cuando uno de los límites tienda a mantenerse fijo, dividimos a la mitad el valor de la función en el punto de estancamiento.

En el código a continuación, agregamos dos contadores para cada intervalo. Si uno de los extremos no cambia después de dos iteraciones, entonces dividimos la función a la mitad.

Utilizando el método de la Falsa Posición, encontramos la raíz de nuestra función cuadrática en 8 iteraciones, en cambio, a través del método de la Falsa posición modificada, obtenemos la solución en solo dos iteraciones.

¡Ojo 👀! Aunque la mayoría de las veces el método de la falsa posición modificada es más eficiente, puede darse algunos casos donde no lo es y debemos volver al método de la bisección o al método de la falsa posición.

Ya llegamos al final 🖖. Recuerda que si tienes una duda en la lógica del código o ves algún error, puedes dejarlo en los comentarios. Tampoco olvides que puedes acceder a todos los códigos en el Repositorio de Github

💻Código – Método de la Falsa posición💻

💻Código – Método de la Falsa posición modificada💻


0 comentarios

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *