Ir al contenido principal

Metodo de Newton-Raphson

Método de Newton-Raphson

Para la aplicación del método de Newton-Raphson es necesario comprender que es el método de punto fijo pero con formulazo jeje, en pocas palabras en vez de tener que desarrollar una formula auto-convergente ya se tiene una formula auto-convergente la cual es:


Bueno conociendo esto empecemos con el diseño del programa
Para el diseño solo agrege 5 textbox con 1 button mas 2 paneles de los cuales uno tiene un panel dentro para un link. 


Despues en el codigo vamos a ocupar un operador de una biblioteca, pero antes debemos importarala por lo que nos vamos al proyecto, le damos click derecho, de ahi nos vamos a agregar, de ahi a referencias...


Seguido palomeamos
Microsoft.JScript


Después de haberle agregado la biblioteca vamos a importar esta biblioteca a nuestro código para poder acceder de forma mas sencilla a sus instrucciones.


Despues vamos a declarar unas cuantas variables
las cuales son:

La variable para el solucionador de Java
Dim engine As VsaEngine = VsaEngine.CreateEngine()

La variable que contiene el texto de los textbox Fx y textbox Fpx
Dim Fx, Fpx As String

Las variables para el texto de transición para solucionar las Ecuaciones
Dim Fxtrans, Fpxtrans As object

Las variables que tendrán el valor de la evaluación de F(x) y F'(x)
Dim Fxval, Fpxval As Object

Y las variables para Xn y Xn+1 
Dim Xi, Xp As Object


De Ahi colocamos un Try-Catch que tendra todo el codigo, entendiendo que el operador de Java retorna error cuando no puede solcuionar la ecuacion porque hay incognitas no definidas, osea que solo resuelve ecuaciones aritmeticas y si el usuario introduce variables de mas Java regresara error

De ahi colocamos una serie de If´s Para comprobar que ningun textbox este vacio
(textboxValorBuscado, textboxFx, textboxFpx, TextboxXinicial)


De ahi vamos a asignarle un valor a Xi, y seguido vamos a realizar un texto especial para F(x) ya que si el usuario desea encontrar un valor especifico se halla del otro lado de la ecuación y lo necesitamos del otro lado de la ecuación

F(x) + VB = "Ecuación"
F(x) = "Ecuación" - VB

por lo que para generar ese texto usaremos el siguiente codigo

Fx = String.Format("{0}-{1}", TXTFx.text , TXTVB.Text)
Fpx = TXTFpx.Text

Donde {} acopla el valor que se halla después del coma

Y ahora si empezamos a realizar el método de Newton-Raphson

Para ello tendremos una Xposterior (Xp) que generara la transición de n+1 a n en cada siclo pero inicialmente tenemos que definiría como si fuese Xinicial por ello antes del ciclo colocamos 

Xp = Xi

De Ahi ya entramos en el Ciclo Do-LoopWhile

Después vamos a generar un texto de transición que tendrá el texto de la Ecuación pero sustituyendo"X" por "Xi")

Fxtrans = Fx.Replace("x", Xi)
Fpxtrans = Fpx.Replace("x", Xi)

Despues generaremos el valor del F(xi) y F'(xi)

Fxval = Eval.JScriptEvaluate(Fxtrans, engine)
Fpxval = Eval.JScriptEvaluate(Fpxtrans, engine)

Después encontraremos Xposterior (Xn) con la funcion mensionada al inicio

Xp = Xi - (Fxval / Fpxval)

De ahi tendremos el While que deside si se repite todo el ciclo

Para ello tenemos que saber que el error absoluto es la resta de "Xp - Xi" entonces cuando los dos valores sean muy cercamos osea que tiendan a 0 significa que ya el error es muy pequeño por ello en base a eso desarrollaremos nuestra condición para decidir si se repite o no el ciclo 

Loop While Math.Abs(Xp - Xi) > 0.0000001


A continuación en la imagen se vera el final del Try-Catch donde aparece el Catch con su respectivo mensaje sobre porque hallo un error

y seguido veremos una instrucción sobre si se le da click derecho a un panel que tiene una imagen del link. el porque coloque este link es para decirle al usuario como se escriben los operadores matemáticos( potencia, trigonométricas, logarítmicas, etc...) ya que para el solucionador de Java lo que hace es leer el texto como si fuese código y soluciona las operaciones pero los operadores matemáticos se basan en el código de la biblioteca System.Math entonces anexe el link para poder ver todos los comandos de System.Math


Bueno con ello terminamos el programa pero antes se realiza una demotración con el copilador de Visual Studio para corroborar que si este funcionando de forma correcta

Entonces lo Copilamos:


Le Asignamos la funcion:

x^2-175

pero como java no lee ^ tendremos que aplicar el comando correspondiente de System.Math que si nos vamos a la pagina dice que la potencia se escribe de la siguiente manera

Math.pow("Base", "Potencia")

por lo que la función escrita quedara de la forma 

Math.pow(x,2)-175

y su respectiva derivada que seria:

2*x

de queremos hallar el valor 0 de la ecuacion

y colocamos que Xinicial es 1


Y ahora si le pinchamos al botton para que nos diga para que valor de x F(x) se aproxima al valor buscado

y hacemos su respectiva comprobación con la calculadora


y pues listo ya comprobamos que el programa funciona

Espero les halla servido y gracias por leer

Comentarios

Entradas populares de este blog

Metodo de Gauss - Seidel

Método de Gauss - Seidel Bueno el método de Gauss-Seidel consiste en solucionar un sistema de ecuaciones a través de una formulas de varias variables auto convergentes, osea que tendremos varias incógnitas y una función que le corresponde a cada incógnita para converger el resultado Siendo: j es diferente de i  Xi como una función de (X0,X1,...,Xn) Cj = Constante que acompaña a cada X de la Ecuación (i) bi = Resultado de la Ecuación (i) Entonces si resolvemos la sumatoria nos queda: y sustituyendo en nuestra primera ecuación nos queda: Dato IMPORTANTE:  Este método solo se le puede aplicar a Sistemas de Ecuaciones cuya Matriz de Coeficientes es Dominante, para enterarme mas sobre que es una matriz dominante los invito a leer el articulo de Wikipedia https://es.wikipedia.org/wiki/Matriz_de_diagonal_estrictamente_dominante Bueno conociendo lo anterior empezamos a programar Para el Diseño del programa utilice 2 DataGridView que contendrá