Está en la página 1de 10

MTODOS NUMRICOS EDO: MTODO DE RUNGE-KUTTA

TEMA: ECUACIONES DIFERENCIALES ORDINARIAS MEDIANTE EL MTODO DE RUNGE-KUTTA. Implementaremos el algoritmo del mtodo de Runge-Kutta de cuarto orden desarrollado en clase, adems construiremos la grfica resultante de los puntos ( xi , wi ) encontrados con el programa. El problema a solucionar tiene la forma:

TEOREMA (Existencia y unicidad de la solucin). Sean

ALGORITMO BASE: El algoritmo de Runge-Kutta de cuarto orden es la siguiente: Entrada: a, b, alfa, n h=(b-a)/n w=alfa x=a Para i=1,,n hacer k1=h*f(x,w) k2=h*f(x+h/2,w+k1/2) k3=h*f(x+h/2,w+k2/2) k4=h*f(x+h,w+k3) w=w+(k1+2*k2+2*k3+k4)/6 Salida: i, x, w fin

EJEMPLO DE COMPROBACIN: El Ejemplo a desarrollar ser: y=y x2 + 1 y(0) = 0.5 ; 0x2

ALUMNO: HELMER ELEAZAR PALMA HUAMN CDIGO: 91.0229.2.AC

MTODOS NUMRICOS EDO: MTODO DE RUNGE-KUTTA

La solucin es:

Mtodos Numricos, Richard L. Burden J. Douglas Faires.

IMPLEMENTACIN EN EL LENGUAJE JAVA (PRIMARA PROGRAMACIN): La implementacin en el programa JAVA es de la siguiente manera: 1. El cuerpo principal del programa tiene la siguiente forma:

2. Separamos el algoritmo en dos funciones para tener el mejor control del programa: a. El programa principal main() es como sigue:

ALUMNO: HELMER ELEAZAR PALMA HUAMN CDIGO: 91.0229.2.AC

MTODOS NUMRICOS EDO: MTODO DE RUNGE-KUTTA

b. La funcin fun() y la funcin runge_kutta_4() son:

El reporte de resultados:

PROGRAMA REDISEADO EN JAVA (SEGUNDA PROGRAMACIN): Para la implementacin de ploteo de los puntos ( xi , wi ) obtenidos con el algoritmo de Runge-Kutta, necesitaremos hacer referencia a las libreras internas de la programacin orientada a objetos del JAVA y visualizar de modo diferente la programacin. Usaremos el mismo algoritmo de clculo, y ms an, usaremos el segundo algoritmo desarrollado en clases en la que las variables x y w ya no son estticas, sino vectores. Haremos el desarrollo vectorial porque necesitamos crear una especie de contenedor para usar los datos calculados en el momento que lo requiramos.

ALUMNO: HELMER ELEAZAR PALMA HUAMN CDIGO: 91.0229.2.AC

MTODOS NUMRICOS EDO: MTODO DE RUNGE-KUTTA

Para desarrollar este tipo de programas y tenerla sistematizada de tal forma que podamos implementar ms algoritmos de clculo en el futuro, necesitamos crear cuatro clases que son:

1. La Clase Dif_ordinarias: es el programa principal que maneja al main, de aqu llamaremos a las dems clases para ejecutarlas.

Aqu hemos establecido tres partes que ejecuta el programa principal main en el orden siguiente: La primera crea un objeto de tipo rungekutta4 definida en la clase del mismo nombre donde tenemos la funcin setalgoritmo() que ejecuta el algoritmo de Runge-Kutta de cuarto orden. Luego llamamos a la funcin setalgoritmo() en rk4. setalgoritmo(); en la tercera, cuarta y quinta lnea obtenemos los valores de las variables pblicas n (de tipo int), w (vector de tipo double) y x (vector de tipo double) guardndolos en las variables locales nn (de tipo int), ww (vector de tipo double) y xx (vector de tipo double) respectivamente.

ALUMNO: HELMER ELEAZAR PALMA HUAMN CDIGO: 91.0229.2.AC

MTODOS NUMRICOS EDO: MTODO DE RUNGE-KUTTA

La segunda imprimimos los vectores obtenidos ( xxi , wwi ) con tamao nn, la impresin ser de la misma forma que en la primera programacin. La tercera crea un objeto de tipo ventana definida en la clase del mismo nombre, en el cual dibujaremos el ploteo de los puntos. Luego imprimimos una lnea de texto que nos dice que al cerrar esta ventana terminaremos la ejecucin del programa. 2. La Clase ventana: es el programa que crea una ventana de dilogo de caractersticas que deseemos; esta clase hereda las propiedades de la superclase JFrame para poder crear una ventana de dilogo.

Aqu hemos establecido cuatro partes que ejecuta el programa ventana en el orden siguiente: Primero definimos el objeto de nombre ventana en public ventana (); luego declaramos las variables globales ancho (de tipo int) y alto (de tipo int) que usaremos para controlar el tamao de la ventana que vayamos a crear. Segundo definimos las propiedades de la ventana de dilogo as: el nombre de la ventana en la superclase super(), el tamao de la ventana en setSize(ancho, alto) y en EXIT_ON_CLOSE la posibilidad de controlar su finalizacin. Tercero creamos el objeto de tipo panel definida en la clase del mismo nombre, en el cual haremos los dibujos; agregamos el objeto en la ventana de dilogo con add(lienzo). Cuarto mostramos la ventana creada en setVisible(true). 3. La Clase panel: es el programa que crea un panel en la ventana de dilogo en la que podremos dibujar lneas, puntos, crculos, rectngulos, etc. de diferentes propiedades como el color; para eso heredamos las propiedades de la superclase JPanel y la librera Graphics.
ALUMNO: HELMER ELEAZAR PALMA HUAMN CDIGO: 91.0229.2.AC

MTODOS NUMRICOS EDO: MTODO DE RUNGE-KUTTA

Este programa es el ms extenso, contiene el desarrollo y la creacin de los ejes, ploteo de puntos y unin de estos puntos mediante lneas, colocando los colores para cada caracterstica y ubicacin de los textos para discriminar los ejes. El hecho consiste en que la ventana grfica del panel se dibuja de izquierda a derecha y de arriba hacia abajo, mientras que los ejes naturales se dibujan de izquierda a derecha y de abajo hacia arriba. Este inconveniente hace que tengamos que crear ms cdigo para plotear los puntos de un modo adecuado. Definimos el constructor del objeto panel en public panel (); luego declaramos las variables globales como se ve en la imagen, as controlaremos el tamao del panel y otras caractersticas que deseemos.

Asignamos el tamao definido en setSize(ancho, alto). Creamos una funcin paintComponent de enlace con JPanel y el objeto Graphics en paintComponent(Graphics, g), aqu haremos el cdigo que nos construir el entorno para el grfico deseado.

La superclase super.paintComponent() nos permitir llamar a todas las clases heredadas para graficar. Al igual que en la clase Dif_ordinarias, crea un objeto de tipo rungekutta4 definida en la clase del mismo nombre donde tenemos la funcin setalgoritmo() que ejecuta el algoritmo de Runge-Kutta de cuarto orden. Luego llamamos a la funcin setalgoritmo() en rk4. setalgoritmo(); en la tercera, cuarta y quinta lnea obtenemos los valores de las variables pblicas n (de tipo int), w (vector de tipo double) y x (vector de tipo double) guardndolos en
ALUMNO: HELMER ELEAZAR PALMA HUAMN CDIGO: 91.0229.2.AC

MTODOS NUMRICOS EDO: MTODO DE RUNGE-KUTTA

las variables locales nn (de tipo int), ww (vector de tipo double) y xx (vector de tipo double) respectivamente.

Las dos primeras lneas corresponden a funciones de la librera NumberFormart para dar formato a los nmeros con coma flotante como el double, luego la forma de llamar a las funciones ser como por ejemplo:

Esta lnea nos devuelve la cadena de un nmero double con cuatro cifras significativas. Obtenido los valores que deseamos de la clase rungekutta4, procedemos hacer el cdigo necesario para dibujar los puntos encontrados. No nos dedicaremos al anlisis de los grficos por su extensin.

C O D I G O

ALUMNO: HELMER ELEAZAR PALMA HUAMN CDIGO: 91.0229.2.AC

MTODOS NUMRICOS EDO: MTODO DE RUNGE-KUTTA

4. La Clase rungekutta4: es el programa que define el algoritmo en cuestin, podemos decir que es el ms importante de todos, porque solo este ya soluciona el mtodo de RungeKutta para el clculo de las EDO de la forma definida. Al igual que el primer programa hemos traducido el algoritmo desarrollado en clases al pie de la letra, la diferencia es que para usar los datos calculados en la clase Dif_ordinarias y panel, necesitamos contenerlos en un vector para xi y otro vector para wi llamados de la siguiente manera:

El algoritmo reconfigurado para exportar sus datos (variables) a otras clases (Dif_ordinarias y panel) es la siguiente:

Primeramente hemos declarado como variables globales a n (de tipo int),h (de tipo double), w (vector de tipo double) y x (vector de tipo double), lo cual hacemos con la finalidad de luego poder exportar estos datos.

ALUMNO: HELMER ELEAZAR PALMA HUAMN CDIGO: 91.0229.2.AC

MTODOS NUMRICOS EDO: MTODO DE RUNGE-KUTTA

Segundo, implementamos el algoritmo tal y cual fue desarrollado en clases, siendo las nicas diferencias lo dicho anteriormente. Y tercero para exportar las variables deseadas hacemos:

As podremos llamar de la clase Dif_ordinarias y la clase panel a las variables asignadas n, h, x & w. El reporte de los resultados:

ALUMNO: HELMER ELEAZAR PALMA HUAMN CDIGO: 91.0229.2.AC

MTODOS NUMRICOS EDO: MTODO DE RUNGE-KUTTA

CONCLUSIONES: La primera implementacin que hemos realizado (primer programa) cumple con los objetivos deseados, pues es la traduccin fiel del algoritmo de Runge-Kutta, muestra los valores ( xi , wi ) en una tabla sin necesidad de hacer cdigo adicional, y los resultados son los esperados. En el segundo programa, debemos tener en cuenta que tanto la clase Dif_ordinarias y la clase panel, llaman a las funciones de la clase rungekutta4; la primera para mostrar los resultados en un cuadro de datos, y la otra para mostrar los resultados grficamente en el eje x vs w. En realidad, la programacin del ploteo de puntos es sencillo, ya que no sugiere ningn algoritmo complejo para hacerlo, es solamente dibujar un punto en coordenadas (x,y) en el panel generado para tal fin; para esto hemos necesitado colocar los puntos ( xi , wi ) en dos vectores para usarlos en el momento necesario. La segunda programacin pudiera parecer complicada y engorrosa, pero es una de las formas de desarrollar una POO con el lenguaje de programacin JAVA. Hemos desarrollado el programa escribiendo el cdigo sin hacer uso del instructor del NetBeans, y cumplimos con el objetivo de plotear el resultado que se obtiene del algoritmo de Runge-Kutta de cuarto orden.

ALUMNO: HELMER ELEAZAR PALMA HUAMN CDIGO: 91.0229.2.AC