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.
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.
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í:
Como puedes ver el cálculo es correcto. Se muestran las iteraciones, derivadas y la tolerencia.
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…
El día de hoy te mostraré cómo crear un servidor HTTP (servidor web) en Android…
Esta web usa cookies.