Regla de falsa posición

Regla de Falsa Posición

Este método tiene su fundamento teórico en el Teorema del Valor Intermedio, se basa en establecer un intervalo cerrado (a, b) en el cual la función es continua. Se deben buscar los valores que hagan que f(a) y f(b) tengan signos contrarios, de manera que f(a) ⋅ f(b) < 0, asegurando así la existencia de una raíz en el intervalo.

A diferencia del método de bisección, la Regla de Falsa Posición no toma el punto medio, sino que utiliza la intersección del eje x con la recta que une los puntos (a, f(a)) y (b, f(b)). Esta técnica puede ofrecer una mayor rapidez en la convergencia, especialmente si la función es casi lineal en el intervalo considerado.

La fórmula que se utiliza es:

X_r = b - \frac{f(b)(a - b)}{f(a) - f(b)}

El algoritmo para encontrar una raíz por el método de falsa posición se basa en los siguientes puntos:

  1. Escoger valores iniciales a (inferior) y b (superior) que encierren una raíz, es decir, tal que f(a) ⋅ f(b) < 0.
  2. Calcular una primera aproximación con la fórmula de la Regla de Falsa Posición.
  • Evaluar el signo de f ( X r ) f(X_r) :

    • Si f ( a ) f ( X r < 0 f(a) \cdot f(X_r) < 0 , entonces la raíz está en el subintervalo ( a , X r ) (a, X_r) , por lo que se reemplaza b = X r b = X_r .
    • Si f ( X r ) f ( b ) < 0 f(X_r) \cdot f(b) < 0 , la raíz está en el subintervalo ( X r , b ) (X_r, b) , por lo que se reemplaza a = X r a = X_r .
    • Si f ( X r = 0 f(X_r) = 0 , entonces X r X_r es raíz de la ecuación.
  • Ejemplo 1

    f(x) = cos(x) - x

    Esta función tiene una raíz en el intervalo (0, 1).



    Ejemplo 2

    x³ - 6x² + 11x - 6

    Esta función tiene una raíz en el intervalo (1, 2).



    Ejemplo 3

    f(x) = x³ + 4x² − 10

    Esta función tiene una raíz en el intervalo (1, 2).



    EXPLICACIÓN DE CODIGO

      
    import numpy as np
    import pandas as pd
    import matplotlib.pyplot as plt
    # EJEMPLO 3
    # Definimos la función
    def f(x):
        return x**3 + 4*x**2 - 10
    
    # Regla de la falsa posición
    def falsa_posicion(f, a, b, tol=1e-5, max_iter=100):
        if f(a) * f(b) >= 0:
            raise ValueError("La función debe cambiar de signo en el intervalo [a, b]")
    
        data = []
        for i in range(1, max_iter + 1):
            fa = f(a)
            fb = f(b)
            xr = b - (fb * (a - b)) / (fa - fb)
            fxr = f(xr)
    
            if i == 1:
                error = None
            else:
                error = abs((xr - xr_ant) / xr) * 100
    
            data.append([i, a, b, xr, f(xr), error])
    
            if fxr * fa < 0:
                b = xr
            else:
                a = xr
    
            if fxr == 0 or (error is not None and error < tol * 100):
                break
    
            xr_ant = xr
    
        return data, xr
    
    # Parámetros iniciales
    a = 1
    b = 2
    tabla, raiz = falsa_posicion(f, a, b)
    
    # Mostrar resultados
    df_resultado = pd.DataFrame(tabla, columns=["Iteración", "a", "b", "xr", "f(xr)", "Error Rel (%)"])
    print(df_resultado)
    print(f"\nRaíz aproximada: {raiz:.6f}")
    
    # Graficar función y puntos
    x_vals = np.linspace(0.5, 2.5, 400)
    y_vals = f(x_vals)
    
    plt.figure(figsize=(10, 5))
    plt.plot(x_vals, y_vals, label='f(x)', color='blue')
    plt.axhline(0, color='black', linestyle='--')
    
    # Puntos de xr
    for row in tabla:
        plt.plot(row[3], f(row[3]), 'ro')
    
    plt.title("Método de la Falsa Posición para $f(x) = x^3 + 4x^2 - 10$")
    plt.xlabel("x")
    plt.ylabel("f(x)")
    plt.grid(True)
    plt.legend()
    plt.show()