El método de Newton (conocido también como el método de Newton-Raphson o el método de Newton-Fourier) es un algoritmo basado en la derivada que permite encontrar aproximaciones de los ceros o raíces de una función real derivable, o inclusive aproximar valores como \(\sqrt{3}\), \(\sqrt[4]{3}\), \(\sqrt[5]{247}\), \(\pi\) encontrando de manera aproximada las raíces de las ecuaciones \(x^2-3=0\), \(x^4-3=0\), \(x^5-247=0\), \(cos(x)+1=0\) respectivamente.
Sea \(f\) una función derivable definida en un intervalo real \([a,b]\) y sea \(f(r)=0\), es decir, sea \(r\) una raiz real de \(f\). Si \(x_n\) es una aproximación a \(r\), entonces la siguiente aproximación \(x_{n+1}\) esta dada por:
\[x_{n+1} = x_n-\frac{f(x_n)}{f'(x_n)}, \quad f'(x_n)\neq0\]
Aunque existen fórmulas para hallar las raíces de ecuaciones de tercer y cuarto grado, dichas formulas son muy complicadas y nada prácticas.
A esto se le suma el Teorema de Abel-Ruffini, el cual enuncia que no es posible escontrar soluciones de la ecuación general \[ a_nx^n + a_{n-1}x^{n-1} +\dots+ a_{1}x + a_0 = 0 \] de grado superior o igual a cinco, aplicando únicamente un número finito de sumas, restas, multiplicaciones, divisiones y extracción de raíces a los coeficientes de la ecuación. Esto significa que, en general, sólo se pueden hallar aproximaciones para los ceros de funciones de grado mayor que cuatro aplicando métodos numéricos.
Sea \(f: [a,b] \rightarrow \mathbb{R}\) una función derivable
Se elige \(x_0\) en el eje de las x, asumiendo que está cerca de la solución de \(f(x)=0\) (raíz buscada).
Calculamos la ecuación punto pendiente de la recta tangente a la función en \((x_0, f(x_0))\), a saber \(y-f(x_0) = f'(x_0)(x-x_0)\) \((1)\) .
Esta recta debe intersecar al eje de las x, en un punto más cercano a la raíz buscada; en el punto \((x_1,0)\).
El punto \((x_1,0)\) satisface la ecuación \((1)\) y sustituyendo, queda: \[0-f(x_0) = f'(x_0)(x-x_0)\quad(2)\]
Si \(f'(x_0) \neq 0\), entonces despejando \(x_1\) en \((2)\) se obtiene \[x_1 = x_0-\frac{f(x_0)}{f'(x_0)}\].
Repetimos el procedimiento anterior para \(x_0\), pero ahora comenzando con \(x_1\), en cuyo caso se obtiene \(x_2 = x_1-\frac{f(x_1)}{f'(x_1)}\). De forma que \(x_2\) está más cerca de la raíz buscada que \(x_1\).
Iterando cada vez con el número obtenido, se construye una secuencia: \(x_0, x_1, x-2,\dots, x_n,\dots\) de números cada vez más próximos a la raíz, tales que:
\[x_{n+1} = x_n-\frac{f(x_n)}{f'(x_n)} \quad(3)\] En resumen y de forma menos teórica el procedimiento es el siguiente:
Observando la gráfica de la función se estima un valor adecado para la primera aproximación \(x_1\).
Sustituyendo la primera aproximación en (3), se obtiene una segunda aproximación \(x_2\). Luego se calcula \(x_3\) sustituyendo en (3) la segunda aproximación \(x_2\); y así sucesivamente hasta que se llegue a la igualdad \(x_{n+1} =x_n\)
Veamos cual es la apróximación para el \(x^3-4x^4-2\) por el método de Newton.
Solución:
Sea \(f(x) = x^3-4x^2-2\), luego \(f'(x) = 3x^2-8x\).
Fijandose en la gráfica se decide que el punto inicial \(x_0\) sea 4.
Luego, el método nos dice que
Primera iteración
\[ x_1 = x_0-\frac{x_0^3-4x_0^2-2}{3x_0^2-8x_0} = 4-\frac{(4)^3-4(4)^2-2}{3(4)^2-8(4)} = 4 - \frac{2}{16} = 4.125\] Segunda iteración
\[ x_2 = x_1-\frac{x_1^3-4x_1^2-2}{3x_1^2-8x_1} = 4.125 -\frac{(4.125)^3-4(4.125)^2-2}{3(4.125)^2-8(4.125)} = 4.125 - \frac{0.1279}{18.0469} = 4.117965 \approx 4.118\]
Tercera iteración
\[ x_3 = x_2-\frac{x_2^3-4x_2^2-2}{3x_2^2-8x_2} = 4.118 -\frac{(4.118)^3-4(4.118)^2-2}{3(4.118)^2-8(4.118)} = 4.118 - \frac{0.001}{17.9298} = 4.1179\] Cuarta iteración
\[ x_4 = x_3-\frac{x_3^3-4x_3^2-2}{3x_3^2-8x_3} = 4.1179 -\frac{(4.1179)^3-4(4.1179)^2-2}{3(4.1179)^2-8(4.1179)} = 4.1179 - \frac{0.0008}{17.9281} = 4.1179\] Como \(x_4 = x_3\) se dice entonces que se encontró la raíz, es decir 4.1179.
El código para el ejemplo anterior sería.
expresion <- expression (x^3 - 4*x^2 -2) # escribimos el polinomio
derivada <- D(expresion, "x") # Derivada del polinomio
x <- 0 # Cualquier valor diferente de aprox
aprox <- 4 # valor puntoinicial
while ( x != aprox) {
x <- aprox # Se le asigna el valor aproximado a x.
reemplazoexpresion <- eval(expresion) #Reemplaza el valor de x en "expresión"
reemplazoderiv <- eval(derivada) #Reemplaza el valor de x en "derivada"
#newton
aprox <- x - (reemplazoexpresion/reemplazoderiv) #Ecuación método de Newton
print(x)
}
## [1] 4
## [1] 4.125
## [1] 4.117965
## [1] 4.117942
## [1] 4.117942
## Grafica
expresiong <- function(x)(x^3 - 4*x^2 -2)
curve(expresiong,-1,5,101, ylim = c(-12,4))
abline(0,0,col="green")