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
Publicar un comentario