Método de la regla falsa en C++

Hoy veremos cómo implementar el método de la regla falsa en C++. Este método involucra el resolver la fórmula, obtener xr, definir los intervalos y buscar el valor deseado hasta que la tolerancia sea menor a la deseada.

Funciones que resuelven la ecuación

Primero veamos las funciones:

double resolverEcuacion(double valor) {
  // Con la ecuación:  x^3-7x^2+14x-6
  return pow(valor, 3) - 7 * pow(valor, 2) + 14 * valor - 6;
}

double obtenerxr(double a, double b, double fa, double fb) {
  return ((a * fb) - (b * fa)) / (fb - fa);
}

En este caso estoy usando determinada fórmula, pero puedes cambiarla y todo el ejercicio seguirá funcionando perfectamente.

También puedes cambiar la tolerencia y los intervalos.

Método de la regla falsa en C++

Ahora veamos el código que hace posible todo esto:

/*
  ____          _____               _ _           _       
 |  _ \        |  __ \             (_) |         | |      
 | |_) |_   _  | |__) |_ _ _ __ _____| |__  _   _| |_ ___ 
 |  _ <| | | | |  ___/ _` | '__|_  / | '_ \| | | | __/ _ \
 | |_) | |_| | | |  | (_| | |   / /| | |_) | |_| | ||  __/
 |____/ \__, | |_|   \__,_|_|  /___|_|_.__/ \__, |\__\___|
         __/ |                               __/ |        
        |___/                               |___/         
    
    Blog:       https://parzibyte.me/blog
    Ayuda:      https://parzibyte.me/blog/contrataciones-ayuda/
    Contacto:   https://parzibyte.me/blog/contacto/
    
    Copyright (c) 2020 Luis Cabrera Benito
    Licenciado bajo la licencia MIT
    
    El texto de arriba debe ser incluido en cualquier redistribución

    ===========================================
    Método de la regla falsa
    ===========================================
*/
#include <cmath>
#include <iostream>

using namespace std;

double resolverEcuacion(double valor) {
  // Con la ecuación:  x^3-7x^2+14x-6
  return pow(valor, 3) - 7 * pow(valor, 2) + 14 * valor - 6;
}

double obtenerxr(double a, double b, double fa, double fb) {
  return ((a * fb) - (b * fa)) / (fb - fa);
}

int main() {

  double a = 1;
  double b = 3.2;
  int iterador = 1;
  double tolerancia = 0;
  double anterior_xr = 0;
  double toleranciaDeseada = 0.001;

  printf("Método de la Regla Falsa\n");
  printf("f(x)= x^3-7x^2+14x-6\n");
  printf("Intervalos: [%0.2f, %0.2f]\n", a, b);
  printf("Tolerancia: %0.4f\n\n\n", toleranciaDeseada);
  printf("+-----------+-------------+-------------+-------------+-------------+"
         "-------------+-------------+-------------+------------+\n");
  printf("|Iteraciones|       a     |       b     |     f(a)    |     f(b)    "
         "|      xr     |    f(xr)    |  f(a)*f(xr) | Tolerancia |\n");
  printf("+-----------+-------------+-------------+-------------+-------------+"
         "-------------+-------------+-------------+------------+\n");

  while (1) {
    double fa = resolverEcuacion(a);
    double fb = resolverEcuacion(b);
    double xr = obtenerxr(a, b, fa, fb);
    double fxr = resolverEcuacion(xr);
    double fa_fxr = fa * fxr;
    tolerancia = anterior_xr - xr;
    if (iterador == 1) {
      tolerancia = 0;
    }
    printf("|%10d |%12.8f |%12.8f |%12.8f |%12.8f |%12.8f |%12.8f |%12.8f "
           "|%12.8f|\n",
           iterador, a, b, fa, fb, xr, fxr, fa_fxr, tolerancia);
    if (fxr > 0) {
      a = xr;
    } else {
      b = xr;
    }
    anterior_xr = xr;
    if (iterador != 1 && tolerancia < toleranciaDeseada) {
      break;
    }
    iterador++;
  }
  printf("+-----------+-------------+-------------+-------------+-------------+"
         "-------------+-------------+-------------+------------+\n");
}

Como ves al inicio definimos la tolerancia y los intervalos. Vamos resolviendo la ecuación, obtenemos las derivadas y vamos imprimiendo los valores usando printf.

También hacemos un intercambio de los límites dependiendo de lo que salga de f(xr).

Al ejecutar el código vemos algo así:

Método de la regla falsa en C++

Como puedes ver el cálculo es correcto. Se muestran las iteraciones, derivadas y la tolerencia.

Estoy aquí para ayudarte 🤝💻


Estoy aquí para ayudarte en todo lo que necesites. Si requieres alguna modificación en lo presentado en este post, deseas asistencia con tu tarea, proyecto o precisas desarrollar un software a medida, no dudes en contactarme. Estoy comprometido a brindarte el apoyo necesario para que logres tus objetivos. Mi correo es parzibyte(arroba)gmail.com, estoy como@parzibyte en Telegram o en mi página de contacto

No te pierdas ninguno de mis posts 🚀🔔

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.

Dejar un comentario

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