diff --git a/compressed_sensing.py b/compressed_sensing.py
index 775c6bb35c9b89bb54390b1a4ec7ab914918d5c8..e3967b1e8de4b75f73348fa0dc6ebc4ee16e38b6 100644
--- a/compressed_sensing.py
+++ b/compressed_sensing.py
@@ -20,6 +20,18 @@ def compute_dct_matrix(n_samples):
     return dct_matrix
 
 
+def compute_differences(recovered_dct, inverse_dct_matrix, sample_values):
+    return sample_values - np.matmul(inverse_dct_matrix, recovered_dct)
+
+
+def loss_e(differences, subset_indices):
+    return np.linalg.norm(differences[subset_indices])
+
+
+def grad_e(differences, dct_matrix, subset_indices):
+    return -2 * np.matmul(dct_matrix[:,subset_indices], differences[subset_indices])
+
+
 if __name__ == "__main__":
     f1 = 697 # Hz
     f2 = 1209 # Hz
@@ -59,3 +71,10 @@ if __name__ == "__main__":
     plt.plot(subset_sample_times, subset_sample_values)
     plt.savefig("fig_d.png")
     plt.close()
+
+    # Part (e)
+    recovered_dct = np.random.normal(0.0, 1.0, (n_samples))
+    differences = compute_differences(recovered_dct, inverse_dct_matrix, sample_values)
+    loss = loss_e(differences, subset_indices)
+    grad = grad_e(differences, dct_matrix, subset_indices)
+    print(grad)