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.
Encender un foco con un Bot de Telegram es posible usando una tarjeta como la…
El día de hoy te mostraré cómo crear un servidor HTTP (servidor web) en Android…
En este post te voy a enseñar a designar una carpeta para imprimir todos los…
En este artículo te voy a enseñar la guía para imprimir en una impresora térmica…
Hoy te voy a mostrar un ejemplo de programación para agregar un módulo de tasa…
Los usuarios del plugin para impresoras térmicas pueden contratar licencias, y en ocasiones me han…
Esta web usa cookies.