Kernel: Python 2
Tarea 5
By: OℜβΣ
Resuelva los siguientes ejercicios.
In [1]:
from math import * from numpy import * from scipy import * from scipy.integrate import * from pylab import * %matplotlib inline from matplotlib import animation from JSAnimation import IPython_display
1.Realice una animación del siguiente sistema de ecuaciones
v˙x​=vy​B0​v˙y​=−vx​B0​con B0​ = 2 y condiciones iniciales v0​​ = (0, 1).
(a) Como es la trayectoria en el plano (vx​,vy​).
In [5]:
def fun(x_v,t,Bo=2): vx_dot=x_v[1]*Bo vy_dot=-x_v[0]*Bo return vx_dot,vy_dot t=linspace(0,6) vo=(0,1) cond_ini=(vo[0],vo[1]) solucion= odeint(fun,cond_ini,t) vx,vy= solucion[:,0], solucion[:,1] x=[0] y=[0] axis('equal') plot(vx,vy)
Out[5]:
[<matplotlib.lines.Line2D at 0x7fbdaafbc5d0>]
In [9]:
figura = figure() ejes = axes(xlim=(-1.5,1.5 ), ylim=(-1, 1)) ecuacion, = ejes.plot( [] , [],'-',color='k' ) punto,=ejes.plot([], [],'o',markersize=10) ecuacion2, = ejes.plot([], []) puntof, = ejes.plot([] , [],'o',markersize=20) def init(): ecuacion.set_data( [] , [] ) punto.set_data([], []) ecuacion2.set_data([],[]) puntof.set_data([],[]) return ecuacion,punto,ecuacion2,puntof, def animate(i): ecuacion.set_data( vx[:i], vy[:i] ) punto.set_data(vx[i],vy[i]) ecuacion2.set_data(x[0],y[0]) puntof.set_data(x[0],y[0]) return ecuacion,punto,ecuacion2,puntof, animation.FuncAnimation(figura, animate, init_func=init, frames=len(vx) ,interval=50, blit=True)
Out[9]:
(b) Como es la trayectoria en el plano (vx​,t) y (vy​,t).
In [11]:
plot(vx,t,label="vx") plot(vy,t,label="vy") legend() show()
Out[11]:
In [12]:
figura = figure() ejes = axes(xlim=(-1,1 ), ylim=(0, 6)) trayectoria1, = ejes.plot( [] , [],'--',color='r' ) punto1,=ejes.plot([], [],'o',markersize=10) trayectoria2, = ejes.plot( [] , [],'-',color='b' ) punto2,=ejes.plot([], [],'*',markersize=10) def init(): trayectoria1.set_data( [] , [] ) punto1.set_data([], []) trayectoria2.set_data( [] , [] ) punto2.set_data([], []) return trayectoria1,punto1,trayectoria2,punto2, def animate(i): trayectoria1.set_data( vx[:i], t[:i] ) punto1.set_data(vx[i],t[i]) trayectoria2.set_data( vy[:i], t[:i] ) punto2.set_data(vy[i],t[i]) return trayectoria1,punto1,trayectoria2,punto2, animation.FuncAnimation(figura, animate, init_func=init, frames=len(vx) ,interval=50, blit=True)
Out[12]:
(c) ¿Qué sucede si v0​​ = (a, b) tales que a2+b2=1 ?. Examine varias trayectorias (por lo menos 15).
In [13]:
t=linspace(0,6) figure(figsize=(6,6)) for i in range(1,16): x=i a_2=sin(x)**2 b_2=cos(x)**2 a=sqrt(1-cos(x)**2) b=sqrt(1-sin(x)**2) vo=(a,b) cond_ini=(vo[0],vo[1]) solucion= odeint(fun,cond_ini,t) vx,vy= solucion[:,0], solucion[:,1] axis('equal') subplot(1,2,1) plot(vx,vy,label='trayectoria='+str(i)) legend(bbox_to_anchor=(0., 1.2, 4., 1), loc=3, ncol=4, mode="expand", borderaxespad=0.) subplot(1,2,2) plot(vx,t)
Out[13]:
(d) Haga la animación para 3 de las trayectorias anteriores.
In [14]:
t=linspace(0,6) figure(figsize=(6,6)) x=13 a_2=sin(x)**2 b_2=cos(x)**2 a=sqrt(1-cos(x)**2) b=sqrt(1-sin(x)**2) vo=(a,b) cond_ini=(vo[0],vo[1]) solucion= odeint(fun,cond_ini,t) vx,vy= solucion[:,0], solucion[:,1] x=4 a_2=sin(x)**2 b_2=cos(x)**2 a=sqrt(1-cos(x)**2) b=sqrt(1-sin(x)**2) vo=(a,b) cond_ini=(vo[0],vo[1]) solucion= odeint(fun,cond_ini,t) vx_o,vy_o= solucion[:,0], solucion[:,1] x=2 a_2=sin(x)**2 b_2=cos(x)**2 a=sqrt(1-cos(x)**2) b=sqrt(1-sin(x)**2) vo=(a,b) cond_ini=(vo[0],vo[1]) solucion= odeint(fun,cond_ini,t) vx_1,vy_1= solucion[:,0], solucion[:,1] plot(vx,vy,vx_o,vy_o,vx_1,vy_1,label='b') legend()
Out[14]:
<matplotlib.legend.Legend at 0x7f3b4ede1d90>
In [16]:
figura = figure() ejes = axes(xlim=(-1,1 ), ylim=(-1, 1)) trayectoria1, = ejes.plot( [] , [],'--',color='r' ) punto1,=ejes.plot([], [],'o',markersize=10) trayectoria2, = ejes.plot( [] , [],'-',color='b' ) punto2,=ejes.plot([], [],'*',markersize=10) trayectoria3, = ejes.plot( [] , [],'-',color='m' ) punto3,=ejes.plot([], [],'D',markersize=10) def init(): trayectoria1.set_data( [] , [] ) punto1.set_data([], []) trayectoria2.set_data( [] , [] ) punto2.set_data([], []) trayectoria3.set_data( [] , [] ) punto3.set_data([], []) return trayectoria1,punto1,trayectoria2,punto2,trayectoria3,punto3, def animate(i): trayectoria1.set_data( vx[:i], vy[:i] ) punto1.set_data(vx[i],vy[i]) trayectoria2.set_data( vx_o[:i], vy_o[:i] ) punto2.set_data(vx_o[i],vy_o[i]) trayectoria3.set_data( vx_1[:i], vy_1[:i] ) punto3.set_data(vx_1[i],vy_1[i]) return trayectoria1,punto1,trayectoria2,punto2,trayectoria3,punto3, animation.FuncAnimation(figura, animate, init_func=init, frames=len(vx) ,interval=50, blit=True)
Out[16]: