epelpad

Método de la biseccion en C++ (métodos numéricos)

Método de bisección (Bolzano)

Primero que nada debemos de saber que es el metodo, solo les pondre la introduccion, si desean consultar la informacion completa consulten ----->
http://repositorio.uned.ac.cr/multimedias/metodos_numericos_ensenanza/modulo2/descripcionmetodo.html <----------------
EL POST DE LA PAGINA WEB MENCIONADA NO ES DE MI AUTORIA, SIN EMBARGO EL PROGRAMA SI ES DE MI AUDOTORIA, la pagina web la pongo como cosulta

El método de bisección es uno de los más versátiles para determinar una raíz real en un intervalo de una ecuación dada, es fácil de comprender, aunque si se desea una mayor exactitud el número de cálculos que hay que realizar aumenta considerablemente.

Una de sus ventajas es que funciona para ecuaciones algebraicas y trascendentes, pero se recomienda utilizarlo después de un análisis gráfico.

El Teorema de Bolzano establece las condiciones necesarias para la existencia de al menos un cero de una función continua.

Teorema de Bolzano
Si f(x) es continua en el intervalo [a,b], con f(a)∙f(b)<0, entonces existe al menos un c∈]a,b[ tal que f(c)=0

///////////////////INICIO DEL PROGRAMA ///////////////////////////

#include <iostream>
#include <iomanip> // setprecision
#include <cmath>

#define PRECISION 6

using namespace std;

void tabula(double a, double b);
double f(double x);

int main()
{
cout << setprecision(PRECISION);
cout << "nCalculo de las raices de una funcion aplicando el metodo de la biseccionn";
cout << "nIngrese el intervalo inicial [a,b]:" << endl;

double a, b, tolerancia;

cout << "na = ";
cin >> a;

cout << "b = ";
cin >> b;

tabula(a, b);
// -----------------------------------------

cout << "nEscoja el intervalo adecuado" << endl;
cout << "na = ";
cin >> a;

cout << "b = ";
cin >> b;

double xr;

if (f(a) * f(b) > 0) {
cout << "n No se puede aplicar el metodo de la biseccionn";
cout << "porque f(" << a << " y f(" << b << " tienen el mismo signo" << endl;

} else {
cout << "Tolerancia = ";
cin >> tolerancia;

cout << "natbtxtf(a)tf(b)ttf(x)n" << endl;
do {

xr = (a + b) / 2.0;
cout << a << "t" << b << "t" << xr << "t" << f(a) << "t" << f(b) << "t" << f(xr) << endl;

if (fabs(f(xr)) <= tolerancia) {
cout << "nnPara una tolerancia de " << tolerancia << " la raiz de f es: " << xr << endl;
break;

} else {
if (f(xr) * f(a) > 0) {
a = xr;
} else if (f(xr) * f(b) > 0) {
b = xr;
}
}

} while (1);
}

cin.get();
cin.get();
return 0;
}

#define INTERVALOS 10
void tabula(double a, double b)
{
int puntos = INTERVALOS + 1;

double ancho = (b - a) / INTERVALOS;

cout << "ntxtf(x) " << endl;
for (int i = 0; i < puntos; i++) {
cout << "t" << a << "t" << f(a) << endl;
a = a + ancho;
}
}

double f(double x)
{
return pow(x,2) - 1;
}


Ese es todo el codigo, espero y le ayude, comenten y dejen unos cuantos puntos jaa, EXITO

3 comentarios - Método de la biseccion en C++ (métodos numéricos)

rola342
+10 y a favoritos

se que algun dia esto me servira
Amsavs_Rad
+10, nunca me gustó programación, pero cuando conocí los PIC's me enamoré de ella aunque es algo difícil
campillo-pillo +1
la programacion de pic's es parecida siempre y cuando se programe en C ya que esos mismo se pueden programar en ensamblador, en una semana subire programas para el pic 18F4550