Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env python3
- import matplotlib.pyplot as plt
- import numpy as np
- from scipy.optimize import curve_fit
- #Data frm `Double M Innovations` <https://www.youtube.com/watch?v=lDm00Ww6qE4>
- data_time = [157, 162, 226, 232, 283, 314, 354, 367, 399, 427, 447, 481, 503, 529, 576, 594]
- data_values = [181, 190, 330, 340, 430, 482, 535, 712, 750, 774, 794, 819, 838, 854, 892, 904]
- time = np.array(data_time) # s
- voltage = np.array(data_values) # V
- time[time > 354.5] += 154 # Video cut
- func = lambda t, K, tau, t0: K * (1 - np.exp(-(t - t0) / tau))
- p0 = [1200, 400, 60]
- p, pcov = curve_fit(func, time, voltage, p0)
- print(f"Estimation: V_max={p[0]:.0f}, tau={p[1]:.0f}, t_0={p[2]:.0f}")
- # Connect takes place at t=125
- func(125, *p) # "empty" capacitor is at around 100V?
- t = np.linspace(90, 900, 1000)
- plt.plot(t, func(t, *p))
- plt.plot(time, voltage, marker="+")
- plt.xlim(0)
- plt.ylim(0)
- plt.show()
Advertisement
Add Comment
Please, Sign In to add comment