Hoy se va realizar un ejercicio completo (con todo y video-tutorial) el ejercicio incluye los temas que se han tratado en las últimas entradas del blog: ciclo for y TableItem. El ejercicio es tomado de un comentario de uno de mis lectores, justo en el post anterior a este.
Ejercicio: Método de Euler
El comentario del lector con el problema, lo reproduzco aquí tal y como él lo escribió:
“Hola estoy intentando crear una aplicación para que me resuelva el método Euler. Es más o menos así:
y1=y0+f(x0,y0)*h
Donde "h es una constante" te lo dan al igual que el valor inicial de "y0"; y "x0" varía dependiendo de h. Ahora el problema es que la función no es la misma y por ende necesito un texdfield donde ingrese la función y me lo lea.
Un ejemplo de este método es el siguiente para mayor comprensión:
Un ejemplo de este método es el siguiente para mayor comprensión:
f(x,y)=x^2+y donde y(0)=2 ,h=0.2, hallar y(1)
En este caso mi x0=0 siguiendo 5 pasos o iteraciones hasta llegar a 1. O sea x0=0, x1=0.2, x2=0.4, x3=0.6, x4=0.8, x5=1
Los pasos me lo indica h osea seria 1/0.2=5pasos.
si me dieran como dato: y(1)=2 ,h=0.5 hallar y(4) , serian 4/0.5=8 pasos. Donde x0=1,x1=1.5,.....x8=4
Retomando el primer ejemplo de 5 pasos.la secuencia seria lo siguiente:
y1=y0+h*f(x0,yo)
y1=2+0.2*(0^2+2)=2.4
y2=2.4+0.2*(0.2^2+2.4)=2.888
y3=2.888+0.2*(0.4^2+2.888)=3.4976
y4=3.4976+0.2*(0.8^2+3.4976)=4.32512
y5=4.32512+0.2*(1^2+4.32512)=5.390144
Como podrás ver la función cambia y no va hacer la misma en cada ejercicio, o sea necesito ingresar aparte de y0, h, x0, la función y que NetBeans me lea dicha función para que realice los cálculos. Espero tu ayuda…”
Ese es el ejercicio, no se para que sirve el método de Euler y realmente no me interesa saberlo y mucho menos investigarlo, yo simplemente voy a basarme en lo que dice mi lector bien o mal a mi no me importa yo voy a tomar su información y voy a realizar el programa a mí lo que me interesa realmente es que se muestre otro ejercicio con un ciclo for donde se usen las TableItem para mostrar los datos eso es lo que me importa.
Solución
Veamos la solución al ejercicio pero antes se le va a poner una restricción.
Restricción
El lector dice:
“necesito ingresar aparte de y0, h, x0, la función y que NetBeans me lea dicha función”
Lo que pide, es que en un TextField se coloque una función, pero cualquier función si me explico? O sea no es una función fija, es cualquier función que se ingrese, puede ser la que se muestra en el ejemplo: f(x,y)=x^2+y o puede ser otra como: f(x,y)=x^3+y^2 + 1 u otra la que el usuario decida ingresar.
Mmmm que creen, esto que se menciona, créanme, es un tema para uno o dos post completos se requiere el manejo de cadenas (string), hay que recorrer la cadena con un ciclo for para sacar caracter por caracter y analizar cada caracter ver si hay un "^" y cambiarlo a potencia, un montón de cosas que se deben hacer. Por lo pronto lamento no complacer a mi lector :( , así que como restricción al ejercicio vamos a tomar la función fija solamente y vamos a usar la que él nos da de ejemplo, la función:
f(x,y)=x^2+y
Análisis del problema
Como primer paso se va a crear la interfaz de usuario. Tomando en cuenta que dice el lector:
"h es una constante" te lo dan al igual que el valor inicial de "y0";
Además también hay que agregar a la interfaz de usuario el valor que se desea de y como se ve en el enunciado del problema. Tres instancias de TextField y una de la clase TableItem resuelven el problema, entonces esto es lo que se requiere:
• Un objeto TextField para el valor de inicial y(0).
• Un objeto TextField para el valor de h.
• Un objeto TextField para el valor de h.
• Un objeto TextField para el valor de y deseado.
• Un objeto TableItem para mostrar los resultados.
• Un objeto okCommand para realizar los cálculos necesarios.
La figura siguiente muestra como se veria parte de la interfaz de usuario para el problema:
el lector nos dice como obtener el número de iteraciones:
“…Los pasos me lo indica h osea seria 1/0.2=5pasos…”El número de iteraciones es el valor deseado de y dividiéndolo con el valor de h.
El lector dice
"x0" varía dependiendo de h…”
El lector manda estos ejemplos:
“…En este caso mi x0=0 siguiendo 5 pasos o iteraciones hasta llegar a 1. O sea x0=0,x1=0.2,x2=0.4,x3=0.6,x4=0.8,x5=1 “
Ahí se observa que x0 = 0, el otro ejemplo es:
..”si me dieran como dato: y(1)=2 ,h=0.5 hallar y(4) , serian 4/0.5=8 pasos. Donde x0=1,x1=1.5,.....x8=4”
Aquí creo que el lector se equivoca ya que: x0 = 1, x1 = 1.5, x2= 2, X3=2.5, x4=3, x5=3.5, x6=4… ¿por que dice que x8=4? Para que suceda así x0 debe ser igual a 0. Conclusión a la que llego x0 debe ser siempre igual a 0.
Código
En cuanto al código se debe como primer punto obtener los valores que se ingresan de los TextField, esto ya se ha realizado muchas veces, se requiere un par de instrucciones como estas:
strH = textField1.getString();
h = Float.parseFloat(strH);
Se declaran dos variables strH de tipo String y h de tipo float, se aplica el método Float.ParseFloat para cambir el String a número float, este par de sentencias se usa también para los otros TextField.
Para obtener el número de iteraciones basta con dividir el valor deseado de y con h como se mencionaba en la parte de arriba, así:
pasosF = y / h;
pasos = (int) pasosF;
se declara pasosF como float, esto debido a que el valor de y además del valor de h son de tipo float, luego en la siguiente instrucciones se obtiene el número de iteraciones, usando el (int) para convertir a entero el valor de tipo float y así poder usarlo en el ciclo for.
El ciclo queda así entonces:
for (int i=0; i<=pasos; i++) {
}
Antes del ciclo se inicializa x0 = 0; Dentro del ciclo se obtienen los nuevos valores de y aplicando la formula: f(x,y)=x^2+y, en java quedaría así:
y = y0 + h * (x0*x0 + y0) ;
Con el valor de y se actualiza para el siguiente cálculo (siguiente iteración) el valor de y0 y x0 de la siguiente forma:
y0 = y;
x0 = x0+h;
x0 = x0+h;
Después de van las instrucciones para mostrar los datos en la tabla, la primera es:
simpleTableModel.setValue(0, i, "y"+(i+1));
la cual muestra en la columna 0 de la tabla los valores de: y1, y2, y3, etc..la otra columna nos muestra los resultados de aplicar la formula:
simpleTableModel.setValue(1, i, ""+y);
Si alguien se perdió en la explicación anterior, aquí les dejo el video tutorial con la solución completa, para este ejemplo, ahí se puede ver el código completo.
El programa fue realizado con la versión de NetBeans 6.7.1, vea los resultados se ingresaron las mismas variables que el lector pero las iteraciones y4 además de la y5 dan como resultado diferente a lo que se muestra en el enunciado del problema esto, debido a que, en y4 debió evaluar con una x de 0.6 y puso 0.8.
Por si lo desean dando clic aquí, pueden “bajar” el código de Java Micro Edition, y analizarlo, el archivo esta comprimido en formato RAR, contiene todas las carpetas generadas por Netbeans, el programa fue probado en un teléfono Sony Ericsson w595 con resultados iguales a los del video.
"
ResponderEliminarPOR DOÑATE:
vea los resultados se ingresaron las mismas variables que el lector pero las iteraciones y4 además de la y5 dan como resultado diferente a lo que se muestra en el enunciado del problema esto, debido a que, en y4 debió evaluar con una x de 0.6 y puso 0.8. "
Si tienes toda la razón , es un error mio que lógicamente no me di cuenta :).
Te agradezco mucho tu ayuda , eres el mejor.
Voy a estar atento cuando llegues a esa parte de leer funciones.Voy a intentar hacerlo ya que me has dado unas ideas de como hacerlo.
ayuda necesito un ejemplo de una agenda y de como enviar mensajes realizar ejemplos
ResponderEliminarles dejo mi correo por si alguien me puede ayudar necesito ejemplos de realizar una agenda ,y realizar envio de mensajeria ......mi correo es kandosuriv@msn.com les agradeceria mucho gracias
ResponderEliminarMuy buenO el ejemplo, la verdad es k tengo una duda!! como podría hacer para agregar librerias externas... una libreria k evalue funciones y asi poder modificar la función!? e introducir cualquiera, veo k no aparece la carpeta librarie que siempre sale cuando se trabaja con el Jframe..
ResponderEliminarkisiera q me kites esa duda xf