Para esta semana, se nos dio a la tarea de realizar una aproximación para resolver una ecuación diferencial, desde un simple programa, utilizando simples operacones matemáticas. Para esto, me base fuertemente en el código pasado del atractor de lorenz, que hacia algo similar para obtener los datos de las ecuaciones diferenciales de Lorenz.
En este caso, reemplace la ecuacion con una de ejemplo que encontré en una página web, y ajuste algunos datos para poder escribir los resultados en un archivo, y después graficarlos. La ecuación que utilicé, es la siguiente:
El código es el siguiente:
#!/usr/bin/env python import math tstop=100 dt=.01 pfile=open('diferencial.dat','w') efile=open('exact.dat', 'w') t=0 y=1 while t<tstop: t=t+dt dydt= 3*math.exp(-4*t) - 2*y y=y+dydt*dt exact = .5*math.exp(-4*t)*(5*math.exp(2*t)-3) pfile.write("%f %f\n" % (t, y)) efile.write("%f %f\n" %(t, exact)) pfile.close() efile.close() print "Archivos escritos"
Es bastante sencillo, como explicado en clase definimos un dt pequeño(entre más pequeño, nuestra aproximación podrá ser más precisa, pero también tardará más en ejecutarse al generar muchas más datos). Usamos un archivo para escribir los datos de la aproximación, y otro para los datos exactos.
Para obtener los datos exactos, es necesario resolver la ecuación diferencial de un modo matemático, para esto utilicé wolfram alpha, donde escribí la ecuación diferencial anterior, y me dió la solución, dando lo siguiente como resultado:
En la imágen podemos observar la parte donde dice 'Diferential equation solution', esa es la solución a nuestra ecuación diferencial. Entonces en el programa, utilizo esta fórmula resuelta totalmente lineal para generar directamente los datos exactos, y los escribo en un archivo distinto.
Ya para terminar, grafiqué los datos para comparar mi aproximación y la solucón exacta, y a la vista, son prácticamente iguales, es necesario ver los valores de los datos para poder apreciar la diferencia.
Gráfica:
Algunos datos:
Aproximación | Exacto |
0.010000 1.008824 0.020000 1.016341 0.030000 1.022621 0.040000 1.027733 0.050000 1.031741 0.060000 1.034705 0.070000 1.036684 0.080000 1.037735 0.090000 1.037910 0.100000 1.037262 0.110000 1.035838 0.120000 1.033684 0.130000 1.030846 0.140000 1.027366 0.150000 1.023283 0.160000 1.018636 | 0.010000 1.009313 0.020000 1.017299 0.030000 1.024031 0.040000 1.029575 0.050000 1.033997 0.060000 1.037359 0.070000 1.039720 0.080000 1.041136 0.090000 1.041661 0.100000 1.041347 0.110000 1.040242 0.120000 1.038395 0.130000 1.035848 0.140000 1.032646 0.150000 1.028828 0.160000 1.024434 |
Referencias:
Van +1 en ambos reporte y programa de extra en la tarea 4.
ResponderEliminar