In [3]:
%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np
import scipy.optimize as opt
For this problem you are given a raw dataset in the file decay_osc.npz. This file contains three arrays:
tdata: an array of time valuesydata: an array of y valuesdy: the absolute uncertainties (standard deviations) in yYour job is to fit the following model to this data:
$$ y(t) = A e^{-\lambda t} \cos{\omega t + \delta} $$First, import the data using NumPy and make an appropriately styled error bar plot of the raw data.
In [83]:
# YOUR CODE HERE
data = np.load('decay_osc.npz')
time=data['tdata']
y=data['ydata']
dy=data['dy']
plt.errorbar(time, y, dy,
fmt='.k', ecolor='lightgray')
plt.xlabel('x')
plt.ylabel('y');
plt.plot(time,y)
Out[83]:
In [ ]:
assert True # leave this to grade the data import and raw data plot
Now, using curve_fit to fit this model and determine the estimates and uncertainties for the parameters:
curve_fit to get a good fit.absolute_sigma=True.
In [147]:
# YOUR CODE HERE
def ymodel(A,lamda,w,sigma,time):
return A*np.exp(-lamda*time)*np.cos(w*time)+sigma
z,w=opt.curve_fit(ymodel,time,y,p0=[.1,7,-1,.1],sigma=dy,absolute_sigma=True)
plt.plot(z)
plt.plot(time,y)
Out[147]:
In [126]:
assert True # leave this cell for grading the fit; should include a plot and printout of the parameters+errors
In [ ]: