Analisis Numericos Ciclo I 2013

23
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

Transcript of Analisis Numericos Ciclo I 2013

Page 1: Analisis Numericos Ciclo I 2013

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

Page 2: Analisis Numericos Ciclo I 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

Page 3: Analisis Numericos Ciclo I 2013

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.

Page 4: Analisis Numericos Ciclo I 2013

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.

Page 5: Analisis Numericos Ciclo I 2013

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.

Page 6: Analisis Numericos Ciclo I 2013

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.

Page 7: Analisis Numericos Ciclo I 2013

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.

Page 8: Analisis Numericos Ciclo I 2013

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.

Page 9: Analisis Numericos Ciclo I 2013

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:

Page 10: Analisis Numericos Ciclo I 2013

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.

Page 11: Analisis Numericos Ciclo I 2013

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 .

Page 12: Analisis Numericos Ciclo I 2013

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:

Page 13: Analisis Numericos Ciclo I 2013

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:

Page 14: Analisis Numericos Ciclo I 2013

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.

Page 15: Analisis Numericos Ciclo I 2013

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.

Page 16: Analisis Numericos Ciclo I 2013

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.

Page 17: Analisis Numericos Ciclo I 2013

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:

Page 18: Analisis Numericos Ciclo I 2013

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")

Page 19: Analisis Numericos Ciclo I 2013

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()

Page 20: Analisis Numericos Ciclo I 2013

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

Page 21: Analisis Numericos Ciclo I 2013

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.

Page 22: Analisis Numericos Ciclo I 2013

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.

Page 23: Analisis Numericos Ciclo I 2013

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