-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathNewtonRapson.cpp
54 lines (45 loc) · 1.57 KB
/
NewtonRapson.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#include "NewtonRapson.h"
#include <cmath>
//Autor: Edgard Díaz
NewtonRapson::NewtonRapson(){}
NewtonRapson::~NewtonRapson(){}
// Funcion a evaluar, cambiar para otras aproximaciones
double NewtonRapson::funcion(double x)
{
return 2*sin(x)-x; // Retorna el resultados de la evaluacion de la funcion en un punto dado
//return x * exp(cos(x)) / 1.5 - 1;
}
//Funcion derivada, cambie deacuerdo a la derivada de la funcion que desea evaluar
double NewtonRapson::f_derivada(double x)
{
return 2*cos(x) - 1; //retorna el resultado de evaluar la funcion derivada en un punto dado
//return exp(cos(x)) * (1 - x * sin(x)) / 1.5;
}
//Logica del metodo Newton-Rapson
double NewtonRapson::calcula_raiz(double x0, float tolerancia, int Iteraciones)
{
iteracion = 1;
error = 0;
x1 = 0;
do
{
if(iteracion > Iteraciones) //criterio de paro si el metodo no converge de acuerdo al numero de iteraciones establecido
{
return 0;
}
else
{
x1 = x0 - (funcion(x0)/f_derivada(x0)); // Calculo de la siguiente aproximacion
error = fabs(x1 - x0); //Error, es la diferencia entre dos aproximaciones sucesivas, entremas pequeño es el error mas exacta es la raiz obtenida
if(error <= tolerancia) //Criterio de paro, cuando el error es menor a la tolerancia se ha llegado a una aproximacion muy cercana a la raiz real
{
return 1;
}
else //Si el cirterio de paro no se cumple incrementar el contador de iteraciones y asignar la nueva interacion a x0
{
x0 = x1;
iteracion ++;
}
}
}while(true);
}