Método de la bisección en C++
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.
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/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 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:
Nota: para alinear los valores e imprimir la tabla utilicé printf.
En este post te quiero compartir un código de C++ para listar y cancelar trabajos…
Gracias a WebAssembly podemos ejecutar código de otros lenguajes de programación desde el navegador web…
Revisando y buscando maneras de imprimir un PDF desde la línea de comandos me encontré…
Esta semana estuve recreando la API del plugin para impresoras térmicas en Android (HTTP a…
Hoy te enseñaré a extraer la cadena base64 de una clave PEM usando una función…
Encender un foco con un Bot de Telegram es posible usando una tarjeta como la…
Esta web usa cookies.