**Método de Newton-Raphson Gilberto Rogel García A01630171**

**--Introducción y antecedentes (para qué sirve y qué resuelve) del método**

De las fórmulas para localizar raíces, la fórmula de Newton-Raphson es de las más ampliamente utilizadas. Si el valor inicial para la raíz es xi, entonces se puede trazar una tangente desde el punto [xi, f(xi)] de la curva. Por lo común, el punto donde esta tangente cruza al eje x representa una aproximación mejorada de la raíz.

**--En qué consiste el método**

El método de Newton-Raphson se deduce a partir de esta interpretación geométrica. Se tiene que la primera derivada en x es equivalente a la pendiente:

f’(xi)= ( f(xi) -0 ) / ( xi –(xi+1) )

que se arregla para obtener

xi+1= xi – ( f(xi) / f’(xi) )

**--Requisitos previos del método**

Una función y su derivada.

**--Diagrama de flujo**

**--Criterio de detención del método (error)**

El error debe ser proporcional al cuadrado del error anterior. En otras palabras, el número de cifras significativas de precisión aproximadamente se duplica en cada iteración.

**--Código fuente**

#include "stdafx.h"

#include<iostream>

#include<cmath>

#include<iomanip>

#include<Windows.h>

#define PRECISION 4

#define MAX_ITERACIONES 100

#define INTERVALOS 6

using namespace std;

void tabula(double a, double b, int intervalos);

double f(double x);

double f_derivada(double x);

void newton_raphson(double x0, double tolerancia, int max_interaciones);

int main()

{

double a;

double b;

double tolerancia;

double x0;

cout << setprecision(PRECISION);

cout << "\nEscoja el punto inicial adecuado: x0 = ";

cin >> x0;

cout << "Tolerancia = ";

cin >> tolerancia;

newton_raphson(x0, tolerancia, MAX_ITERACIONES);

cin.get();

cin.get();

return 0;

}

void tabula(double a, double b, int intervalos)

{

int puntos = intervalos + 1;

double ancho = (b - a) / intervalos;

cout << "\n\tx\t\tf(x) " << endl;

for (int i = 0; i < puntos; i++) {

cout << "\t" << a << "\t\t" << f(a) << endl;

a = a + ancho;

}

}

double f(double x)

{

return exp(x) - pow(x, 2) + (3 * x) - 2;

}

double f_derivada(double x)

{

return exp(x) - (2*x) + 3;

}

void newton_raphson(double x0, double tolerancia, int max_iteraciones)

{

double x1;

double error;

int iteracion;

bool converge = true;

cout << "\nAproximacion inicial:\n";

cout << "x0 = " << x0 << "\n"

<< "f(x0) = " << f(x0) << "\n"

<< "f'(x0) = " << f_derivada(x0) << endl;

iteracion = 1;

do {

if (iteracion > max_iteraciones) {

converge = false;

break;

}

else {

x1 = x0 - f(x0) / f_derivada(x0);

error = fabs(x1 - x0);

cout << "\a";

cout << "\n\nIteracion #" << iteracion << endl;

cout << "\nx" << iteracion << " = " << x1 << "\n"

<< "f(x" << iteracion << ") = " << f(x1) << "\n"

<< "f'(x" << iteracion << ") = " << f_derivada(x1) << "\n"

<< "error = " << error << endl;

if (error <= tolerancia) {

converge = true;

break;

}

else {

x0 = x1;

iteracion++;

}

}

} while (1);

cout << "\a";

if (converge) {

cout << "\n\nPara una tolerancia de " << tolerancia << " la RAIZ APROXIMADA de f es = " << x1 << endl;

}

else {

cout << "\n\nSe sobrepasó la máxima cantidad de iteraciones permitidas" << endl;

}

}

**--Pruebas y resultados con casos de éxito, casos de falla y casos frontera**

Cuando probamos el método de Newton-Raphson con la función f(x) = tan-1(x) - .3, el método diverge si no tomas un valor inicial cercano a la raíz, en la imagen por ejemplo tome el valor x = 3

Cuando tomas un valor cercano a la raíz, en este caso x = 1 , el método encuentra la raíz:

**--Conclusiones**

El método de Newton-Raphson algunas veces no converge, sino que oscila. Esto ocurre si no hay raíz real, si la raíz es un punto de inflexión o si el valor inicial esta muy alejado de la raíz buscada y alguna otra parte de la función “atrapa” la iteración.

Cuando el método de Newton-Raphson converge, se obtienen resultados en relativamente pocas interacciones, ya que para raíces no repetidas este método converge con orden 2 y el error E_{i+1} es proporcional al cuadrado del resultado anterior E_{i.}

Referencias:

http://

http://