Post on 03-Jan-2016
UNIVERSIDAD DE EL SALVADOR
FACULTAD DE INGENIERÍA Y ARQUITECTURA
ESCUELA DE INGENIERÍA ELÉCTRICA
ANÁLISIS NUMÉRICOS
CICLO I-2013
Tema: Tarea final de Análisis Numérico Ciclo I - 2013
Catedrático:
Ing. Wilber Calderón
Alumnos:
Fuentes Chicas Héctor Mauricio FC11023
Vásquez López Néstor Gabriel VL10008
Herrera Ruiz Nilson Eduardo HR11046
Ciudad Universitaria, 26 de junio de 2013
2
INDICE
Contenido Pág.
Introducción…..…………………………………………………….......3
Objetivos…….…………………………………………………………4
Marco Teórico…....…………………………………………………….5
Descripción de los Métodos para Ecuaciones Diferenciales……...........9
Diseño de Interfaz Gráfica de Usuario…………………………………14
Conclusiones……………………………………………………………22
Bibliografía………………………………………………………..........23
3
INTRODUCCION
En nuestro vivir diario nos enfrentamos con la realización de tareas bastantes tediosas,
difíciles y muchas veces hasta casi interminables, en ocasiones fracasamos por nuestra falta
de concentración y dedicación, es por ello que se crearon e idearon algoritmos que nos
facilitan dichas tareas, como ejemplo tenemos: Las Tablas de Contabilidad, en ellas se
llevan a cabo diferentes tareas, sencillas pero tediosas, hoy en día se facilitan muchos de
esos cálculos gracias a algoritmos informáticos tales como las hojas de cálculo en Excel.
En nuestro caso como estudiantes de ingeniería se nos presentan labores tan sencillas pero a
la vez extensas, de ahí la importancia de conocer o familiarizarnos con métodos que nos
faciliten desde realizar una serie de sumas, hasta la resolución de ecuaciones diferenciales.
Es aquí donde nos concentraremos en analizar dichos métodos sin antes dar una antesala a
los “Métodos Numéricos para Ingenieros”.
Los cuáles serán nuestro centro de estudio, pero en especial para la resolución de
Ecuaciones Diferenciales Ordinarias.
En el reporte mostrado a continuación se presenta el desarrollo de una interfaz de usuario
desarrollada en lenguaje Python y funciones en Octave para aplicar los métodos numéricos
para resolver ecuaciones diferenciales utilizando los Métodos de Heun, Euler y Runge
Kutta de Orden 4 más adelante mostraremos en que consiste cada método para resolver las
ecuaciones diferenciales.
4
OBJETIVOS
Objetivo General:
“Profundizar en el estudio de los métodos numéricos para resolver ecuaciones
diferenciales y facilitar los cálculos matemáticos ah realizar”
Objetivos Específicos:
Aplicar los métodos numéricos para Resolver Ecuaciones Diferenciales.
Desarrollar y manejar funciones en lenguaje de programación tales como Octave
para los métodos numéricos planteados.
Desarrollar una interfaz de usuario para poder ejecutar las funciones numéricas y
poder facilitar el proceso de resolver ecuaciones diferenciales.
5
Métodos Numéricos
El análisis numérico o cálculo numérico es la rama de las matemáticas que se encarga de
diseñar algoritmos para, a través de números y reglas matemáticas simples, simular
procesos matemáticos más complejos aplicados a procesos del mundo real.
El análisis numérico cobra especial importancia con la llegada de los ordenadores. Los
ordenadores son útiles para cálculos matemáticos extremadamente complejos, pero en
última instancia operan con números binarios y operaciones matemáticas simples.
Desde este punto de vista, el análisis numérico proporcionará todo el andamiaje necesario
para llevar a cabo todos aquellos procedimientos matemáticos susceptibles de expresarse
algorítmicamente, basándose en algoritmos que permitan su simulación o cálculo en
procesos más sencillos empleando números.
Definido el error, junto con el error admisible, pasamos al concepto de estabilidad de los
algoritmos. Muchas de las operaciones matemáticas pueden llevarse adelante a través de la
generación de una serie de números que a su vez alimentan de nuevo el algoritmo. Esto
proporciona un poder de cálculo y refinamiento importantísimo a la máquina que a medida
que va completando un ciclo va llegando a la solución. El problema ocurre en determinar
hasta cuándo deberá continuar con el ciclo, o si nos estamos alejando de la solución del
problema.
Finalmente, otro concepto paralelo al análisis numérico es el de la representación, tanto de
los números como de otros conceptos matemáticos como los vectores, polinomios, etc. Por
ejemplo, para la representación en ordenadores de números reales, se emplea el concepto de
coma flotante que dista mucho del empleado por la matemática convencional.
En general, estos métodos se aplican cuando se necesita un valor numérico como solución a
un problema matemático, y los procedimientos "exactos" o "analíticos" (manipulaciones
algebraicas, teoría de ecuaciones diferenciales, métodos de integración, etc.) son incapaces
de dar una respuesta. Debido a ello, son procedimientos de uso frecuente por físicos e
ingenieros, y cuyo desarrollo se ha visto favorecido por la necesidad de éstos de obtener
soluciones, aunque la precisión no sea completa. Debe recordarse que la física
experimental, por ejemplo, nunca arroja valores exactos sino intervalos que engloban la
gran mayoría de resultados experimentales obtenidos, ya que no es habitual que dos
medidas del mismo fenómeno arrojen valores exactamente iguales.
Los problemas de esta disciplina se pueden dividir en dos grupos fundamentales:
• Problemas de dimensión finita: aquellos cuya respuesta son un conjunto finito de
números, como las ecuaciones algebraicas, los determinantes, los problemas de
valores propios, etc.
• Problemas de dimensión infinita: problemas en cuya solución o planteamiento
intervienen elementos descritos por una cantidad infinita de números, como
integración y derivación numéricas, cálculo de ecuaciones diferenciales,
interpolación, etc.
6
Asimismo, existe una subclasificación de estos dos grandes apartados en tres categorías de
problemas, atendiendo a su naturaleza o motivación para el empleo del cálculo numérico:
1) Problemas de tal complejidad que no poseen solución analítica.
2) Problemas en los cuales existe una solución analítica, pero ésta, por complejidad u
otros motivos, no puede explotarse de forma sencilla en la práctica.
3) Problemas para los cuales existen métodos sencillos pero que, para elementos que se
emplean en la práctica, requieren una cantidad de cálculos excesiva; mayor que la
necesaria para un método numérico.
El análisis numérico se divide en diferentes disciplinas de acuerdo con el
problema que resolver.
Cálculo de los valores de una función
Uno de los problemas más sencillos es la evaluación de una función en un punto dado. Para
polinomios, uno de los métodos más utilizados es el algoritmo de Horner, ya que reduce el
número de operaciones a realizar. En general, es importante estimar y controlar los errores
de redondeo que se producen por el uso de la aritmética de punto flotante.
La extrapolación es muy similar a la interpolación, excepto que ahora queremos encontrar
el valor de la función desconocida en un punto que no está comprendido entre los puntos
dados.
La regresión es también similar, pero tiene en cuenta que los datos son imprecisos. Dados
algunos puntos, y una medida del valor de la función en los mismos (con un error debido a
la medición), queremos determinar la función desconocida. El método de los mínimos
cuadrados es una forma popular de conseguirlo.
Resolución de ecuaciones y sistemas de ecuaciones
Otro problema fundamental es calcular la solución de una ecuación o sistema de ecuaciones
dado. Se distinguen dos casos dependiendo de si la ecuación o sistema de ecuaciones es o
no lineal.
Mucho esfuerzo se ha puesto en el desarrollo de métodos para la resolución de sistemas de
ecuaciones lineales. Métodos directos, i.e., métodos que utilizan alguna factorización de la
matriz son el método de eliminación de Gauss, la descomposición LU, la descomposición
de Cholesky para matrices simétricas (o hermíticas) definidas positivas, y la
descomposición QR. Métodos iterativos como el método de Jacobi, el método de Gauss-
Seidel, el método de las aproximaciones sucesivas y el método del gradiente conjugado se
utilizan frecuentemente para grandes sistemas.
En la resolución numérica de ecuaciones no lineales algunos de los métodos más conocidos
son los métodos de bisección, de la secante y de la falsa posición. Si la función es además
derivable y la derivada se conoce, el método de Newton es muy utilizado. Este método es
un método de iteración de punto fijo. La linealización es otra técnica para resolver
ecuaciones no lineales.
7
Las ecuaciones algebraicas polinomiales poseen una gran cantidad de métodos numéricos
para enumerar:
• Método de Gräeffe (o método de Lobachevsky o de Lobachevsky-Dandelin-Gräeffe
o del cuadrado de las raíces)
• Método de Laguerre
• Método de Bairstow (o método de Lin-Bairstow)
• Método de Bernoulli
• Método de Horner
• Método de Householder
• Método de Newton-Raphson especializado para polinomios
• Método de Richmond especializado para polinomios
• Método modificado de Richmond
• Método de Newton-Horner
• Método de Richomnd-Horner
• Método de Birge-Biète
• Método de Jenkins-Traub
Descomposición espectral y en valores singulares
Bastantes problemas importantes pueden ser expresados en términos de descomposición
espectral (el cálculo de los vectores y valores propios de una matriz) o de descomposición
en valores singulares. Por ejemplo, el análisis de componentes principales utiliza la
descomposición en vectores y valores propios.
Optimización
Los problemas de optimización buscan el punto para el cual una función dada alcanza su
máximo o mínimo. A menudo, el punto también satisface cierta restricción.
Ejemplos de ,problemas de optimización son la programación lineal en que tanto la función
objetivo como las restricciones son lineales. Un método famoso de programación lineal es
el método simplex.
El método de los multiplicadores de Lagrange puede usarse para reducir los problemas de
optimización con restricciones a problemas sin restricciones.
Evaluación de integrales
La integración numérica, también conocida como cuadratura numérica, busca calcular el
valor de una integral definida. Métodos populares utilizan alguna de las fórmulas de
Newton–Cotes (como la regla del rectángulo o la regla de Simpson) o de cuadratura
gaussiana. Estos métodos se basan en una estrategia de "divide y vencerás", dividiendo el
intervalo de integración en subintervalos y calculando la integral como la suma de las
integrales en cada subintervalo, pudiéndose mejorar posteriormente el valor de la integral
obtenido mediante el método de Romberg. Para el cálculo de integrales múltiples estos
métodos requieren demasiado esfuerzo computacional, siendo útil el método de Monte
Carlo.
8
Ecuaciones diferenciales
El análisis numérico también puede calcular soluciones aproximadas de ecuaciones
diferenciales, bien ecuaciones diferenciales ordinarias, bien ecuaciones en derivadas
parciales. Los métodos utilizados suelen basarse en discretizar la ecuación correspondiente.
Es útil ver la derivación numérica.
Para la resolución de ecuaciones diferenciales ordinarias los métodos más utilizados son el
método de Euler y los métodos de Rugen-Kutta.
Las ecuaciones en derivadas parciales se resuelven primero discretizando la ecuación,
llevándola a un subespacio de dimensión finita. Esto puede hacerse mediante un método de
los elementos finitos.
9
Ecuaciones Diferenciales Ahora nos centraremos en presentar los métodos utilizados en clases, los cuales son:
Método de Euler
Método de Heun
Método de Rugen Kutta
Método de Euler
La idea del método de Euler es muy sencilla y está basada en el significado geométrico de
la derivada de una función en un punto dado.
Supongamos que tuviéramos la curva solución de la ecuación diferencial y trazamos la
recta tangente a la curva en el punto dado por la condición inicial.
Debido a que la recta tangente aproxima a la curva en valores cercanos al punto de
tangencia, podemos tomar el valor de la recta tangente en el punto como una
aproximación al valor deseado .
Así, calculemos la ecuación de la recta tangente a la curva solución de la ecuación
diferencial dada en el punto . De los cursos de Geometría Analítica, sabemos que
la ecuación de la recta es:
Donde m es la pendiente. En este caso, sabemos que la pendiente de la recta tangente se
calcula con la derivada:
10
Por lo tanto, la ecuación de la recta tangente es :
Ahora bien, suponemos que es un punto cercano a , y por lo tanto estará dado
como . De esta forma, tenemos la siguiente aproximación:
De aquí, tenemos nuestra fórmula de aproximación:
Esta aproximación puede ser suficientemente buena, si el valor de h es realmente pequeño,
digamos de una décima ó menos. Pero si el valor de h es más grande, entonces podemos
cometer mucho error al aplicar dicha fórmula. Una forma de reducir el error y obtener de
hecho un método iterativo, es dividir la distancia en n partes iguales
(procurando que estas partes sean de longitud suficientemente pequeña) y obtener entonces
la aproximación en n pasos, aplicando la fórmula anterior n veces de un paso a otro, con
la nueva h igual a .
En una gráfica, tenemos lo siguiente:
Ahora bien, sabemos que:
Para obtener únicamente hay que pensar que ahora el papel de lo toma el
punto , y por lo tanto, si sustituímos los datos adecuadamente, obtendremos que:
De aquí se ve claramente que la fórmula recursiva general, está dada por:
Esta es la conocida fórmula de Euler que se usa para aproximar el valor
de aplicándola sucesivamente desde hasta en pasos de longitud h.
11
Método de Heun
Una fuente fundamental del error en el método de Euler es que la derivada al inicio del
intervalo supuestamente se aplica a todo el intervalo. Para mejorar la estimación de la
pendiente se involucra la determinación de dos derivadas para el intervalo( una en el punto
de inicio y otra en el punto final). Las dos derivadas se promedian con el fin de obtener una
estimación mejorada de la pendiente para todo el intervalo.
Recuerde que para el método de Euler, la pendiente al inicio de un intervalo
iii yxfy ,'
se utiliza para interpolar linealmente a yn+1
hyxfyy nnnn ,*
1
Esta sería la estimación de yn+1 en el caso del método de Euler estándar. Sin embargo, en el
método de Euler modificado( o método de Heun), la *
1ny , calculada anteriormente no es la
repuesta final, sino una predicción intermedia. Es por esto que se la distingue con un
asterisco como superíndice. A la ecuación hyxfyy nnnn ,*
1 , se le denomina
ecuación predictor. Ahora, con *
1ny y xn+1=xn+h, se estima la pendiente al final del
intervalo ( xn, xn+1), como
*
11
'
1 , nnn yxfy
Así las dos pendientes se pueden combinar para obtener la pendiente promedio en el
intervalo.
2
,,
2
*
11
'
1
'
'
nnnnnn yxfyxfyy
y
Esta pendiente promedio es la que se utiliza para extrapolar linealmente desde yn hasta yn+1
usando el método de Euler:
h
yxfyxfyy nnnn
nn
2
,, *
11
1
La cual se conoce como ecuación corrector.
Por lo tanto, el método de Euler modificado o Método de Heun es un procedimiento
predictor–corrector.
Este método se podría resumir este método como la expresión:
h
yxfyxfyy nnnn
nn
2
,, *
11
1
En donde
hyxfyy nnnn ,*
1 .
12
Método de Rugen Kutta
La convergencia lenta del método de Euler y lo restringido de su región de estabilidad
absoluta nos lleva a considerar métodos de orden de convergencia mayor. En clase
mencionamos que en cada paso el método de Euler se mueve a lo largo de la tangente de
una cierta curva que esta "cerca" a la curva desconocida o buscada. Los métodos Runge-
Kutta extienden esta idea geométrica al utilizar varias derivadas o tangentes intermedias, en
lugar de solo una, para aproximar la función desconocida. Los métodos Runge-Kutta más
simples se obtienen usando dos de estas derivadas intermedias.
Métodos Runge-Kutta de dos Evaluaciones: Aqui buscamos métodos o fórmulas
numéricas de la forma:
Note que apesar de que en la fórmula se perciven tres f's, el método envuelve solo dos
evaluaciones ya que dos de estas f's tienen los mismos argumentos. La idea ahora es
determinar los parámetros de modo que el método tenga orden de convergencia
lo más alto posible. Un análisis del error local de esta fórmula basado en el Teorema de
Taylor muestra que el orden más alto que puede tener esta fórmula es dos y que esto puede
ocurrir si y solo si:
Es decir si cumplen con estas condiciones, entonces ej=y(tj)-yj=O(h2) para toda
j. Algunos casos especiales de estas fórmulas son:
1. Método de Heun: Aqui se toma de modo que el método reduce a:
Para propositos de hacer cálculos es mejor escribir esta fórmula como:
2. Método del Punto Medio: Aqui se toma de modo que el método reduce a:
13
Métodos Runge-Kutta de más de dos Evaluaciones: Aunque el método de Heun fué
bastante efectivo en el ejemplo anterior, nos interesa encontrar métodos de orden aún más
alto que no requieran h's muy pequeñas. Vimos aqui que un método Runge-Kutta de dos
evaluaciones intermedias genera un método de orden dos. Es razonable pensar que tres o
cuatro evaluaciones intermedias producen métodos Runge-Kutta de ordenes tres y cuatro
respectivamente. Este el caso pero ya para cinco evaluaciones no obtenemos
necesariamente métodos Runge-Kutta de orden cinco pero si con seis evaluaciones. Un
ejemplo de un método Runge-Kutta de orden cuatro de cuatro evaluaciones es el llamado
método Runge-Kutta clásico definido por las fórmulas:
14
Implementación de una Interfaz Gráfica de Usuario
Breve Descripción de los Lenguajes de Programación
GNU Octave
Octave o GNU Octave es un programa libre para realizar cálculos numéricos. Como indica
su nombre es parte de proyecto GNU. MATLAB es considerado su equivalente comercial.
Entre varias características que comparten se puede destacar que ambos ofrecen un
intérprete permitiendo ejecutar órdenes en modo interactivo. Nótese que Octave no es un
sistema de álgebra computacional como podría ser Maxima, sino que usa un lenguaje que
está orientado al análisis numérico.
El proyecto fue creado alrededor del año 1988 pero con una finalidad diferente: ser
utilizado en un curso de diseño de reactores químicos. Posteriormente en el año 1992, se
decide extenderlo y comienza su desarrollo a cargo de John W. Eaton.1 La primera versión
alpha fue lanzada el 4 de enero de 1993. Un año más tarde, el 17 de febrero de 1994
aparece la versión 1.0.
El nombre surge de Octave Levenspiel, profesor de unos de los autores conocido por sus
buenas aproximaciones por medio de cálculos mentales a problemas numéricos en
ingeniería química.
Detalles técnicos:
Octave está escrito en C++ usando la biblioteca STL.
Tiene un intérprete de su propio lenguaje (de sintaxis similar a Matlab), y
permite una ejecución interactiva o por lotes.
Puede extenderse el lenguaje con funciones y procedimientos por medio de
módulos dinámicos.
Utiliza otros programas GNU para ofrecer al usuario crear gráficos para luego
imprimirlos o guardarlos (Grace).
Dentro del lenguaje también se comporta como una consola de órdenes (shell).
Esto permite listar contenidos de directorios, por ejemplo.
Además de correr en plataformas Unix también lo hace en Windows.
Puede cargar archivos con funciones de Matlab de extensión .m.
Ayuda en español
La sintaxis es similar a la utilizada en MATLAB.
Es un lenguaje interpretado.
No permite pasar argumentos por referencia. Siempre se pasan por valor.
No permite punteros.
Se pueden generar scripts.
Soporta gran parte de las funciones de la biblioteca estándar de C.
Puede extenderse para ofrecer compatibilidad a las llamadas al sistema UNIX.
15
El lenguaje está pensado para trabajar con matrices y provee mucha
funcionalidad para trabajar con éstas.
Soporta estructuras similares a los "struct"s de C.
Al ser su licencia Licencia pública general de GNU, puede ser compartido y utilizado
libremente.
Python
Python es un lenguaje de programación interpretado cuya filosofía hace hincapié en una
sintaxis muy limpia y que favorezca un código legible.
Se trata de un lenguaje de programación multiparadigma, ya que soporta orientación a
objetos, programación imperativa y, en menor medida, programación funcional. Es un
lenguaje interpretado, usa tipado dinámico y es multiplataforma.
Es administrado por la Python Software Foundation. Posee una licencia de código abierto,
denominada Python Software Foundation License, que es compatible con la Licencia
pública general de GNU a partir de la versión 2.1.1, e incompatible en ciertas versiones
anteriores.
Python fue creado a finales de los ochenta por Guido van Rossum en el Centro para las
Matemáticas y la Informática (CWI, Centrum Wiskunde & Informatica), en los Países
Bajos, como un sucesor del lenguaje de programación ABC, capaz de manejar excepciones
e interactuar con el sistema operativo Amoeba.
El nombre del lenguaje proviene de la afición de su creador original, Guido van Rossum,
por los humoristas británicos Monty Python.
Van Rossum es el principal autor de Python, y su continuo rol central en decidir la
dirección de Python es reconocido, refiriéndose a él como Benevolente Dictador Vitalicio
(en inglés: Benevolent Dictator for Life, BDFL).
Python es un lenguaje de programación multiparadigma. Esto significa que más que forzar
a los programadores a adoptar un estilo particular de programación, permite varios estilos:
programación orientada a objetos, programación imperativa y programación funcional.
Otros paradigmas están soportados mediante el uso de extensiones.
Python usa tipado dinámico y conteo de referencias para la administración de memoria.
Una característica importante de Python es la resolución dinámica de nombres; es decir, lo
que enlaza un método y un nombre de variable durante la ejecución del programa (también
llamado enlace dinámico de métodos).
Otro objetivo del diseño del lenguaje es la facilidad de extensión. Se pueden escribir
nuevos módulos fácilmente en C o C++. Python puede incluirse en aplicaciones que
necesitan una interfaz programable.
16
Aunque la programación en Python podría considerarse en algunas situaciones hostil a la
programación funcional tradicional del Lisp, existen bastantes analogías entre Python y los
lenguajes minimalistas de la familia Lisp como puede ser Scheme.
Explicación de Pasos:
Bueno para ello, utilizamos el lenguaje de programación de alto nivel como lo es Python,
en dicho lenguaje encontramos un sin fin de funciones para la elaboración de innumerables
proyectos, entre ellos este sencillo y eficaz programa.
Así también hemos utilizado un potente interprete matemático que en si no es un sistema de
algebra computacional, pero si permite el manejo de ordenes en modo interactivo, perfecto
para el análisis numérico, y nos referimos precisamente a Octave.
La elaboración de nuestra interfaz fue diseñada en el entorno del sistema operativo
Ubuntu/Linux, por lo cual muchos de los procesos son directamente desde la terminal.
Ahora empezaremos primeramente con la obtención de los ficheros necesarios para el uso
de los programas anteriormente mencionados, comencemos con la obtención de Octave, lo
primero que haremos es abrir la terminal y escribir la siguiente línea: sudo apt-get install octave
Con ello ya tenemos todo para la instalación de Octave; ahora haremos un proceso similar
para obtener Python, con el complemento para la elaboración de interfaces gráficas, pues
bien abrimos nuevamente el terminal y escribimos el siguiente comando:
sudo apt-get install python python-tk idle python-pmw python-imaging
Listo con ello ya estamos listos para la elaboración y ejecución de una interfaz gráfica de
usuario.
17
Para empezar, lo primero que tenemos que hacer, es importar Tkinter, que es el módulo que
vamos a usar para este tutorial (existen otros mucho mejores, pero este me parece el más
simple)
from Tkinter import *
Ahora creamos una ventana vacía, para ello:
root = Tk() #Creamos identificador que sera el que
utilizaremos
#para referirnos a la ventana
root.title('Empezando en Tkinter...')#Nombramos la ventana
root.mainloop() #Cerramos la edicion de la ventana y esperamos a eventos
Con esto creamos nuestra ventana.
Ahora realizaremos los botones para ejecutar procesos y escribimos lo siguiente:
boton=Button(win,text="Solucion",command=Solucion)
Ahora definiremos el comando “Solución” para la implementacion del metodo de Runge
Kutta de orden 4:
def Solucion():
octa=popen("octave -qf","w")
funcionRungekutta="[X Ysol] = rungekutta4(%s,%s,%s,%s,\"%s\");\n"
%(text.get(),text2.get(),text3.get(),text4.get(),text5.get())
octa.write(funcionRungekutta)
octa.close()
lectura1=open("X.txt","r")
label6=Label(win,text=lectura1.read())
label6.grid(column=2,row=7)
linea=lectura1.read()
lectura1.close
lectura2=open("Y.txt","r")
label7=Label(win,text=lectura2.read())
label7.grid(column=3,row=7)
linea=lectura2.read()
lectura2.close
En este bloque hacemos referencia a una subrutina para la apertura de Octave ya que
nuestra interfaz gráfica y la solución de los métodos es gracias a Octave y a la apertura y
lectura de ficheros. Por lo cual necesitamos de un fichero con sintaxis propia de Octave que
al final mostraremos. Continuando con la elaboración de nuestra interfaz, ahora llamaremos
a nuestros Label o cajas para la captura de datos y escribimos el siguiente bloque:
18
label=Label(win,text="x0")
label2=Label(win,text="y0")
label3=Label(win,text="xn")
label4=Label(win,text="h")
label5=Label(win,text="dydx")
label8=Label(win,text="Solucion")
label9=Label(win,text="XSol")
label10=Label(win,text="YSol")
Ahora los ubicamos en nuestra ventana junto con el botón que anteriormente creamos:
label.grid(column=1, row=1)
text.grid(column=2, row=1)
label2.grid(column=1, row=2)
text2.grid(column=2, row=2)
label3.grid(column=1, row=3)
text3.grid(column=2, row=3)
label4.grid(column=1,row=4)
text4.grid(column=2, row=4)
label5.grid(column=1,row=5)
text5.grid(column=2, row=5)
label8.grid(column=1,row=6)
label9.grid(column=2,row=6)
label10.grid(column=3,row=6)
boton.grid(column=3, row=1)
Como pasos finales declaramos las variables de nuestra captura de datos:
text=Entry(win)
text2=Entry(win)
text3=Entry(win)
text4=Entry(win)
text5=Entry(win)
Luego le ponemos nombre a nuestra ventana:
win.title("Metodo de Runge Kutta")
19
En fin todo el Bloque completo tendría que quedar así:
from Tkinter import *
from os import popen
def Solucion():
octa=popen("octave -qf","w")
funcionRungekutta="[X Ysol] = rungekutta4(%s,%s,%s,%s,\"%s\");\n"
%(text.get(),text2.get(),text3.get(),text4.get(),text5.get())
octa.write(funcionRungekutta)
octa.close()
lectura1=open("X.txt","r")
label6=Label(win,text=lectura1.read())
label6.grid(column=2,row=7)
linea=lectura1.read()
lectura1.close
lectura2=open("Y.txt","r")
label7=Label(win,text=lectura2.read())
label7.grid(column=3,row=7)
linea=lectura2.read()
lectura2.close
win=Tk()
win.title("Metodo de Runge Kutta")
text=Entry(win)
text2=Entry(win)
text3=Entry(win)
text4=Entry(win)
text5=Entry(win)
label=Label(win,text="x0")
label2=Label(win,text="y0")
label3=Label(win,text="xn")
label4=Label(win,text="h")
label5=Label(win,text="dydx")
label8=Label(win,text="Solucion")
label9=Label(win,text="XSol")
label10=Label(win,text="YSol")
boton=Button(win,text="Solucion",command=Solucion)
label.grid(column=1, row=1)
text.grid(column=2, row=1)
label2.grid(column=1, row=2)
text2.grid(column=2, row=2)
label3.grid(column=1, row=3)
text3.grid(column=2, row=3)
label4.grid(column=1,row=4)
text4.grid(column=2, row=4)
label5.grid(column=1,row=5)
text5.grid(column=2, row=5)
label8.grid(column=1,row=6)
label9.grid(column=2,row=6)
label10.grid(column=3,row=6)
boton.grid(column=3, row=1)
win.mainloop()
20
Y nuestra interfaz quedara así:
Como vemos ahí ya le hemos metido valores pero antes de esto debemos tener nuestro
fichero en sintaxis Octave con la implementación del método el cual lo dejo a continuación:
% Argumentos:
% x0: valor inicial para variable independiente
% y0: valor inicial para variable dependiente
% xn: valor final para la variable independiente
% h: valor de avances o desplazamientos para llegar al valor
% final de la variable independiente.
% fx: variable donde almacena un strig de la función o ecuación diferencial a
resolver
function [xn y B] = rungeKutta4 (x0, y0, xn, h, fx)
B = zeros (length(x0 : h : xn), 2);
B(:,1) = x0 : h : xn;
B(1,2) = y0;
for a = 1:length(x0:h:xn)-1;
x = B(a,1);
y = B(a,2);
k1 = eval(fx,x,y);
x = B(a,1) + h/2; y = B(a,2) + h*k1/2;
k2 = eval(fx,x,y);
x = B(a,1) + h/2; y = B(a,2) + h*k2/2;
k3 = eval(fx,x,y);
x = B(a,1) + h; y = B(a,2) + h*k3;
k4 = eval(fx,x,y);
y = B(a+1,2) = B(a,2) + (k1 + 2*k2 + 2*k3 + k4)*h/6;
Retorno1 = fopen('Y.txt','w'); %creacion de un archivo .txt
Retorno2 = fopen('X.txt','w');
fprintf(Retorno1, '%4.6f\n',B(:,2));% impresión en el archivo .txt
creado anteriormente
fclose(Retorno1);
fprintf(Retorno2, '%4.6f\n',B(:,1));
fclose(Retorno2);
endfor
endfunction
21
Luego de haber realizado las demás funciones y puesto todos nuestros métodos
investigados, obtendremos lo siguiente:
Nuestra interfaz con todos los métodos estudiados.
*Nota: En este Proyecto Incluimos un Manual de Usuario para el Manejo Correcto de la
Interfaz Gráfica.
22
Conclusiones
Como hemos aprendido, estos métodos se aplican cuando se necesita un valor numérico
como solución a un problema matemático, y los procedimientos "exactos" o "analíticos"
(manipulaciones algebraicas, teoría de ecuaciones diferenciales, métodos de integración,
etc.) son incapaces de dar una respuesta. Es por ello que tanto Físicos como Ingenieros
utilizan dichos métodos para la obtención de resultados favorables. Ahora con la invención
de los ordenadores o computadoras se ha facilitado a un más la obtención de resultados de
una forma más precisa y rápida y controlable.
Además hemos tratado de hacer lo más comprensible posible como trabajan los métodos
estudiados en este caso los de diferenciación, y la implementación de estos en el área de
programación hasta crear una interfaz de usuario.
Cabe recalcar que de los métodos más exactos es el de Runge Kutta de orden 4 y que como
vimos su implementación es bien sencilla, pero de todos es el más conveniente a utilizar o
recurrir.
23
Bibliografía
Steven C. Chapra y Raymond P. Canale, Métodos Numéricos para Ingenieros, Quinta
Edición, McGraw-Hill
Métodos Numéricos con Octave
Luis Guillermo Bustamante
Camilo Zuluaga
Camilo Duque Velásquez
http://chuwiki.chuidiang.org/index.php?title=Ejemplo_b%C3%A1sico_de_interface_gr%C
3%A1fica_de_usuario_con_Python
https://es.wikipedia.org/wiki/An%C3%A1lisis_num%C3%A9rico