Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Ecuaciones Diferenciales
Comentarios:
Control de flujo:
• Requieren identación
Instrucciones
else
Programación básica en IPython
Módulos y paquetes:
Módulos y paquetes:
Puedo importar un módulo y nombrarlo diferente para trabajar con este nuevo nombre.
import moduloejemplo as ptr
print(ptr.variableprincipal)
Programación básica en IPython
Funciones:
Porción de código que se ejecuta cuando es llamado. (Recordar la identación)
def mi_funcion():
Instrucciones
A=[3,4,5]
A=[[3,5,6],[8,9,0]]
Pero desde paquete NumPy podemos crear objetos llamados array que nos permiten realizar
operaciones matemáticas y algebra lineal.
Primero que todo debemos importarla:
import numpy as np
Graficación en IPython
Para el curso principalmente nos importará crear vectores para graficar, que son los posibles
valores que nuestra variable en una función puede tomar, para esto hay dos formas.
[ 2. 3. 4. 5. 6. 7. 8. 9.]
Graficación en IPython
Graficación 2D:
Para la gráficación debemos utilizar el módulo PyLab de matplotlib
import pylab
Debemos utilizar la función plot del paquete pylab, que recibe dos vectores que deben tener el
mismo tamaño. Finalmente para mostrar la gráfica en Ipython notebook se debe utilizar la función
show
A= [3,4,5,6,7]
B= [4,5,6,7,9]
ptr.plot(A,B)
ptr.show()
Graficación en IPython
Graficación 2D:
Podemos darle estilo a nuestra grafica con las siguientes funciones:
A= np.linspace(-10,10,1000)
B= np.exp(-A**2)
ptr.plot(A,B,label="La campana")
ptr.title('Grafica de dos vectores')
ptr.xlim(-10,10)
ptr.ylim(0,2)
ptr.xlabel('Vector A')
ptr.ylabel('Vector B')
ptr.legend(loc="best")
ptr.show()
Graficación en IPython
Graficación 2D:
Se puede graficar más de una función si se utilizar la función hold():
ptr.plot(A,B,label="La campana")
ptr.hold()
ptr.plot(B,A,label="La campana
inversa")
ptr.hold()
La función subplots nos permite crear varios ejes cartesianos para graficar, esta función nos
devuelve objetos correspondientes a cada eje, en este ejemplo son ax1,ax2:
Graficación 2D:
Cada uno de estos ejes es un objeto PyLab por lo que se pueden utilizar cada una de las funciones
previamente vistas, algunas con modificaciones en el nombre: set_xlabel, set_title.
y=np.exp(-x**2)
ax1.plot(x,y,label="Primer cuadro")
ax1.legend()
y=x**5
ax2.plot(x,y,label="Segundo Cuadro")
ax2.legend()
Graficación en IPython
Graficación 2D: Funciones implícitas
Hay funciones que no se pueden expresar como =
−
= +
−
, = − − =
Para graficar esta función primero se debe crear un arreglo donde se pueda evaluar en la ecuación
, = � cada par coordenado deseado, este procedimiento se realiza con la función meshgrid.
Luego se grafica con la función contour de PyLab.
Graficación en IPython
Graficación 2D: Funciones implícitas
y
¿Qué es un meshgrid?
5
(2,5) (3,5) (4,5) (5,5) (6,5) (7,5) (8,5) (9,5) Código:
x = np.arange(2, 10, 1)
4
(2,4) (3,4) (4,4) (5,4) (6,4) (7,4) (8,4) (9,4) y = np.arange(1, 6, 1)
X, Y = np.meshgrid(x,y)
3
(2,3) (3,3) (4,3) (5,3) (6,3) (7,3) (8,3) (9,3)
2
(2,2) (3,2) (4,2) (5,2) (6,2) (7,2) (8,2) (9,2)
1 x
(2,1) (3,1) (4,1) (5,1) (6,1) (7,1) (8,1) (9,1)
2 3 4 5 6 7 8 9
Graficación en IPython
Graficación 2D: Funciones implícitas
A continuación el uso de la función contour:
pt.contour Arreglo de X’s proveniente del meshgrid , Arreglo de X’s proveniente del
meshgrid , Fu ció e terminos de X y Y , Arreglo de valores de C , Opcio es
Código:
x=np.linspace(-10,10,500)
y=np.linspace(-10,10,500)
X, Y = np.meshgrid(x, y)
ptr.contour(X, Y, X**2/2-Y**2-np.exp(-X*Y),[3,12,24])
Graficación en IPython
Graficación 2D: Campo de pendientes
Básicamente es igual a graficar una función implícita, sólo que se hacen unas pequeñas
modificaciones para que sea más ilustrativo.
Para cualquier función que cumpla una ecuación diferencial de la forma
= ,
Para un punto �, � se puede graficar la pendiente como un vector que se origina en ese punto
� =
� = ,
Graficación en IPython
Graficación 2D: Campo de pendientes
=
Código:
Primero se crea � y � , a partir de ,
def f1(x,y):
return y/(2*x)
x = np.linspace(-10,10,10);
Y=x
X, Y = np.meshgrid(x, y)
U = 1;
V = f1(X,Y);
ptr.quiver(X,Y,U, V)
Solución de E.D.
Solución simbólica:
Para esto se debe importa el paquete SymPy de cálculo simbólico:
Las variables " " y " " dejan de ser vectores y se declaran como objetos symbols.
y = symbols('y', cls=Function)
x = symbols('x')
Se crea un objeto ecuación donde se escribe la E.D. luego se utiliza la función dsolve.
dsolve(diffeq, y(x))
Solución de E.D.
Solución numérica de E.D.O de primer orden:
Se hace uso del paquete SciPy y su subpaquete integrate.
import scipy.integrate as sp
Para resolver la siguiente ecuación diferencial primero se debe crear un vector x, con el cual se
aplicará el método numérico. Luego se debe tener en cuenta que el primer valor de vector es el
punto de la condición inicial, en este caso � = , luego se debe declarar � = .
x = np.linspace(1,10,500) �
�
= cos − sin =
y0 =2
def df(y,x):
return x*np.cos(x)**2-np.sin(y)
Solución de E.D.
Solución numérica:
Finalmente se utiliza el método odeint, que nos retorna el vector de y, lo siguiente es graficarlo.
y=sp.odeint( df , y0 , x )
ptr.plot(x,y)
ptr.show()
Solución de E.D.
Solución numérica de E.D.O de orden superior:
El procedimiento es muy similar, sólo se debe organizar la E.D.:
� �
+ + sin = = ′ =
� �
El P.V.I que vayamos a resolver debe tener la misma abscisa inicial, � = en este caso.
Se debe organizar de la siguiente manera, comenzando con al derivada de primer orden hasta el
orden de la E.D. menos 1.
=
�
= El objetivo es obtener una E.D. de primer orden para alguna variable nueva que
�
creemos.
+ + sin =
Solución de E.D.
Solución numérica de E.D.O de orden superior:
�
=− − sin
�
= sin
load(implicit_plot);
= +
implicit_plot (x^2 = y^2 +1, [x, -4, 4], [y, -4, 4]);
Solucion E.D. Simbólica
Solucion E.D. Simbólica
Creamos una variables simbólica que va contener nuestra E.D.
ysol: ode2(ed,y,x);
ic2(ysol,x=0,y=0, 'diff(ysol,x)=0);
Solucion E.D. Simbólica
Solucion E.D. Simbólica
Creamos una variables simbólica que va contener nuestra E.D.
atvalue(f(x),x=0,0)
atvalue('diff(f(x),x),x=0,0)
ysol: desolve(ed,f(x));
Solucion E.D. Numérica
Solucion E.D. numérica de primer orden
Se usa el comando rk(ode,var,initial, domain).
�
• En donde ode, es la ecuación despejada =�
�
• var es la variable a resolver.
• initial es la condición inicial.
• domain el vector del dominio de solución, [x, inicio, final, incremento].
Sol: rk(((y+x)/(y-x)),y,1,[x,3,10,0.1]);
• En Sol quedan los pares ordenados, es decir los valores de y agrupados, así que solo queda
graficar con plot2d, agregando el parámetro discrete.
The discrete form is used to plot a set of points with given coordinates.
plot2d([discrete,Sol]);
Solucion E.D. Numérica
Solucion E.D. numérica de orden superior
Se debe organizar la ecuación diferencial de manera que cada derivada quede en términos de su
derivada superior.
� �
�
+ �
+ sin = = ′ =
=
�
= El objetivo es obtener una E.D. de primer orden para alguna variable nueva que
�
creemos.
+ + sin =
Solucion E.D. Numérica
Solucion E.D. numérica de orden superior
Se usa el comando
sol:rk([-x*y2-20*sin(y1),y2],[y2,y1],[1,0],[x,0,6,0.1])$
La solución entrega grupos de 3 valores: [x,y2,y1], nos interesa y1 y x por lo que lo organizamos
con el comando makelist. Luego podemos graficar y con el discrete y plot2d.
y:makelist([sol[k][1],sol[k][3]],k,1,length(sol))
plot2d([discrete,y]);
Campo de pendientes
Graficación del campo de pendientes
�
Se debe despejar de la ecuación :
�
load(drawdf) drawdf(y^2/2)
10
-5
-10
-10 -5 0 5 10
Campo de pendientes
Graficación del campo de pendientes
Es posible dibujar una trayectoria del campo de pendientes perteneciente a una solución
particular:
=
drawdf(2*y/x,[trajectory_at,1,1])
10
-5
-10
-10 -5 0 5 10
Contenido
• Programación básica en IPython
• Módulos importantes para el curso
• Graficación en IPython
• Solución de O.D.E.
• Comandos de Maxima
• Interfaz de Maxima
• Matlab
Matlab
Graficación
Una forma de graficar en matlab es mediante vectores y el comando plot.
Creamos un vector de cualquiera de las dos formas:
x = 0:pi/100:2*pi;
x = linspace(0,2*pi,200)
ezplot('cos(x)'); ezplot('cos(x)‘,[-1,1]);
cos(x) cos(x)
1 1
0.95
0.9
0.5
0.85
0.8
0
0.75
0.7
-0.5
0.65
0.6
-1
0.55
-6 -4 -2 0 2 4 6 0.5
x -1 -0.8 -0.6 -0.4 -0.2 0 0.2 0.4 0.6 0.8 1
x
Matlab
Solución de E.D.
La solución simbolica de una E.D. se hace mediante el uso del comando dsolve y la derivada de
orden N se expresa como DNy.
dsolve('D2y+Dy+y=0','x')
dsolve('D2y+Dy+y=0','y(1)=1','Dy(1)=0','x')
Matlab
Solución de E.D. numérica
� �
10 + . + = = ′ = en x= (0,5)
� �
ode45(@odeFunction,tspan,x0)
function dx = odeFunction(t,x)
y=x(1)
v=x(2)
dx=[v, (-0.05*v-12*y)/10]
= � =
[t,ysol]=ode45(@odeFunction,[0,5],[1,5])