Ir al contenido principal

Método de Bisección

Método de Bisección

El Método de Bisección consiste en encontrar dos puntos de la ecuación "a" , "b" donde al evaluar F(a) y F(b) tendremos que los valores encontrados son de signos diferentes, por lo que entonces se puede proceder con el método, de ahí se encuentra el promedio de "a" y "b" y obtendremos el valor "c", si "c" de evalúa F(c) y entonces encontraremos un valor el cual puede ser positivo o negativo y con respecto a ello si es que el valor de F(c) no paso por 0 entonces ese valor se le reasigna a "a" o "b" y se repite la evaluación de el nuevo F(c) hasta que F(c) sea lo mas cercano a 0.


Conociendo lo anterior empecemos con el programa

Primero el Diseño con el cual hice uso de 5 textbox ( 4 para la asignacion de datos y 1 para imprimir el resultado ), 1 botton encargado de realizar todas las operaciones y 3 paneles de los cuales 1 esta integrado a otro con sus respectivos labels para explicarle al usuario como se utiliza el programa.


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.

Seguido también empezamos a definir unas cuantas variables globales

La variable que porta el operador de Java para solucionar una ecuación aritmética

Dim engine As VsaEngine = VsaEngine.CreateEngine()

Las variables que tendran el texto de los texboxFx

Dim Fx As String

Las variables para generar un texto de transicion donde se sustituyen las "x" por "xi" y "xp"

Dim Fxtrans, Fpxtrans As Object

Las variables que tendran el resultado de las Ecuaciones F(xi) , F(xp) o F(xprom)

Dim Fxval, Fpxval as Object

Y las varibales con las cuales se va a ev aluar F(x)

Dim Xi, Xp, Xprom As Double


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, textboxXposterior, TextboxXinicial)


De ahí realizaremos un par de operaciones antes de Realizar el Método de Biseccion

Primero Tenemos que comprobar que F(xi) y F(xp) son de signos diferentes para poder realizar el método, por ello es que le asignamos valores a Xi y Xp

Xi = Val(TXTXi.Text)
Xp = Val(TXTXp.Text)

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)

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

Y Ahora si empezamos a comprobar si son del mismo signo

Para ello tenemos que generar el texto para la ecuacion F(x) donde sustituyamos el caracter "x" por el valor Xi y otro para el valor de Xp

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

Despues obtendremos los valores correspontiendes del resultado de la ecuacion y luego las pasaremos a un formato mas practico como lo es Double

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


Ya que comprobamos que Son de signo diferente ya podemos empezar a Realizar el método de biseccion

Pero antes de poder realizar el ciclo necesitamos saber si "a" es positivo o negativo para de ahi basarnos en el remplazo de valores con "c"





Para el primer caso tenemos que "a" es positivo

If Math.Sign(Fxval) > 0 Then

y entonces entramos en el Ciclo

Primero sacaremos cuando vale "c"(Xprom)

Xprom = (Xi + Xp) / 2

Generamos el texto de transicion para evaluar F(c)

Fxtrans = Fx.Replace("x", Xprom)

Generamos el valor de F(c)

Fxval = Eval.JScriptEvaluate(Fxtrans, engine)

Entonces empieza una serie de If-ElseIf donde con respecto a F(c) si es positivo "a" se convertira en "c" y si es negativo "b" se convertira en "c"

If Math.Sign(Fxval) > 0 Then
Xi = Xprom
ElseIf Math.Sign(Fxval) < 0 Then
Xp = Xprom
End If

Y por ultimo el While que decide si se repite el codigo para ello tenemos que basarnos en que F(c) tiene que tender a 0 entonces mientras mas cerca del 0 este menor es nuestor error por lo que podemos afirmar a "c" como el valor buscado por lo que la condicion queda de la siguiente forma

Loop While Math.Abs(Fxval) > 0.0000001

Y Termina el Ciclo





Para el Caso 2 tenemos que a es negativo

ElseIf Math.Sign(Fxval) < 0 Then

y entonces entramos al ciclo

Primero sacaremos cuando vale "c"(Xprom)

Xprom = (Xi + Xp) / 2

Generamos el texto de transicion para evaluar F(c)

Fxtrans = Fx.Replace("x", Xprom)

Generamos el valor de F(c)

Fxval = Eval.JScriptEvaluate(Fxtrans, engine)

Entonces empieza una serie de If-ElseIf donde con respecto a F(c) si es negativo "a" se convertirá en "c" y si es positivo "b" se convertirá en "c"

If Math.Sign(Fxval) < 0 Then
Xi = Xprom
ElseIf Math.Sign(Fxval) > 0 Then
Xp = Xprom
End If

Y por ultimo el While que decide si se repite el codigo para ello tenemos que basarnos en que F(c) tiene que tender a 0 entonces mientras mas cerca del 0 este menor es nuestor error por lo que podemos afirmar a "c" como el valor buscado por lo que la condicion queda de la siguiente forma

Loop While Math.Abs(Fxval) > 0.0000001

Y Termina el Ciclo



Según halla sido el caso 1 o 2 al final imprimimos el Resultado 

TXTResultado.Text = Xprom


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 función:

x^2

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)

El valor que buscamos para que cuando evaluemos x nos de:

1500

colocamos que Xinicial es 1

ya que si sustituimos nos da que F(1) es menor de 1500 por lo que es negativo

y colocamos Xposterior como 100

Ya que F(100) nos da un valor mayor a 1500 por lo que es positivo

ya con eso nos cercioramos de que los extremos son de signos contrarios 


De ahí ya le damos Click al Botton para que Resuelva la ecuación con el método de Biseccion

Y le hacemos su respectiva comprobación con la calculador


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á

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 so