CAv_1617_Practica5

hace 304 días por sevillad1617

Práctica 5 de Cálculo Avanzado

Límite de entrega de esta práctica: ver tarea en Moodle. Hasta una semana de retraso: vale el 50% como máximo.

Instrucciones:

  1. Haz una copia de la hoja pública y renómbrala: si tu correo es usuario@alumnos.unex.es añade al final del título _usuario, por ejemplo CAv_1314_Practica7_sevillad.
    • Para cambiar el nombre pulsa en el título de la hoja (arriba del todo, entre el logo de Sage y el menú "Archivos...")
  2. Comparte la hoja de trabajo con el usuario sevillad1617 mediante el botón Compartir de arriba a la derecha.
  3. Trabaja la práctica: los ejercicios opcionales son solo para subir nota.
  4. Cuando hayas terminado, haz una copia en un fichero PDF y ponlo en el campus virtual. Esa será la versión que se evaluará. La hoja no se considera entregada si no se ha compartido (punto 2).
    • Para generar el PDF lo más sencillo es usar Imprimir arriba e imprimir la nueva página a fichero.
    • Una alternativa es hacer capturas de pantalla (JPG, PNG...) y convertirlas a un único fichero PDF.

 

Sage viene equipado con multitud de herramientas para trabajar con ecuaciones diferenciales. Por ejemplo, la función plot_slope_field(f, xrange, yrange) dibuja las pendientes de la EDO de orden uno $y'=f(t,y)$.

var('t,y') campopendientes = plot_slope_field(sin(t+y)+cos(t+y),(t,-3,3),(y,-3,3)) campopendientes.show(figsize=5) 
       

Sage también resuelve EDOs. A continuación tienes ejemplos. Fíjate en que definimos $t$ como variable e $y$ como función de $t$, y así Sage entiende que se puede derivar $y$.

Para introducir la ecuación, una manera es pasar todo a un miembro, es decir, se considera que la expresión que ponemos se iguala a cero. A continuación resolvemos $y'+y=1$, obteniendo la solución general (fíjate en el parámetro).

# orden uno var('t') y = function('y')(t) desolve(diff(y,t)+y-1, y) 
       
(_C + e^t)*e^(-t)
(_C + e^t)*e^(-t)

Una condición inicial $y(t_0)=y_0$ se escribe como un par de números.

# orden uno con condición inicial y(0)=2 var('t') y = function('y')(t) f = desolve(diff(y,t)+y-1, y, [0,2]) print f plot(f).show(figsize=4) f(t=0) 
       
(e^t + 1)*e^(-t)
2
(e^t + 1)*e^(-t)
2

En el siguiente ejemplo la ecuación se escribe de otra manera: se mete en una variable, para lo que escribimos la igualdad de la ecuación con doble signo, "==".

# orden dos var('t') y = function('y')(t) de = diff(y,t,2)-y == t desolve(de, y) 
       
_K2*e^(-t) + _K1*e^t - t
_K2*e^(-t) + _K1*e^t - t

Las condiciones iniciales de una EDO de orden dos se escriben como una lista con $t_0$ y los valores de $y, y'$ en ese punto.

# orden dos con condiciones iniciales y(0)=2, y'(0)=1 var('t') y = function('y')(t) de = diff(y,t,2)-y == t f = desolve(de, y, [0,2,1]) print f plot(f).show(figsize=4) f(t=0); diff(f,t)(t=0) 
       
-t + 2*e^t
2
1
-t + 2*e^t
2
1

Si la EDO de orden dos tiene condiciones de frontera, se ponen los dos pares seguidos en una lista (cuatro números).

# orden dos con condiciones de frontera y(0)=2, y(pi/2)=3 var('t') y = function('y')(t) de = diff(y,t,2)+y == 0 f = desolve(de, y, [0,2,pi/2,3]) print f plot(f,(x,0,pi/2)).show(figsize=4) f(t=0); f(t=pi/2) 
       
2*cos(t) + 3*sin(t)
2
3
2*cos(t) + 3*sin(t)
2
3

Algunas ecuaciones, más difíciles que las que vemos en clase, son resueltas solo de forma implícita.

var('t') y = function('y')(t) desolve(y*diff(y,t)+sin(t)==0,y) 
       
-1/2*y(t)^2 == _C - cos(t)
-1/2*y(t)^2 == _C - cos(t)

En esos casos en que Sage no nos devuelva nada útil, podemos intentar una aproximación. De los muchos métodos numéricos que hay, el siguiente ejemplo utiliza uno habitual.

var('t') y = function('y')(t) eq = diff(y,t)+y*(y-1) == t-2 desolve(eq,y) 
       
Traceback (click to the left of this block for traceback)
...
NotImplementedError: Maxima was unable to solve this ODE. Consider to
set option contrib_ode to True.
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "_sage_input_12.py", line 10, in <module>
    exec compile(u'open("___code___.py","w").write("# -*- coding: utf-8 -*-\\n" + _support_.preparse_worksheet_cell(base64.b64decode("dmFyKCd0JykKeSA9IGZ1bmN0aW9uKCd5JykodCkKZXEgPSBkaWZmKHksdCkreSooeS0xKSA9PSB0LTIKZGVzb2x2ZShlcSx5KQ=="),globals())+"\\n"); execfile(os.path.abspath("___code___.py"))
  File "", line 1, in <module>
    
  File "/tmp/tmpbjrixX/___code___.py", line 6, in <module>
    exec compile(u'desolve(eq,y)
  File "", line 1, in <module>
    
  File "/home/sage1516/sage-7.0/local/lib/python2.7/site-packages/sage/calculus/desolvers.py", line 470, in desolve
    raise NotImplementedError("Maxima was unable to solve this ODE. Consider to set option contrib_ode to True.")
NotImplementedError: Maxima was unable to solve this ODE. Consider to set option contrib_ode to True.
var('t,y') campopendientes = plot_slope_field(t-2-(y*(y-1)),(t,-2,15),(y,-5,5)) campopendientes.show(figsize=5) 
       
var('t') y = function('y')(t) sol_pend = desolve_rk4(eq,y,ics=[0,2],end_points=15,step=0.05,output='slope_field',thickness=2) sol_pend.show(figsize=5) 
       

Ejercicio 1.

  • Dibuja el campo de pendientes de $y'=\sin(t)-y$ para $t\in[-4,4]$, $y\in[-4,4]$.
  • Calcula dos soluciones particulares con Sage. Representa las dos en la misma gráfica que el campo de pendientes (recuerda que se suman "+" las gráficas). Puedes usar la opción thickness=n para hacer las curvas más gruesas.
 
       
 
       

Ejercicio 2. Resuelve la EDO $y'\tan t−y=1$. ¿Qué condiciones iniciales $y(t_0)=y_0$ son posibles?

 
       
 
       

Ejercicio 3. Escribe una EDO de orden dos que corresponda a un oscilador con resonancia. Calcula su solución general. Dibuja tres soluciones particulares juntas. Haz dos dibujos: uno donde se vea que las soluciones cumplen los valores iniciales y otro donde se vean las similitudes cuando $t$ es grande.

 
       
 
       

Ejercicio 4 (opcional). Intenta resolver la ecuación $y'=ty(2-y)$ con $y(0)=1$. Calcula con Sage los cinco primeros términos de la serie de Taylor (hasta $n=4$) de la solución. Después dibuja juntos ese polinomio de Taylor y una solución (exacta si la encuentras, aproximada si no has podido). Haz dos dibujos: una vez cerca de $t=0$ para que se vea que coinciden, y otra en un intervalo más grande para que se vea cómo difieren.