En este post te mostraré cómo usar el método de la bisección en C++ para la búsqueda de raíces. Se imprimirá una tabla con todas las iteraciones hasta que el error sea mínimo.

Lo hice con una ecuación o fórmula que puede cambiarse según sea el caso.

Método de la bisección en C++

La verdad es que no soy un matemático, pero sí un programador. El código queda así:

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

    ===========================================
    Método de la bisección en C++
    ===========================================
*/
#include <iostream>
#include <cmath>

using namespace std;

float resolverEcuacion(float valor) {
  // Con la ecuación: X^3 + 4X ^2 -10
  return pow(valor, 3) + 4 * (pow(valor, 2)) - 10;
}

int main() {
  int iterador = 1;
  /*
      a = inferior
      b = superior
  */
  float a = 1;
  float b = 2;
  float xi_xi = 0;
  float ultimo_xi = 0;

  printf(
      "|-----------------------------------------------------------------------"
      "--------------------------------------------\n");
  printf(
      "|  i |       a     |      b      |    f(a)     |    f(b)     |      xi  "
      "   |    f(xi)    |f(a) * f(xi) |   xi-xi_  |\n");
  printf(
      "|-----------------------------------------------------------------------"
      "--------------------------------------------\n");
  while (1) {
    float fa = resolverEcuacion(a);
    float fb = resolverEcuacion(b);
    float xi = (a + b) / 2;
    float fxi = resolverEcuacion(xi);
    float fa_fxi = fa * fxi;
    xi_xi = abs(xi - ultimo_xi);
    printf(
        "|%3d |%12.8f |%12.8f |%12.8f |%12.8f |%12.8f |%12.8f |%12.8f "
        "|%12.8f\n",
        iterador, a, b, fa, fb, xi, fxi, fa_fxi, xi_xi);
    iterador++;
    if (fa_fxi > 0) {
      a = xi;
    } else {
      b = xi;
    }
    ultimo_xi = xi;
    if (xi_xi == 0) {
      break;
    }
  }
}

Presta atención a la función resolverEcuacion pues ahí puedes cambiar la fórmula. Recuerda que la tabla se imprimirá y que el ciclo infinito se romperá cuando xi_xi sea 0.

Aquí tienes el ejemplo de cómo se ejecuta:

Método de la bisección en C++

Nota: para alinear los valores e imprimir la tabla utilicé printf.

Si el post ha sido de tu agrado te invito a que me sigas para saber cuando haya escrito un nuevo post, haya actualizado algún sistema o publicado un nuevo software. Facebook | X | Instagram | Telegram | También estoy a tus órdenes para cualquier contratación en mi página de contacto