Get Even More Visitors To Your Blog, Upgrade To A Business Listing >>

VBA: Método de Newton-Raphson en Excel

Un usuario planteaba dudas por cómo emplear en Excel el método de Newton-Raphson (ver Wikipedia) para resolver ecuaciones y encontrar su raíz.

Si trasladamos esos algoritmos de cálculo a nuestras macros, en modo de función, tendríamos las UDF que veremos a continuación...
El algoritmo se basa, de acuerdo a lo que se indica en Wikipedia, a un método recurrente geométrico... desarrollado a partir de otro método de cálculo (método de la secante).
Seguro que algún experto matemático podrá aportar mucho más al respecto.


En mi ejemplo, operaremos para obtener la raíz de la siguiente ecuación:
f(x)=LOG(x-1)-COS(x-1)

Nota: la función de VBA LOG equivale al logaritmo neperiano (o natural) en base e (2,718281828459)

y sabiendo que su función derivada es:
f'(x)=1/(x-1)-SIN(x-1)




En un módulo estándar del libro incluimos las siguientes UDF:

Function func(x) As Double
'Nuestra función a analizar
func = Math.Log(x - 1) + Math.Cos(x - 1)

End Function
Function func_derivada(x) As Double
'la derivada de nuestra función
func_derivada = 1 / (x - 1) - Math.Sin(x - 1)

End Function
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Function NewtonRaphson(x_0 As Double, tolerancia As Double, iteracionMax As Long)
'1er argumeto x_0: el valor inicial desde donde parte el recorrido buscando la raíz/solución.
'2do argumento tolerancia: el margen de error buscado.
'3er argumento iteraciónMax: el límite de iteraciones máximo permitido buscando la raíz/solución
Dim x_n1 As Double, x_n As Double
Dim error_dif As Double

Dim contador As Integer
x_n = x_0
contador = 0
'iniciamos el bucle...
Do
'método Newton-Raphson
x_n1 = x_n - func(x_n) / func_derivada(x_n)
'paremetrizamos el error
error_dif = x_n1 - x_n
'y asignamos nuevo valor para el siguiente paso iterativo
x_n = x_n1
'incrementamos el contador para controlar una salida del bucle
contador = contador + 1
Loop Until Math.Abs(error_dif) 'hemos salido del bucle si la diferencia entre los elementos es menor de la tolerancia determinada
' o la iteración llega al máximo indicado(iteracionMax).

'finalmente damos valor a nuestra función
NewtonRaphson = x_n1
End Function
Podemos verificar nuestra solución si insertamos en la celda C22 la fórmula: =NewtonRaphson(C3;0,000001;100)

Una alternativa, mediante funciones sin programación, es hacerlo directamente sobre la hoja de cálculo, como se ve en la imagen anterior.

En la celda C3 disponemos el primer valor a tomar 1,01 para nuestro ejemplo, y en la celdas sucesivas C4:C18 añadimos:

=C3-D3/E3

que respondería al algoritmo del método de Newton...

En las columnas C y D añadiríamos la formulación de la función principal y la función derivada, respectivamente para los valores obtenidos en la columna B.

En otro post, describiré el proceso manual.

Por otra parte, si hacemos la comprobación gráfica de la raíz, vemos que efectivamente, cuando x=1,397748475 la función f(x)=LOG(x-1)-COS(x-1) se hace cero.



This post first appeared on EXCEL FORO: EJERCICIOS, EJEMPLOS, SOLUCIONES, DUDA, please read the originial post: here

Share the post

VBA: Método de Newton-Raphson en Excel

×

Subscribe to Excel Foro: Ejercicios, Ejemplos, Soluciones, Duda

Get updates delivered right to your inbox!

Thank you for your subscription

×