Você está na página 1de 2

//MÉTODO DE SECANTE

#include<iostream>
#include<cmath>
using namespace std;
void secante(double, double, double, int); // prototipo de función
double f (double); // prototipo de función
int main()
{
int imax; // número máximo de iteraciones
double a, b; // extremos izquierdo y derecho del intervalo original
double epsilon; // criterio de convergencia
//ƒobtiene los datos de entrada
cout << "Introduzca los límites del intervalo de búsqueda original, a y
b : ";
cin >> a >> b;
cout << "Introduzca los criterios de convergencia : ";
cin >> epsilon;
cout << "Introduzca el número máximo de iteraciones permitidas : ";
cin >> imax;

secante(a, b, epsilon, imax);


return 0;
}
//Esta función implementa el método de la secante para encontrar
//una raiz de una funcion
void secante(double a, double b, double epsilon, int imax)
{

int i;//ƒcontador de iteraciones actuales


double x0, x1;//valores izquierdo y derecho de x del intervalo actual
double f0, f1;//función evaluada en estos puntos
double dx0;//delta x0
double dx1;//delta x1
//repeticion de los datos de entrada transmitidos
cout << "\nEl intervalo de búsqueda original es de " << a << " a " << b
<< "El criterio de convergencia es : intervalo < " << epsilon
<< "El número máximo de iteraciones permitido es " << imax <<
endl;
//determina la raiz
x0 = a;
f0 = f(x0);
dx0 = abs(b - a);
//iteraciones
for (i = 1; i <= imax; i++)
{
x1 = x0 + dx0;
f1 = f(x1);
if(abs(f1) < epsilon) // se encuentra la raiz
{
cout << "\nSe encontró una raiz en x = " << x1 + dx1 << endl
<< "en " << i << " iteraciones" << endl;
cout << "El valor de la funcion es" << f1 << endl;
system("pause"); //PERMITIR MOSTRAR EN PATALLA(DETENER)
return;

}
else // hace la siguiente iteracion
{
dx1 = (f1 / (f0 - f1))*dx0;
x0 = x1;
dx0 = dx1;
f0 = f1;
}

}
cout << "\nDespués de " << imax << " iteraciones, no se encontro ninguna raiz
"
<< "dentro del criterio de convergencia\n"
<< "La búsqueda de una raiz ha fallado debido a iteraciones
excesivas\n"
<< "después del número máximo de " << imax << " iteraciones" << endl;
return;
}
//funcion para evaluar f(x)
double f(double x)
{
const double PI = 2 * asin(1.0); // valor de pi
return(exp(-x) - sin (0.5 * PI * x));
system ("pause");
return 0;
}

Você também pode gostar