In [1]:
%matplotlib inline
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np
In [2]:
from scipy.interpolate import interp1d
The file trajectory.npz contains 3 Numpy arrays that describe a 2d trajectory of a particle as a function of time:
t which has discrete values of time t[i].x which has values of the x position at those times: x[i] = x(t[i]).x which has values of the y position at those times: y[i] = y(t[i]).Load those arrays into this notebook and save them as variables x, y and t:
In [21]:
"""with np.load('trajectory.npz') as data: #http://docs.scipy.org/doc/numpy/reference/generated/numpy.load.html
t = data['t']
x =data['x']
y =data['x']"""
file=np.load('trajectory.npz')
t=file['t']
x=file['x']
y=file['y']
In [22]:
assert isinstance(x, np.ndarray) and len(x)==40
assert isinstance(y, np.ndarray) and len(y)==40
assert isinstance(t, np.ndarray) and len(t)==40
Use these arrays to create interpolated functions $x(t)$ and $y(t)$. Then use those functions to create the following arrays:
newt which has 200 points between $\{t_{min},t_{max}\}$.newx which has the interpolated values of $x(t)$ at those times.newy which has the interpolated values of $y(t)$ at those times.
In [23]:
xt= interp1d(t,x, kind='cubic')
yt= interp1d(t,y, kind='cubic')
newt= np.linspace(t.min(),t.max(),200)
newx = xt(newt)
newy= yt(newt)
#newx=interp1d(x,newt, kind='cubic')
#newy=interp1d(y,newt, kind='cubic')
In [ ]:
In [24]:
assert newt[0]==t.min()
assert newt[-1]==t.max()
assert len(newt)==200
assert len(newx)==200
assert len(newy)==200
In [ ]:
Make a parametric plot of $\{x(t),y(t)\}$ that shows the interpolated values and the original points:
In [25]:
plt.plot(newx, newy, color='b', label='interpolated')
plt.plot(x, y, color='g',marker='o', linestyle='', label='original');
plt.legend();
plt.xlabel('x')
plt.ylabel('f(x)')
plt.ylim(-.9,1.1)
plt.title('Interpolated Trajectory Data')
Out[25]:
In [26]:
assert True # leave this to grade the trajectory plot
In [ ]:
In [ ]:
In [ ]:
In [ ]: