Andry41

Rotolamento cilindro

Jun 5th, 2020
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 53.29 KB | None | 0 0
  1. # Libreria Santanastasio
  2.  
  3. import matplotlib.pyplot as plt
  4. import numpy as np
  5. from math import log10, floor, sqrt
  6. import scipy as sp
  7. from scipy import stats
  8. from mpl_toolkits.axes_grid1.inset_locator import zoomed_inset_axes
  9. from mpl_toolkits.axes_grid1.inset_locator import mark_inset
  10. #########################################################################
  11. # funzione per arrotondare con un certo numero di cifre significative
  12. #########################################################################
  13. def PrintResult(name,mean,sigma,digits,unit):
  14.     mean = round(mean,digits)
  15.     sigma = round(sigma,digits)
  16.     nu = sigma / mean
  17.     result = (name+" = ({0} +/- {1} ) ".format(mean,sigma)+unit+" [{0:.2f}%]".format(nu*100))
  18.     print (result)
  19.     #return ""
  20.    
  21. #########################################################################
  22. # funzioni per fare il fit lineare
  23. #########################################################################
  24. #
  25. def my_mean(x, w):
  26.     return np.sum( x*w ) / np.sum( w )
  27.  
  28. def my_cov(x, y, w):
  29.     return my_mean(x*y, w) - my_mean(x, w)*my_mean(y, w)
  30.  
  31. def my_var(x, w):
  32.     return my_cov(x, x, w)
  33.  
  34. def my_line(x, m=1, c=0):
  35.     return m*x + c
  36.  
  37. def y_estrapolato(x, m, c, sigma_m, sigma_c, cov_mc):
  38.     y = m*x + c
  39.     uy = np.sqrt(np.power(x, 2)*np.power(sigma_m, 2) +
  40.                    np.power(sigma_c, 2) + 2*x*cov_mc )
  41.     return y, uy
  42.  
  43. def lin_fit(x, y, sd_y, xlabel="x [ux]", ylabel="y [uy]", xm=0., xM=1., ym=0., yM=1.,
  44.             verbose=True, plot=False, setrange=False):
  45.  
  46.     #pesi
  47.     w_y = np.power(sd_y.astype(float), -2)
  48.    
  49.     #m
  50.     m = my_cov(x, y, w_y) / my_var(x, w_y)
  51.     var_m = 1 / ( my_var(x, w_y) * np.sum(w_y) )
  52.    
  53.     #c
  54.     c = my_mean(y, w_y) - my_mean(x, w_y) * m
  55.     var_c = my_mean(x*x, w_y)  / ( my_var(x, w_y) * np.sum(w_y) )
  56.    
  57.     #cov
  58.     cov_mc = - my_mean(x, w_y) / ( my_var(x, w_y) * np.sum(w_y) )
  59.    
  60.     #rho
  61.     rho_mc = cov_mc / ( sqrt(var_m) * sqrt(var_c) )
  62.  
  63.     if (verbose):
  64.        
  65.         print ('m         = ', m.round(4))
  66.         print ('sigma(m)  = ', np.sqrt(var_m).round(4))
  67.         print ('c         = ', c.round(4))
  68.         print ('sigma(c)  = ', np.sqrt(var_c).round(4))
  69.         print ('cov(m, c) = ', cov_mc.round(4))
  70.         print ('rho(m, c) = ', rho_mc.round(4))
  71.        
  72.     if (plot):
  73.        
  74.         # rappresento i dati
  75.         plt.errorbar(x, y, yerr=sd_y, xerr=0, ls='', marker='.',
  76.                      color="black",label='dati')
  77.  
  78.         # costruisco dei punti x su cui valutare la retta del fit              
  79.         xmin = float(np.min(x))
  80.         xmax = float(np.max(x))
  81.         xmin_plot = xmin-.2*(xmax-xmin)
  82.         xmax_plot = xmax+.2*(xmax-xmin)
  83.         if (setrange):
  84.             xmin_plot = xm
  85.             xmax_plot = xM  
  86.         x1 = np.linspace(xmin_plot, xmax_plot, 100)
  87.         y1 = my_line(x1, m, c)
  88.        
  89.         # rappresento la retta del fit
  90.         plt.plot(x1, y1, linestyle='-.', color="green", label='fit')
  91.         plt.xlabel(xlabel)
  92.         plt.ylabel(ylabel)
  93.         plt.title('Fit lineare')
  94.         plt.xlim(xmin_plot,xmax_plot)
  95.         if (setrange):
  96.             plt.ylim(ym,yM)
  97.        
  98.         # rappresento le incertezze sulla retta
  99.         y1_plus_1sigma = y1+y_estrapolato(x1, m, c, np.sqrt(var_m), np.sqrt(var_c), cov_mc)[1]
  100.         y1_minus_1sigma = y1-y_estrapolato(x1, m, c, np.sqrt(var_m), np.sqrt(var_c), cov_mc)[1]        
  101.         plt.plot(x1,y1_plus_1sigma, linestyle='-', color="orange", label=r'fit $\pm 1\sigma$')
  102.         plt.plot(x1,y1_minus_1sigma, linestyle='-', color="orange")
  103.        
  104.         plt.grid()
  105.        
  106.         plt.legend()
  107.        
  108.     return m, np.sqrt(var_m), c, np.sqrt(var_c), cov_mc, rho_mc
  109.  
  110. **Fit Lineare**
  111.  
  112. # plots will be shown inline
  113. %matplotlib inline
  114. import matplotlib.pyplot as plt
  115.  
  116. import numpy
  117. from numpy import sqrt,floor
  118.  
  119. import numpy as np
  120. import scipy as sp
  121. from scipy import stats
  122.  
  123. import pandas as pd
  124. import random
  125. import math
  126. # libreria locale
  127. #import my_lib_santanastasio as my
  128.  
  129. ##NOTA IMPORTANTE: se cambi qualcosa in my_lib_santanastasio
  130. # devi fare Kernel --> Restart prima di rigirare il codice
  131. # altrimenti i cambiamenti non saranno applicati.
  132.  
  133. # set global random seed
  134. random_Gseed = 1112
  135. np.random.seed(random_Gseed)
  136.  
  137. # modello e valori di x
  138. m_true = 3
  139. c_true = 2
  140. sigma_y_true = 2
  141.  
  142. x = np.arange(1,6,0.5) #default
  143. #x = np.arange(1,6,0.25) #N=20
  144. #x = np.arange(3,4,0.1) #var ridotta
  145. #x = np.arange(-1,9,1) #var aumentata
  146. #x = np.arange(-2.25,2.75,0.5) #baricentro x = 0
  147. #x = np.array([1.,1.1,1.2,1.3,1.4,5.1,5.2,5.3,5.4,5.5]) # var aumentata 1
  148.  
  149. ux = np.repeat(0.1,len(x))
  150.  
  151.  
  152. #---------------------
  153.  
  154. y_true = m_true*x + c_true
  155. uy_true = np.repeat(sigma_y_true,len(x))
  156. y = np.random.normal(y_true,uy_true)
  157. uy = uy_true*1
  158.  
  159. print (x)
  160. print (y_true)
  161. print (uy_true)
  162. print (y.round(2))
  163. print (uy)
  164.  
  165. m0, sm0, c0, sc0, cov0, rho0 = lin_fit(x, y, uy, "x [ux]", "y [uy]", 0, 7, 0, 25, plot=True, setrange=True)
  166.  
  167. # nuove y
  168. uy_new = np.sqrt(uy**2+(m0*ux)**2)
  169. m, sm, c, sc, cov, rho = lin_fit(x, y, uy_new, "x [ux]", "y [uy]", 0, 7, 0, 25, plot=True, setrange=True)
  170. #m, sm, c, sc, cov, rho = my.lin_fit(x, y, uy_new, "x [ux]", "y [uy]", -2, 9, -10, 40, plot=True, setrange=True)
  171.  
  172. # Studio dei residui
  173. y_atteso = m*x + c
  174. d = y - y_atteso
  175. d_norm = d / uy_new
  176.  
  177. plt.errorbar(x,d,uy_new,marker='.',linestyle="")
  178. plt.ylabel("Residui $d=y-y_{atteso}$ [uy]")
  179. plt.xlabel("$x$ [ux]")
  180. plt.grid()
  181.  
  182. plt.errorbar(x,d_norm,uy_new/uy_new,marker='.',linestyle="")
  183. plt.ylabel("Residui normalizzati $d/\sigma_y=(y-y_{atteso})/\sigma_y$")
  184. plt.xlabel("$x$ [ux]")
  185. plt.grid()
  186.  
  187. # Incertezze a posteriori
  188. sigmy_post = math.sqrt( np.sum(d**2)/(d.size-2) )
  189. uy_post = np.repeat(sigmy_post,y.size)
  190. print (sigmy_post)
  191.  
  192. # Nuovo fit con incertezze a posteriori sulle y
  193. m1, sm1, c1, sc1, cov1, rho1 = lin_fit(x, y, uy_post, "x [ux]", "y [uy]", 0, 7, 0, 25, plot=True, setrange=True)
  194.  
  195. # Parte 1: Studio della riproducibilità delle misure di velocità angolare ω ed accelerazione angolare α
  196.  
  197.  
  198. # Importo degli array
  199.  
  200. #15°
  201. for i in range(1,6):
  202.   #15 gradi
  203.   exec("df15_{0} = pd.read_csv('Dati 15°/Raw Data{0}.csv')".format(i))
  204.   exec("a15_{0} = []".format(i))
  205.   exec("a15_{0}.append(np.asarray(df15_{0}['Time (s)']))".format(i))
  206.   exec("a15_{0}.append(np.asarray(df15_{0}['Gyroscope y (rad/s)']))".format(i))
  207.  
  208.  
  209.   df15_p = pd.read_csv('Dati 15°/Plane.csv')
  210.   a15_p = []
  211.   a15_p.append(np.asarray(df15_p['t (s)']))
  212.   a15_p.append(np.asarray(df15_p['Inclination (deg)']))
  213.   #20gradi
  214.   exec("df20_{0} = pd.read_csv('Dati 20°/Raw Data{0}.csv')".format(i))
  215.   exec("a20_{0} = []".format(i))
  216.   exec("a20_{0}.append(np.asarray(df20_{0}['Time (s)']))".format(i))
  217.   exec("a20_{0}.append(np.asarray(df20_{0}['Gyroscope y (rad/s)']))".format(i))
  218.   df20_p = pd.read_csv('Dati 20°/Plane.csv')
  219.   a20_p = []
  220.   a20_p.append(np.asarray(df20_p['t (s)']))
  221.   a20_p.append(np.asarray(df20_p['Inclination (deg)']))
  222.   #30gradi
  223.   exec("df30_{0} = pd.read_csv('Dati 30°/Raw Data{0}.csv')".format(i))
  224.   exec("a30_{0} = []".format(i))
  225.   exec("a30_{0}.append(np.asarray(df30_{0}['Time (s)']))".format(i))
  226.   exec("a30_{0}.append(np.asarray(df30_{0}['Gyroscope y (rad/s)']))".format(i))
  227.   df30_p = pd.read_csv('Dati 30°/Plane.csv')
  228.   a30_p = []
  229.   a30_p.append(np.asarray(df30_p['t (s)']))
  230.   a30_p.append(np.asarray(df30_p['Inclination (deg)']))
  231.  
  232. for i in range(1,19):
  233.   #15 gradi
  234.   exec("df25_{0} = pd.read_csv('Dati 25°/Raw Data{0}.csv')".format(i))
  235.   exec("a25_{0} = []".format(i))
  236.   exec("a25_{0}.append(np.asarray(df25_{0}['Time (s)']))".format(i))
  237.   exec("a25_{0}.append(np.asarray(df25_{0}['Gyroscope y (rad/s)']))".format(i))
  238.  
  239. for i in range(0,5):
  240.   exec("df25_p{0} = pd.read_csv('Dati 25°/Plane{0}.csv')".format(i))
  241.   exec("a25_p{0} = []".format(i))
  242.   exec("a25_p{0}.append(np.asarray(df25_p{0}['t (s)']))".format(i))
  243.   exec("a25_p{0}.append(np.asarray(df25_p{0}['Inclination (deg)']))".format(i))
  244. a30_1    
  245.  
  246. # Singolo $\alpha$
  247.  
  248. Grafico omega vs tempo
  249.  
  250. plt.plot(a25_1[0],a25_1[1],label="wy", marker='.', color='green')
  251. plt.xlabel('Tempo[s]')
  252. plt.ylabel('Velocità angolare in y[rad/s]')
  253. plt.grid()
  254. xa = 0.85
  255. xb = 1.35
  256. plt.vlines(xa,-10,40,colors="orange",linestyle="--")
  257. plt.vlines(xb,-10,40,colors="orange",linestyle="--")
  258. plt.legend()
  259. plt.savefig('25deg_wy_vs_t')
  260.  
  261. xnew = a25_1[0][( a25_1[0]>xa)&( a25_1[0]<xb)]
  262. ynew = a25_1[1][(a25_1[0]>xa)&( a25_1[0]<xb)]
  263. #questo sigma serve solo per essere inserito nel codice, è stato scientificamente dimostrato che non ha impatto
  264. #dato che i valori di m e c non cambiano nonstante i sigma messi
  265. sa25_1 = np.repeat(np.std(ynew),len(xnew))
  266.  
  267. $\sigma[y]$ è ignota e supponiamola costante per tutte le y. Lo calcoleremo a posteriori con la formula 14.22 (p.305) delle dispense ricavandoci m e c con verbose=True (questa opzione calcola i coefficienti del fit senza creare il grafico), e inserendo i sigma trovati nel fit
  268.  
  269. #Qui calcoleremo m e c
  270. m, sm, c, sc, cov, rho = lin_fit(xnew, ynew, sa25_1, "tempo [s]", "Vel. angolare $\omega$ [rad/s]", verbose = True, plot=False, setrange=False)
  271.  
  272. #Questa parte del codice applica la formula (applicata solo nel intervallo dove c'è moto)
  273. #Il numeratore:
  274. num = 0
  275. for i in range(0, len(ynew)):
  276.     num += (ynew[i] - m*xnew[i] - c)**2
  277. #E il valore cercato    
  278. sigma1 = np.sqrt(num/(len(ynew)-2))
  279. sigma = []
  280. sigma = np.repeat(sigma1, len(ynew))
  281.  
  282. #Qui graficheremo finalmente il fit lineare
  283. m, sm, c, sc, cov, rho = lin_fit(xnew, ynew, sigma, "tempo [s]", "Vel. angolare $\omega$ [rad/s]", verbose=False, plot=True, setrange=False)
  284.  
  285. # Zoommiamo perché non si vedono le barre d'errore
  286. axins = zoomed_inset_axes(ax, 5, loc=4) # zoom-factor: 2.5, location: upper-left
  287. axins.set_xlim(0.79, 0.81) # apply the x-limits
  288. axins.set_ylim(0.65, 0.69) # apply the y-limits
  289. axins.errorbar(m_x, T2_y, yerr=T2_errorbar, fmt='o', ecolor='red')
  290. plt.plot(xp, (alpha1[0]*xp+c1[0]), label="fit lineare", color="green")
  291. mark_inset(ax, axins, loc1=2, loc2=4, fc="none", ec="0.5")
  292. plt.xticks(visible=False)
  293. plt.grid()
  294.  
  295.  
  296. plt.savefig('Fit lin 25deg_1')
  297.  
  298. #this part creates a list which will be used to make a table on latex
  299. alphai = [[],[], []]
  300. alphai[0].append(m)
  301. alphai[1].append(sm)
  302. #rho is also included because, quoting the manual:'Si noti inoltre come il coefficiente di correlazione non sia un optional, ma faccia parte integrante del
  303. #risultato (vedi anche 14.4 e discussione nel paragrafo 14.3, in particolare punti 8 e 10)'.
  304. alphai[2].append(rho)
  305. print('alpha=',m,'+/-',sm)
  306.  
  307. For a single data set, $\alpha$ is the coefficient of the line, with its associated standard deviation. In other words, $\alpha= m \pm \sigma(m)$.
  308. The expected value of m is: $\frac{MgR}{I_{CM}+MR^2}\cdot sin(\theta)$ where M is the total mass of the system, R is the radius of the cylinder, $I_{CM}$ is the moment of inertia of the cylinder, and is thus of the form: $I_{CM}= m_{cylinder}R^2$.
  309.  
  310. # $\alpha$ per N set di dati
  311.  
  312. Le celle che seguono creano, a partire dei dati delle N misure, una tabella con gli $\alpha$ e una stima di un 'best' alpha a partire dai precedenti.
  313.  
  314. N=2
  315.  
  316. plt.plot(a25_2[0],a25_2[1],label="wy", marker='.', color='green')
  317. plt.xlabel('Tempo[s]')
  318. plt.ylabel('Velocità angolare in y[rad/s]')
  319. plt.grid()
  320. xa = 0.5
  321. xb = 1
  322. plt.vlines(xa,-1,40,colors="orange",linestyle="--")
  323. plt.vlines(xb,-1,40,colors="orange",linestyle="--")
  324. plt.legend()
  325. plt.savefig('25deg_wy_vs_t-2')
  326.  
  327.  
  328. xnew = a25_2[0][( a25_2[0]>xa)&( a25_2[0]<xb)]
  329. ynew = a25_2[1][( a25_2[0]>xa)&( a25_2[0]<xb)]
  330.  
  331. sa25_2 = np.repeat(a25_2[0][1]/(12**0.5),len(xnew))
  332.  
  333. #Qui calcoleremo m e c
  334. m, sm, c, sc, cov, rho = lin_fit(xnew, ynew, sa25_2, "tempo [s]", "Vel. angolare $\omega$ [rad/s]", verbose = True, plot=False, setrange=False)
  335.  
  336. #Questa parte del codice applica la formula (applicata solo nel intervallo dove c'è moto)
  337. #Il numeratore:
  338. num = 0
  339. for i in range(0, len(ynew)):
  340.     num += (ynew[i] - m*xnew[i] - c)**2
  341. #E il valore cercato    
  342. sigma1 = np.sqrt(num/(len(ynew)-2))
  343. sigma = []
  344. sigma = np.repeat(sigma1, len(ynew))
  345.  
  346. #Qui graficheremo finalmente il fit lineare
  347. m, sm, c, sc, cov, rho = lin_fit(xnew, ynew, sigma, "tempo [s]", "Vel. angolare $\omega$ [rad/s]", verbose=False, plot=True, setrange=False)
  348. plt.savefig('Fit lin 25deg_2')
  349.  
  350. #E qui inseriamo i nuovi valori di m e c in alphai per la tabella
  351. alphai[0].append(m)
  352. alphai[1].append(sm)
  353. alphai[2].append(rho)
  354. print('alpha=',m,'+/-',sm)
  355.  
  356. N=3
  357.  
  358. plt.plot(a25_3[0],a25_3[1],label="wy", marker='.', color='green')
  359. plt.xlabel('Tempo[s]')
  360. plt.ylabel('Velocità angolare in y[rad/s]')
  361. plt.grid()
  362. xa = 0.35
  363. xb = 0.82
  364. plt.vlines(xa,-1,40,colors="orange",linestyle="--")
  365. plt.vlines(xb,-1,40,colors="orange",linestyle="--")
  366. plt.legend()
  367. plt.savefig('25deg_wy_vs_t-3')
  368.  
  369.  
  370. xnew = a25_3[0][( a25_3[0]>xa)&( a25_3[0]<xb)]
  371. ynew = a25_3[1][( a25_3[0]>xa)&( a25_3[0]<xb)]
  372.  
  373. sa25_3 = np.repeat(a25_3[0][1]/(12**0.5),len(xnew))
  374.  
  375. #Qui calcoleremo m e c
  376. m, sm, c, sc, cov, rho = lin_fit(xnew, ynew, sa25_3, "tempo [s]", "Vel. angolare $\omega$ [rad/s]", verbose = True, plot=False, setrange=False)
  377.  
  378. #Questa parte del codice applica la formula (applicata solo nel intervallo dove c'è moto)
  379. #Il numeratore:
  380. num = 0
  381. for i in range(0, len(ynew)):
  382.     num += (ynew[i] - m*xnew[i] - c)**2
  383. #E il valore cercato    
  384. sigma1 = np.sqrt(num/(len(ynew)-2))
  385. sigma = []
  386. sigma = np.repeat(sigma1, len(ynew))
  387.  
  388. #Qui graficheremo finalmente il fit lineare
  389. m, sm, c, sc, cov, rho = lin_fit(xnew, ynew, sigma, "tempo [s]", "Vel. angolare $\omega$ [rad/s]", verbose=False, plot=True, setrange=False)
  390. plt.savefig('Fit lin 25deg_3')
  391.  
  392. #E qui inseriamo i nuovi valori di m e c in alphai per la tabella
  393. alphai[0].append(m)
  394. alphai[1].append(sm)
  395. alphai[2].append(rho)
  396. print('alpha=',m,'+/-',sm)
  397.  
  398. N=4
  399.  
  400. plt.plot(a25_4[0],a25_4[1],label="wy", marker='.', color='green')
  401. plt.xlabel('Tempo[s]')
  402. plt.ylabel('Velocità angolare in y[rad/s]')
  403. plt.grid()
  404. xa = 0.75
  405. xb = 1.25
  406. plt.vlines(xa,-1,40,colors="orange",linestyle="--")
  407. plt.vlines(xb,-1,40,colors="orange",linestyle="--")
  408. plt.legend()
  409. plt.savefig('25deg_wy_vs_t-4')
  410.  
  411.  
  412. xnew = a25_4[0][( a25_4[0]>xa)&( a25_4[0]<xb)]
  413. ynew = a25_4[1][( a25_4[0]>xa)&( a25_4[0]<xb)]
  414.  
  415. sa25_4 = np.repeat(a25_4[0][1]/(12**0.5),len(xnew))
  416.  
  417. #Qui calcoleremo m e c
  418. m, sm, c, sc, cov, rho = lin_fit(xnew, ynew, sa25_4, "tempo [s]", "Vel. angolare $\omega$ [rad/s]", verbose = True, plot=False, setrange=False)
  419.  
  420. #Questa parte del codice applica la formula (applicata solo nel intervallo dove c'è moto)
  421. #Il numeratore:
  422. num = 0
  423. for i in range(0, len(ynew)):
  424.     num += (ynew[i] - m*xnew[i] - c)**2
  425. #E il valore cercato    
  426. sigma1 = np.sqrt(num/(len(ynew)-2))
  427. sigma = []
  428. sigma = np.repeat(sigma1, len(ynew))
  429.  
  430. #Qui graficheremo finalmente il fit lineare
  431. m, sm, c, sc, cov, rho = lin_fit(xnew, ynew, sigma, "tempo [s]", "Vel. angolare $\omega$ [rad/s]", verbose=False, plot=True, setrange=False)
  432. plt.savefig('Fit lin 25deg_4')
  433.  
  434. #E qui inseriamo i nuovi valori di m e c in alphai per la tabella
  435. alphai[0].append(m)
  436. alphai[1].append(sm)
  437. alphai[2].append(rho)
  438. print('alpha=',m,'+/-',sm)
  439.  
  440. N = 5
  441.  
  442. plt.plot(a25_5[0],a25_5[1],label="wy", marker='.', color='green')
  443. plt.xlabel('Tempo[s]')
  444. plt.ylabel('Velocità angolare in y[rad/s]')
  445. plt.grid()
  446. xa = 0.35
  447. xb = 0.85
  448. plt.vlines(xa,-1,40,colors="orange",linestyle="--")
  449. plt.vlines(xb,-1,40,colors="orange",linestyle="--")
  450. plt.legend()
  451. plt.savefig('25deg_wy_vs_t-5')
  452.  
  453.  
  454. xnew = a25_5[0][( a25_5[0]>xa)&( a25_5[0]<xb)]
  455. ynew = a25_5[1][( a25_5[0]>xa)&( a25_5[0]<xb)]
  456.  
  457. sa25_5 = np.repeat(a25_5[0][1]/(12**0.5),len(xnew))
  458.  
  459. #Qui calcoleremo m e c
  460. m, sm, c, sc, cov, rho = lin_fit(xnew, ynew, sa25_5, "tempo [s]", "Vel. angolare $\omega$ [rad/s]", verbose = True, plot=False, setrange=False)
  461.  
  462. #Questa parte del codice applica la formula (applicata solo nel intervallo dove c'è moto)
  463. #Il numeratore:
  464. num = 0
  465. for i in range(0, len(ynew)):
  466.     num += (ynew[i] - m*xnew[i] - c)**2
  467. #E il valore cercato    
  468. sigma1 = np.sqrt(num/(len(ynew)-2))
  469. sigma = []
  470. sigma = np.repeat(sigma1, len(ynew))
  471.  
  472. #Qui graficheremo finalmente il fit lineare
  473. m, sm, c, sc, cov, rho = lin_fit(xnew, ynew, sigma, "tempo [s]", "Vel. angolare $\omega$ [rad/s]", verbose=False, plot=True, setrange=False)
  474. plt.savefig('Fit lin 25deg_5')
  475.  
  476. #E qui inseriamo i nuovi valori di m e c in alphai per la tabella
  477. alphai[0].append(m)
  478. alphai[1].append(sm)
  479. alphai[2].append(rho)
  480. print('alpha=',m,'+/-',sm)
  481.  
  482. N = 6
  483.  
  484. plt.plot(a25_6[0],a25_6[1],label="wy", marker='.', color='green')
  485. plt.xlabel('Tempo[s]')
  486. plt.ylabel('Velocità angolare in y[rad/s]')
  487. plt.grid()
  488. xa = 0.65
  489. xb = 1.12
  490. plt.vlines(xa,-1,40,colors="orange",linestyle="--")
  491. plt.vlines(xb,-1,40,colors="orange",linestyle="--")
  492. plt.legend()
  493. plt.savefig('25deg_wy_vs_t-6')
  494.  
  495.  
  496. xnew = a25_6[0][( a25_6[0]>xa)&( a25_6[0]<xb)]
  497. ynew = a25_6[1][( a25_6[0]>xa)&( a25_6[0]<xb)]
  498.  
  499. sa25_6 = np.repeat(a25_6[0][1]/(12**0.5),len(xnew))
  500.  
  501. #Qui calcoleremo m e c
  502. m, sm, c, sc, cov, rho = lin_fit(xnew, ynew, sa25_6, "tempo [s]", "Vel. angolare $\omega$ [rad/s]", verbose = True, plot=False, setrange=False)
  503.  
  504. #Questa parte del codice applica la formula (applicata solo nel intervallo dove c'è moto)
  505. #Il numeratore:
  506. num = 0
  507. for i in range(0, len(ynew)):
  508.     num += (ynew[i] - m*xnew[i] - c)**2
  509. #E il valore cercato    
  510. sigma1 = np.sqrt(num/(len(ynew)-2))
  511. sigma = []
  512. sigma = np.repeat(sigma1, len(ynew))
  513.  
  514. #Qui graficheremo finalmente il fit lineare
  515. m, sm, c, sc, cov, rho = lin_fit(xnew, ynew, sigma, "tempo [s]", "Vel. angolare $\omega$ [rad/s]", verbose=False, plot=True, setrange=False)
  516. plt.savefig('Fit lin 25deg_6')
  517.  
  518. #E qui inseriamo i nuovi valori di m e c in alphai per la tabella
  519. alphai[0].append(m)
  520. alphai[1].append(sm)
  521. alphai[2].append(rho)
  522. print('alpha=',m,'+/-',sm)
  523.  
  524. N = 7
  525.  
  526. plt.plot(a25_7[0],a25_7[1],label="wy", marker='.', color='green')
  527. plt.xlabel('Tempo[s]')
  528. plt.ylabel('Velocità angolare in y[rad/s]')
  529. plt.grid()
  530. xa = 0.32
  531. xb = 0.82
  532. plt.vlines(xa,-1,40,colors="orange",linestyle="--")
  533. plt.vlines(xb,-1,40,colors="orange",linestyle="--")
  534. plt.legend()
  535. plt.savefig('25deg_wy_vs_t-7')
  536.  
  537.  
  538. xnew = a25_7[0][( a25_7[0]>xa)&( a25_7[0]<xb)]
  539. ynew = a25_7[1][( a25_7[0]>xa)&( a25_7[0]<xb)]
  540.  
  541. sa25_7 = np.repeat(a25_7[0][1]/(12**0.5),len(xnew))
  542.  
  543. #Qui calcoleremo m e c
  544. m, sm, c, sc, cov, rho = lin_fit(xnew, ynew, sa25_7, "tempo [s]", "Vel. angolare $\omega$ [rad/s]", verbose = True, plot=False, setrange=False)
  545.  
  546. #Questa parte del codice applica la formula (applicata solo nel intervallo dove c'è moto)
  547. #Il numeratore:
  548. num = 0
  549. for i in range(0, len(ynew)):
  550.     num += (ynew[i] - m*xnew[i] - c)**2
  551. #E il valore cercato    
  552. sigma1 = np.sqrt(num/(len(ynew)-2))
  553. sigma = []
  554. sigma = np.repeat(sigma1, len(ynew))
  555.  
  556. #Qui graficheremo finalmente il fit lineare
  557. m, sm, c, sc, cov, rho = lin_fit(xnew, ynew, sigma, "tempo [s]", "Vel. angolare $\omega$ [rad/s]", verbose=False, plot=True, setrange=False)
  558. plt.savefig('Fit lin 25deg_7')
  559.  
  560. #E qui inseriamo i nuovi valori di m e c in alphai per la tabella
  561. alphai[0].append(m)
  562. alphai[1].append(sm)
  563. alphai[2].append(rho)
  564. print('alpha=',m,'+/-',sm)
  565.  
  566. N = 8
  567.  
  568. plt.plot(a25_8[0],a25_8[1],label="wy", marker='.', color='green')
  569. plt.xlabel('Tempo[s]')
  570. plt.ylabel('Velocità angolare in y[rad/s]')
  571. plt.grid()
  572. xa = 0.32
  573. xb = 0.82
  574. plt.vlines(xa,-1,40,colors="orange",linestyle="--")
  575. plt.vlines(xb,-1,40,colors="orange",linestyle="--")
  576. plt.legend()
  577. plt.savefig('25deg_wy_vs_t-8')
  578.  
  579.  
  580. xnew = a25_8[0][( a25_8[0]>xa)&( a25_8[0]<xb)]
  581. ynew = a25_8[1][( a25_8[0]>xa)&( a25_8[0]<xb)]
  582.  
  583. sa25_8 = np.repeat(a25_8[0][1]/(12**0.5),len(xnew))
  584.  
  585. #Qui calcoleremo m e c
  586. m, sm, c, sc, cov, rho = lin_fit(xnew, ynew, sa25_8, "tempo [s]", "Vel. angolare $\omega$ [rad/s]", verbose = True, plot=False, setrange=False)
  587.  
  588. #Questa parte del codice applica la formula (applicata solo nel intervallo dove c'è moto)
  589. #Il numeratore:
  590. num = 0
  591. for i in range(0, len(ynew)):
  592.     num += (ynew[i] - m*xnew[i] - c)**2
  593. #E il valore cercato    
  594. sigma1 = np.sqrt(num/(len(ynew)-2))
  595. sigma = []
  596. sigma = np.repeat(sigma1, len(ynew))
  597.  
  598. #Qui graficheremo finalmente il fit lineare
  599. m, sm, c, sc, cov, rho = lin_fit(xnew, ynew, sigma, "tempo [s]", "Vel. angolare $\omega$ [rad/s]", verbose=False, plot=True, setrange=False)
  600. plt.savefig('Fit lin 25deg_8')
  601.  
  602. #E qui inseriamo i nuovi valori di m e c in alphai per la tabella
  603. alphai[0].append(m)
  604. alphai[1].append(sm)
  605. alphai[2].append(rho)
  606. print('alpha=',m,'+/-',sm)
  607.  
  608. N = 9
  609.  
  610. plt.plot(a25_9[0],a25_9[1],label="wy", marker='.', color='green')
  611. plt.xlabel('Tempo[s]')
  612. plt.ylabel('Velocità angolare in y[rad/s]')
  613. plt.grid()
  614. xa = 0.9
  615. xb = 1.4
  616. plt.vlines(xa,-1,40,colors="orange",linestyle="--")
  617. plt.vlines(xb,-1,40,colors="orange",linestyle="--")
  618. plt.legend()
  619. plt.savefig('25deg_wy_vs_t-9')
  620.  
  621.  
  622. xnew = a25_9[0][( a25_9[0]>xa)&( a25_9[0]<xb)]
  623. ynew = a25_9[1][( a25_9[0]>xa)&( a25_9[0]<xb)]
  624. sa25_9 = np.repeat(a25_9[0][1]/(12**0.5),len(xnew))
  625.  
  626. #Qui calcoleremo m e c
  627. m, sm, c, sc, cov, rho = lin_fit(xnew, ynew, sa25_9, "tempo [s]", "Vel. angolare $\omega$ [rad/s]", verbose = True, plot=False, setrange=False)
  628.  
  629. #Questa parte del codice applica la formula (applicata solo nel intervallo dove c'è moto)
  630. #Il numeratore:
  631. num = 0
  632. for i in range(0, len(ynew)):
  633.     num += (ynew[i] - m*xnew[i] - c)**2
  634. #E il valore cercato    
  635. sigma1 = np.sqrt(num/(len(ynew)-2))
  636. sigma = []
  637. sigma = np.repeat(sigma1, len(ynew))
  638.  
  639. #Qui graficheremo finalmente il fit lineare
  640. m, sm, c, sc, cov, rho = lin_fit(xnew, ynew, sigma, "tempo [s]", "Vel. angolare $\omega$ [rad/s]", verbose=False, plot=True, setrange=False)
  641. plt.savefig('Fit lin 25deg_9')
  642.  
  643. #E qui inseriamo i nuovi valori di m e c in alphai per la tabella
  644. alphai[0].append(m)
  645. alphai[1].append(sm)
  646. alphai[2].append(rho)
  647. print('alpha=',m,'+/-',sm)
  648.  
  649. N = 10
  650.  
  651. plt.plot(a25_10[0],a25_10[1],label="wy", marker='.', color='green')
  652. plt.xlabel('Tempo[s]')
  653. plt.ylabel('Velocità angolare in y[rad/s]')
  654. plt.grid()
  655. xa = 1.55
  656. xb = 2
  657. plt.vlines(xa,-1,40,colors="orange",linestyle="--")
  658. plt.vlines(xb,-1,40,colors="orange",linestyle="--")
  659. plt.legend()
  660. plt.savefig('25deg_wy_vs_t-10')
  661.  
  662.  
  663. xnew = a25_10[0][( a25_10[0]>xa)&( a25_10[0]<xb)]
  664. ynew = a25_10[1][( a25_10[0]>xa)&( a25_10[0]<xb)]
  665. sa25_10 = np.repeat(a25_10[0][1]/(12**0.5),len(xnew))
  666.  
  667. #Qui calcoleremo m e c
  668. m, sm, c, sc, cov, rho = lin_fit(xnew, ynew, sa25_10, "tempo [s]", "Vel. angolare $\omega$ [rad/s]", verbose = True, plot=False, setrange=False)
  669.  
  670. #Questa parte del codice applica la formula (applicata solo nel intervallo dove c'è moto)
  671. #Il numeratore:
  672. num = 0
  673. for i in range(0, len(ynew)):
  674.     num += (ynew[i] - m*xnew[i] - c)**2
  675. #E il valore cercato    
  676. sigma1 = np.sqrt(num/(len(ynew)-2))
  677. sigma = []
  678. sigma = np.repeat(sigma1, len(ynew))
  679.  
  680. #Qui graficheremo finalmente il fit lineare
  681. m, sm, c, sc, cov, rho = lin_fit(xnew, ynew, sigma, "tempo [s]", "Vel. angolare $\omega$ [rad/s]", verbose=False, plot=True, setrange=False)
  682. plt.savefig('Fit lin 25deg_10')
  683.  
  684. #E qui inseriamo i nuovi valori di m e c in alphai per la tabella
  685. alphai[0].append(m)
  686. alphai[1].append(sm)
  687. alphai[2].append(rho)
  688. print('alpha=',m,'+/-',sm)
  689.  
  690. N = 11
  691.  
  692. plt.plot(a25_11[0],a25_11[1],label="wy", marker='.', color='green')
  693. plt.xlabel('Tempo[s]')
  694. plt.ylabel('Velocità angolare in y[rad/s]')
  695. plt.grid()
  696. xa = 0.62
  697. xb = 1.12
  698. plt.vlines(xa,-1,40,colors="orange",linestyle="--")
  699. plt.vlines(xb,-1,40,colors="orange",linestyle="--")
  700. plt.legend()
  701. plt.savefig('25deg_wy_vs_t-11')
  702.  
  703.  
  704. xnew = a25_11[0][( a25_11[0]>xa)&( a25_11[0]<xb)]
  705. ynew = a25_11[1][( a25_11[0]>xa)&( a25_11[0]<xb)]
  706. sa25_11 = np.repeat(a25_11[0][1]/(12**0.5),len(xnew))
  707.  
  708. #Qui calcoleremo m e c
  709. m, sm, c, sc, cov, rho = lin_fit(xnew, ynew, sa25_11, "tempo [s]", "Vel. angolare $\omega$ [rad/s]", verbose = True, plot=False, setrange=False)
  710.  
  711. #Questa parte del codice applica la formula (applicata solo nel intervallo dove c'è moto)
  712. #Il numeratore:
  713. num = 0
  714. for i in range(0, len(ynew)):
  715.     num += (ynew[i] - m*xnew[i] - c)**2
  716. #E il valore cercato    
  717. sigma1 = np.sqrt(num/(len(ynew)-2))
  718. sigma = []
  719. sigma = np.repeat(sigma1, len(ynew))
  720.  
  721. #Qui graficheremo finalmente il fit lineare
  722. m, sm, c, sc, cov, rho = lin_fit(xnew, ynew, sigma, "tempo [s]", "Vel. angolare $\omega$ [rad/s]", verbose=False, plot=True, setrange=False)
  723. plt.savefig('Fit lin 25deg_11')
  724.  
  725. #E qui inseriamo i nuovi valori di m e c in alphai per la tabella
  726. alphai[0].append(m)
  727. alphai[1].append(sm)
  728. alphai[2].append(rho)
  729. print('alpha=',m,'+/-',sm)
  730.  
  731. N = 12
  732.  
  733. plt.plot(a25_12[0],a25_12[1],label="wy", marker='.', color='green')
  734. plt.xlabel('Tempo[s]')
  735. plt.ylabel('Velocità angolare in y[rad/s]')
  736. plt.grid()
  737. xa = 1.15
  738. xb = 1.67
  739. plt.vlines(xa,-1,40,colors="orange",linestyle="--")
  740. plt.vlines(xb,-1,40,colors="orange",linestyle="--")
  741. plt.legend()
  742. plt.savefig('25deg_wy_vs_t-12')
  743.  
  744.  
  745. xnew = a25_12[0][( a25_12[0]>xa)&( a25_12[0]<xb)]
  746. ynew = a25_12[1][( a25_12[0]>xa)&( a25_12[0]<xb)]
  747. sa25_12 = np.repeat(a25_12[0][1]/(12**0.5),len(xnew))
  748.  
  749. #Qui calcoleremo m e c
  750. m, sm, c, sc, cov, rho = lin_fit(xnew, ynew, sa25_12, "tempo [s]", "Vel. angolare $\omega$ [rad/s]", verbose = True, plot=False, setrange=False)
  751.  
  752. #Questa parte del codice applica la formula (applicata solo nel intervallo dove c'è moto)
  753. #Il numeratore:
  754. num = 0
  755. for i in range(0, len(ynew)):
  756.     num += (ynew[i] - m*xnew[i] - c)**2
  757. #E il valore cercato    
  758. sigma1 = np.sqrt(num/(len(ynew)-2))
  759. sigma = []
  760. sigma = np.repeat(sigma1, len(ynew))
  761.  
  762. #Qui graficheremo finalmente il fit lineare
  763. m, sm, c, sc, cov, rho = lin_fit(xnew, ynew, sigma, "tempo [s]", "Vel. angolare $\omega$ [rad/s]", verbose=False, plot=True, setrange=False)
  764. plt.savefig('Fit lin 25deg_12')
  765.  
  766. #E qui inseriamo i nuovi valori di m e c in alphai per la tabella
  767. alphai[0].append(m)
  768. alphai[1].append(sm)
  769. alphai[2].append(rho)
  770. print('alpha=',m,'+/-',sm)
  771.  
  772. N = 13
  773.  
  774. plt.plot(a25_13[0],a25_13[1],label="wy", marker='.', color='green')
  775. plt.xlabel('Tempo[s]')
  776. plt.ylabel('Velocità angolare in y[rad/s]')
  777. plt.grid()
  778. xa = 0.78
  779. xb = 1.25
  780. plt.vlines(xa,-1,40,colors="orange",linestyle="--")
  781. plt.vlines(xb,-1,40,colors="orange",linestyle="--")
  782. plt.legend()
  783. plt.savefig('25deg_wy_vs_t-13')
  784.  
  785.  
  786. xnew = a25_13[0][( a25_13[0]>xa)&( a25_13[0]<xb)]
  787. ynew = a25_13[1][( a25_13[0]>xa)&( a25_13[0]<xb)]
  788. sa25_13 = np.repeat(a25_13[0][1]/(12**0.5),len(xnew))
  789.  
  790. #Qui calcoleremo m e c
  791. m, sm, c, sc, cov, rho = lin_fit(xnew, ynew, sa25_13, "tempo [s]", "Vel. angolare $\omega$ [rad/s]", verbose = True, plot=False, setrange=False)
  792.  
  793. #Questa parte del codice applica la formula (applicata solo nel intervallo dove c'è moto)
  794. #Il numeratore:
  795. num = 0
  796. for i in range(0, len(ynew)):
  797.     num += (ynew[i] - m*xnew[i] - c)**2
  798. #E il valore cercato    
  799. sigma1 = np.sqrt(num/(len(ynew)-2))
  800. sigma = []
  801. sigma = np.repeat(sigma1, len(ynew))
  802.  
  803. #Qui graficheremo finalmente il fit lineare
  804. m, sm, c, sc, cov, rho = lin_fit(xnew, ynew, sigma, "tempo [s]", "Vel. angolare $\omega$ [rad/s]", verbose=False, plot=True, setrange=False)
  805. plt.savefig('Fit lin 25deg_13')
  806.  
  807. #E qui inseriamo i nuovi valori di m e c in alphai per la tabella
  808. alphai[0].append(m)
  809. alphai[1].append(sm)
  810. alphai[2].append(rho)
  811. print('alpha=',m,'+/-',sm)
  812.  
  813. N = 14
  814.  
  815. plt.plot(a25_14[0],a25_14[1],label="wy", marker='.', color='green')
  816. plt.xlabel('Tempo[s]')
  817. plt.ylabel('Velocità angolare in y[rad/s]')
  818. plt.grid()
  819. xa = 0.35
  820. xb = 0.82
  821. plt.vlines(xa,-1,40,colors="orange",linestyle="--")
  822. plt.vlines(xb,-1,40,colors="orange",linestyle="--")
  823. plt.legend()
  824. plt.savefig('25deg_wy_vs_t-14')
  825.  
  826.  
  827. xnew = a25_14[0][( a25_14[0]>xa)&( a25_14[0]<xb)]
  828. ynew = a25_14[1][( a25_14[0]>xa)&( a25_14[0]<xb)]
  829. sa25_14 = np.repeat(a25_14[0][1]/(12**0.5),len(xnew))
  830.  
  831. #Qui calcoleremo m e c
  832. m, sm, c, sc, cov, rho = lin_fit(xnew, ynew, sa25_14, "tempo [s]", "Vel. angolare $\omega$ [rad/s]", verbose = True, plot=False, setrange=False)
  833.  
  834. #Questa parte del codice applica la formula (applicata solo nel intervallo dove c'è moto)
  835. #Il numeratore:
  836. num = 0
  837. for i in range(0, len(ynew)):
  838.     num += (ynew[i] - m*xnew[i] - c)**2
  839. #E il valore cercato    
  840. sigma1 = np.sqrt(num/(len(ynew)-2))
  841. sigma = []
  842. sigma = np.repeat(sigma1, len(ynew))
  843.  
  844. #Qui graficheremo finalmente il fit lineare
  845. m, sm, c, sc, cov, rho = lin_fit(xnew, ynew, sigma, "tempo [s]", "Vel. angolare $\omega$ [rad/s]", verbose=False, plot=True, setrange=False)
  846. plt.savefig('Fit lin 25deg_14')
  847.  
  848. #E qui inseriamo i nuovi valori di m e c in alphai per la tabella
  849. alphai[0].append(m)
  850. alphai[1].append(sm)
  851. alphai[2].append(rho)
  852. print('alpha=',m,'+/-',sm)
  853.  
  854. N = 15
  855.  
  856. plt.plot(a25_15[0],a25_15[1],label="wy", marker='.', color='green')
  857. plt.xlabel('Tempo[s]')
  858. plt.ylabel('Velocità angolare in y[rad/s]')
  859. plt.grid()
  860. xa = 0.425
  861. xb = 0.925
  862. plt.vlines(xa,-1,40,colors="orange",linestyle="--")
  863. plt.vlines(xb,-1,40,colors="orange",linestyle="--")
  864. plt.legend()
  865. plt.savefig('25deg_wy_vs_t-15')
  866.  
  867.  
  868. xnew = a25_15[0][( a25_15[0]>xa)&( a25_15[0]<xb)]
  869. ynew = a25_15[1][( a25_15[0]>xa)&( a25_15[0]<xb)]
  870. sa25_15 = np.repeat(a25_15[0][1]/(12**0.5),len(xnew))
  871.  
  872. #Qui calcoleremo m e c
  873. m, sm, c, sc, cov, rho = lin_fit(xnew, ynew, sa25_15, "tempo [s]", "Vel. angolare $\omega$ [rad/s]", verbose = True, plot=False, setrange=False)
  874.  
  875. #Questa parte del codice applica la formula (applicata solo nel intervallo dove c'è moto)
  876. #Il numeratore:
  877. num = 0
  878. for i in range(0, len(ynew)):
  879.     num += (ynew[i] - m*xnew[i] - c)**2
  880. #E il valore cercato    
  881. sigma1 = np.sqrt(num/(len(ynew)-2))
  882. sigma = []
  883. sigma = np.repeat(sigma1, len(ynew))
  884.  
  885. #Qui graficheremo finalmente il fit lineare
  886. m, sm, c, sc, cov, rho = lin_fit(xnew, ynew, sigma, "tempo [s]", "Vel. angolare $\omega$ [rad/s]", verbose=False, plot=True, setrange=False)
  887. plt.savefig('Fit lin 25deg_15')
  888.  
  889. #E qui inseriamo i nuovi valori di m e c in alphai per la tabella
  890. alphai[0].append(m)
  891. alphai[1].append(sm)
  892. alphai[2].append(rho)
  893. print('alpha=',m,'+/-',sm)
  894.  
  895. N = 16
  896.  
  897. plt.plot(a25_16[0],a25_16[1],label="wy", marker='.', color='green')
  898. plt.xlabel('Tempo[s]')
  899. plt.ylabel('Velocità angolare in y[rad/s]')
  900. plt.grid()
  901. xa = 0.25
  902. xb = 0.75
  903. plt.vlines(xa,-1,40,colors="orange",linestyle="--")
  904. plt.vlines(xb,-1,40,colors="orange",linestyle="--")
  905. plt.legend()
  906. plt.savefig('25deg_wy_vs_t-16')
  907.  
  908.  
  909. xnew = a25_16[0][( a25_16[0]>xa)&( a25_16[0]<xb)]
  910. ynew = a25_16[1][( a25_16[0]>xa)&( a25_16[0]<xb)]
  911. sa25_16 = np.repeat(a25_16[0][1]/(12**0.5),len(xnew))
  912.  
  913. #Qui calcoleremo m e c
  914. m, sm, c, sc, cov, rho = lin_fit(xnew, ynew, sa25_16, "tempo [s]", "Vel. angolare $\omega$ [rad/s]", verbose = True, plot=False, setrange=False)
  915.  
  916. #Questa parte del codice applica la formula (applicata solo nel intervallo dove c'è moto)
  917. #Il numeratore:
  918. num = 0
  919. for i in range(0, len(ynew)):
  920.     num += (ynew[i] - m*xnew[i] - c)**2
  921. #E il valore cercato    
  922. sigma1 = np.sqrt(num/(len(ynew)-2))
  923. sigma = []
  924. sigma = np.repeat(sigma1, len(ynew))
  925.  
  926. #Qui graficheremo finalmente il fit lineare
  927. m, sm, c, sc, cov, rho = lin_fit(xnew, ynew, sigma, "tempo [s]", "Vel. angolare $\omega$ [rad/s]", verbose=False, plot=True, setrange=False)
  928. plt.savefig('Fit lin 25deg_16')
  929.  
  930. #E qui inseriamo i nuovi valori di m e c in alphai per la tabella
  931. alphai[0].append(m)
  932. alphai[1].append(sm)
  933. alphai[2].append(rho)
  934. print('alpha=',m,'+/-',sm)
  935.  
  936. N = 17
  937.  
  938. plt.plot(a25_17[0],a25_17[1],label="wy", marker='.', color='green')
  939. plt.xlabel('Tempo[s]')
  940. plt.ylabel('Velocità angolare in y[rad/s]')
  941. plt.grid()
  942. xa = 1
  943. xb = 1.5
  944. plt.vlines(xa,-1,40,colors="orange",linestyle="--")
  945. plt.vlines(xb,-1,40,colors="orange",linestyle="--")
  946. plt.legend()
  947. plt.savefig('25deg_wy_vs_t-17')
  948.  
  949.  
  950. xnew = a25_17[0][( a25_17[0]>xa)&( a25_17[0]<xb)]
  951. ynew = a25_17[1][( a25_17[0]>xa)&( a25_17[0]<xb)]
  952. sa25_17 = np.repeat(a25_17[0][1]/(12**0.5),len(xnew))
  953.  
  954. #Qui calcoleremo m e c
  955. m, sm, c, sc, cov, rho = lin_fit(xnew, ynew, sa25_17, "tempo [s]", "Vel. angolare $\omega$ [rad/s]", verbose = True, plot=False, setrange=False)
  956.  
  957. #Questa parte del codice applica la formula (applicata solo nel intervallo dove c'è moto)
  958. #Il numeratore:
  959. num = 0
  960. for i in range(0, len(ynew)):
  961.     num += (ynew[i] - m*xnew[i] - c)**2
  962. #E il valore cercato    
  963. sigma1 = np.sqrt(num/(len(ynew)-2))
  964. sigma = []
  965. sigma = np.repeat(sigma1, len(ynew))
  966.  
  967. #Qui graficheremo finalmente il fit lineare
  968. m, sm, c, sc, cov, rho = lin_fit(xnew, ynew, sigma, "tempo [s]", "Vel. angolare $\omega$ [rad/s]", verbose=False, plot=True, setrange=False)
  969. plt.savefig('Fit lin 25deg_17')
  970.  
  971. #E qui inseriamo i nuovi valori di m e c in alphai per la tabella
  972. alphai[0].append(m)
  973. alphai[1].append(sm)
  974. alphai[2].append(rho)
  975. print('alpha=',m,'+/-',sm)
  976.  
  977. N = 18
  978.  
  979. plt.plot(a25_18[0],a25_18[1],label="wy", marker='.', color='green')
  980. plt.xlabel('Tempo[s]')
  981. plt.ylabel('Velocità angolare in y[rad/s]')
  982. plt.grid()
  983. xa = 0.36
  984. xb = 0.86
  985. plt.vlines(xa,-1,40,colors="orange",linestyle="--")
  986. plt.vlines(xb,-1,40,colors="orange",linestyle="--")
  987. plt.legend()
  988. plt.savefig('25deg_wy_vs_t-18')
  989.  
  990.  
  991. xnew = a25_18[0][( a25_18[0]>xa)&( a25_18[0]<xb)]
  992. ynew = a25_18[1][( a25_18[0]>xa)&( a25_18[0]<xb)]
  993. sa25_18 = np.repeat(a25_18[0][1]/(12**0.5),len(xnew))
  994.  
  995. #Qui calcoleremo m e c
  996. m, sm, c, sc, cov, rho = lin_fit(xnew, ynew, sa25_18, "tempo [s]", "Vel. angolare $\omega$ [rad/s]", verbose = True, plot=False, setrange=False)
  997.  
  998. #Questa parte del codice applica la formula (applicata solo nel intervallo dove c'è moto)
  999. #Il numeratore:
  1000. num = 0
  1001. for i in range(0, len(ynew)):
  1002.     num += (ynew[i] - m*xnew[i] - c)**2
  1003. #E il valore cercato    
  1004. sigma1 = np.sqrt(num/(len(ynew)-2))
  1005. sigma = []
  1006. sigma = np.repeat(sigma1, len(ynew))
  1007.  
  1008. #Qui graficheremo finalmente il fit lineare
  1009. m, sm, c, sc, cov, rho = lin_fit(xnew, ynew, sigma, "tempo [s]", "Vel. angolare $\omega$ [rad/s]", verbose=False, plot=True, setrange=False)
  1010. plt.savefig('Fit lin 25deg_18')
  1011.  
  1012. #E qui inseriamo i nuovi valori di m e c in alphai per la tabella
  1013. alphai[0].append(m)
  1014. alphai[1].append(sm)
  1015. alphai[2].append(rho)
  1016. print('alpha=',m,'+/-',sm)
  1017.  
  1018. # Tabella degli $\alpha$
  1019.  
  1020. #Prints the data in a latex-format tabular to copy and paste
  1021. df = pd.DataFrame( {'alpha': alphai[0]
  1022.                    ,'sigma(alpha)': alphai[1]
  1023.                    ,'rho': alphai[2]}
  1024.                   )
  1025.  
  1026. print(df.to_latex(index=False,formatters={'alphai[0]': '{:.2f}'.format,
  1027.                                            'alphai[1]': '{:.2f}'.format,
  1028.                                               'alphai[2]': '{:.2f}'.format}
  1029.                   ))
  1030.  
  1031. # $\alpha_{madre di tutti i fottuti alfa}$
  1032.  
  1033. How the fuck do I calculate this. There you go: formule 13.18 e 13.19 (capitolo 13, p.281):
  1034. $\alpha_{mother} \equiv E[\alpha] = \frac{\sum_i \alpha_i/\sigma_i^2}{\sum_i \sigma_i^2}$
  1035. e
  1036. $1/\sigma_{mother}^2 \equiv 1/\sigma_{\alpha}^2 = \frac{1}{\sum_i \sigma_i^2}$
  1037.  
  1038. sum_a = 0
  1039. sum_s = 0
  1040. for i in range(0,19):
  1041.     sum_a += alphai[0][i]*(alphai[1][i]**2)
  1042.     sum_s += alphai[1][i]**2
  1043. alpha_mother = sum_a/sum_s
  1044. sigma_mother = np.sqrt(sum_s)
  1045. print('alpha_m=', alpha_mother,'+/-', sigma_mother)
  1046.  
  1047. # Parte 2: Misura dell’accelerazione di gravità
  1048.  
  1049.  
  1050. # Import of data 2: Electric boogaloo
  1051.  
  1052. # Misura di $\alpha$ per fit lineare
  1053.  
  1054. **Important to note that while it absolutely isn't required, I did the graphs. In fact it would be better if I only showed the results**
  1055.  
  1056. ## 15°
  1057.  
  1058. N = 1
  1059.  
  1060. plt.plot(a15_1[0],a15_1[1],label="wy", marker='.', color='green')
  1061. plt.xlabel('Tempo[s]')
  1062. plt.ylabel('Velocità angolare in y[rad/s]')
  1063. plt.grid()
  1064. xa = 0.28
  1065. xb = 1.05
  1066. plt.vlines(xa,-10,40,colors="orange",linestyle="--")
  1067. plt.vlines(xb,-10,40,colors="orange",linestyle="--")
  1068. plt.legend()
  1069. plt.savefig('15deg_wy_vs_t')
  1070.  
  1071. xnew = a15_1[0][( a15_1[0]>xa)&( a15_1[0]<xb)]
  1072. ynew = a15_1[1][(a15_1[0]>xa)&( a15_1[0]<xb)]
  1073. #questo sigma serve solo per essere inserito nel codice, è stato scientificamente dimostrato che non ha impatto
  1074. #dato che i valori di m e c non cambiano nonstante i sigma messi
  1075. sa15_1 = np.repeat(np.std(ynew),len(xnew))
  1076.  
  1077. #Qui calcoleremo m e c
  1078. m, sm, c, sc, cov, rho = lin_fit(xnew, ynew, sa15_1, "tempo [s]", "Vel. angolare $\omega$ [rad/s]", verbose = True, plot=False, setrange=False)
  1079.  
  1080. #Questa parte del codice applica la formula (applicata solo nel intervallo dove c'è moto)
  1081. #Il numeratore:
  1082. num = 0
  1083. for i in range(0, len(ynew)):
  1084.     num += (ynew[i] - m*xnew[i] - c)**2
  1085. #E il valore cercato    
  1086. sigma1 = np.sqrt(num/(len(ynew)-2))
  1087. sigma = []
  1088. sigma = np.repeat(sigma1, len(ynew))
  1089.  
  1090. #Qui graficheremo finalmente il fit lineare
  1091. m, sm, c, sc, cov, rho = lin_fit(xnew, ynew, sigma, "tempo [s]", "Vel. angolare $\omega$ [rad/s]", verbose=False, plot=True, setrange=False)
  1092. plt.savefig('Fit lin 15deg_1')
  1093.  
  1094. alpha15 = [[],[],[]]
  1095. #E qui inseriamo i nuovi valori di m e c in alphai per la tabella
  1096. alpha15[0].append(m)
  1097. alpha15[1].append(sm)
  1098. alpha15[2].append(rho)
  1099. print('alpha=',m,'+/-',sm)
  1100.  
  1101. N = 2
  1102.  
  1103. plt.plot(a15_2[0],a15_2[1],label="wy", marker='.', color='green')
  1104. plt.xlabel('Tempo[s]')
  1105. plt.ylabel('Velocità angolare in y[rad/s]')
  1106. plt.grid()
  1107. xa = 0.28
  1108. xb = 1.05
  1109. plt.vlines(xa,-10,40,colors="orange",linestyle="--")
  1110. plt.vlines(xb,-10,40,colors="orange",linestyle="--")
  1111. plt.legend()
  1112. plt.savefig('15deg_wy_vs_t2')
  1113.  
  1114. xnew = a15_2[0][( a15_2[0]>xa)&( a15_2[0]<xb)]
  1115. ynew = a15_2[1][(a15_2[0]>xa)&( a15_2[0]<xb)]
  1116. #questo sigma serve solo per essere inserito nel codice, è stato scientificamente dimostrato che non ha impatto
  1117. #dato che i valori di m e c non cambiano nonstante i sigma messi
  1118. sa15_2 = np.repeat(np.std(ynew),len(xnew))
  1119.  
  1120. #Qui calcoleremo m e c
  1121. m, sm, c, sc, cov, rho = lin_fit(xnew, ynew, sa15_2, "tempo [s]", "Vel. angolare $\omega$ [rad/s]", verbose = True, plot=False, setrange=False)
  1122.  
  1123. #Questa parte del codice applica la formula (applicata solo nel intervallo dove c'è moto)
  1124. #Il numeratore:
  1125. num = 0
  1126. for i in range(0, len(ynew)):
  1127.     num += (ynew[i] - m*xnew[i] - c)**2
  1128. #E il valore cercato    
  1129. sigma1 = np.sqrt(num/(len(ynew)-2))
  1130. sigma = []
  1131. sigma = np.repeat(sigma1, len(ynew))
  1132.  
  1133. #Qui graficheremo finalmente il fit lineare
  1134. m, sm, c, sc, cov, rho = lin_fit(xnew, ynew, sigma, "tempo [s]", "Vel. angolare $\omega$ [rad/s]", verbose=False, plot=True, setrange=False)
  1135. plt.savefig('Fit lin 15deg_2')
  1136.  
  1137. #E qui inseriamo i nuovi valori di m e c in alphai per la tabella
  1138. alpha15[0].append(m)
  1139. alpha15[1].append(sm)
  1140. alpha15[2].append(rho)
  1141. print('alpha=',m,'+/-',sm)
  1142.  
  1143. N = 3
  1144.  
  1145. plt.plot(a15_3[0],a15_3[1],label="wy", marker='.', color='green')
  1146. plt.xlabel('Tempo[s]')
  1147. plt.ylabel('Velocità angolare in y[rad/s]')
  1148. plt.grid()
  1149. xa = 0.34
  1150. xb = 1.05
  1151. plt.vlines(xa,-10,40,colors="orange",linestyle="--")
  1152. plt.vlines(xb,-10,40,colors="orange",linestyle="--")
  1153. plt.legend()
  1154. plt.savefig('15deg_wy_vs_t3')
  1155.  
  1156. xnew = a15_3[0][( a15_3[0]>xa)&( a15_3[0]<xb)]
  1157. ynew = a15_3[1][(a15_3[0]>xa)&( a15_3[0]<xb)]
  1158. #questo sigma serve solo per essere inserito nel codice, è stato scientificamente dimostrato che non ha impatto
  1159. #dato che i valori di m e c non cambiano nonstante i sigma messi
  1160. sa15_3 = np.repeat(np.std(ynew),len(xnew))
  1161.  
  1162. #Qui calcoleremo m e c
  1163. m, sm, c, sc, cov, rho = lin_fit(xnew, ynew, sa15_3, "tempo [s]", "Vel. angolare $\omega$ [rad/s]", verbose = True, plot=False, setrange=False)
  1164.  
  1165. #Questa parte del codice applica la formula (applicata solo nel intervallo dove c'è moto)
  1166. #Il numeratore:
  1167. num = 0
  1168. for i in range(0, len(ynew)):
  1169.     num += (ynew[i] - m*xnew[i] - c)**2
  1170. #E il valore cercato    
  1171. sigma1 = np.sqrt(num/(len(ynew)-2))
  1172. sigma = []
  1173. sigma = np.repeat(sigma1, len(ynew))
  1174.  
  1175. #Qui graficheremo finalmente il fit lineare
  1176. m, sm, c, sc, cov, rho = lin_fit(xnew, ynew, sigma, "tempo [s]", "Vel. angolare $\omega$ [rad/s]", verbose=False, plot=True, setrange=False)
  1177. plt.savefig('Fit lin 15deg_3')
  1178.  
  1179. #E qui inseriamo i nuovi valori di m e c in alphai per la tabella
  1180. alpha15[0].append(m)
  1181. alpha15[1].append(sm)
  1182. alpha15[2].append(rho)
  1183. print('alpha=',m,'+/-',sm)
  1184.  
  1185. N = 4
  1186.  
  1187. plt.plot(a15_4[0],a15_4[1],label="wy", marker='.', color='green')
  1188. plt.xlabel('Tempo[s]')
  1189. plt.ylabel('Velocità angolare in y[rad/s]')
  1190. plt.grid()
  1191. xa = 1.97
  1192. xb = 2.7
  1193. plt.vlines(xa,-10,40,colors="orange",linestyle="--")
  1194. plt.vlines(xb,-10,40,colors="orange",linestyle="--")
  1195. plt.legend()
  1196. plt.savefig('15deg_wy_vs_t4')
  1197.  
  1198. xnew = a15_4[0][( a15_4[0]>xa)&( a15_4[0]<xb)]
  1199. ynew = a15_4[1][(a15_4[0]>xa)&( a15_4[0]<xb)]
  1200. #questo sigma serve solo per essere inserito nel codice, è stato scientificamente dimostrato che non ha impatto
  1201. #dato che i valori di m e c non cambiano nonstante i sigma messi
  1202. sa15_3 = np.repeat(np.std(ynew),len(xnew))
  1203.  
  1204. #Qui calcoleremo m e c
  1205. m, sm, c, sc, cov, rho = lin_fit(xnew, ynew, sa15_3, "tempo [s]", "Vel. angolare $\omega$ [rad/s]", verbose = True, plot=False, setrange=False)
  1206.  
  1207. #Questa parte del codice applica la formula (applicata solo nel intervallo dove c'è moto)
  1208. #Il numeratore:
  1209. num = 0
  1210. for i in range(0, len(ynew)):
  1211.     num += (ynew[i] - m*xnew[i] - c)**2
  1212. #E il valore cercato    
  1213. sigma1 = np.sqrt(num/(len(ynew)-2))
  1214. sigma = []
  1215. sigma = np.repeat(sigma1, len(ynew))
  1216.  
  1217. #Qui graficheremo finalmente il fit lineare
  1218. m, sm, c, sc, cov, rho = lin_fit(xnew, ynew, sigma, "tempo [s]", "Vel. angolare $\omega$ [rad/s]", verbose=False, plot=True, setrange=False)
  1219. plt.savefig('Fit lin 15deg_4')
  1220.  
  1221. #E qui inseriamo i nuovi valori di m e c in alphai per la tabella
  1222. alpha15[0].append(m)
  1223. alpha15[1].append(sm)
  1224. alpha15[2].append(rho)
  1225. print('alpha=',m,'+/-',sm)
  1226.  
  1227. N = 5
  1228.  
  1229. plt.plot(a15_5[0],a15_5[1],label="wy", marker='.', color='green')
  1230. plt.xlabel('Tempo[s]')
  1231. plt.ylabel('Velocità angolare in y[rad/s]')
  1232. plt.grid()
  1233. xa = 0.55
  1234. xb = 1.25
  1235. plt.vlines(xa,-10,40,colors="orange",linestyle="--")
  1236. plt.vlines(xb,-10,40,colors="orange",linestyle="--")
  1237. plt.legend()
  1238. plt.savefig('15deg_wy_vs_t5')
  1239.  
  1240. xnew = a15_5[0][( a15_5[0]>xa)&( a15_5[0]<xb)]
  1241. ynew = a15_5[1][(a15_5[0]>xa)&( a15_5[0]<xb)]
  1242. #questo sigma serve solo per essere inserito nel codice, è stato scientificamente dimostrato che non ha impatto
  1243. #dato che i valori di m e c non cambiano nonstante i sigma messi
  1244. sa15_3 = np.repeat(np.std(ynew),len(xnew))
  1245.  
  1246. #Qui calcoleremo m e c
  1247. m, sm, c, sc, cov, rho = lin_fit(xnew, ynew, sa15_3, "tempo [s]", "Vel. angolare $\omega$ [rad/s]", verbose = True, plot=False, setrange=False)
  1248.  
  1249. #Questa parte del codice applica la formula (applicata solo nel intervallo dove c'è moto)
  1250. #Il numeratore:
  1251. num = 0
  1252. for i in range(0, len(ynew)):
  1253.     num += (ynew[i] - m*xnew[i] - c)**2
  1254. #E il valore cercato    
  1255. sigma1 = np.sqrt(num/(len(ynew)-2))
  1256. sigma = []
  1257. sigma = np.repeat(sigma1, len(ynew))
  1258.  
  1259. #Qui graficheremo finalmente il fit lineare
  1260. m, sm, c, sc, cov, rho = lin_fit(xnew, ynew, sigma, "tempo [s]", "Vel. angolare $\omega$ [rad/s]", verbose=False, plot=True, setrange=False)
  1261. plt.savefig('Fit lin 15deg_5')
  1262.  
  1263. #E qui inseriamo i nuovi valori di m e c in alphai per la tabella
  1264. alpha15[0].append(m)
  1265. alpha15[1].append(sm)
  1266. alpha15[2].append(rho)
  1267. print('alpha=',m,'+/-',sm)
  1268.  
  1269. #Prints the data in a latex-format tabular to copy and paste
  1270. df = pd.DataFrame( {'alpha': alpha15[0]
  1271.                    ,'sigma(alpha)': alpha15[1]
  1272.                    ,'rho': alpha15[2]}
  1273.                   )
  1274.  
  1275. print(df.to_latex(index=False,formatters={'alpha15[0]': '{:.2f}'.format,
  1276.                                            'alpha15[1]': '{:.2f}'.format,
  1277.                                               'alpha15[2]': '{:.2f}'.format}
  1278.                   ))
  1279.  
  1280. sum_a = 0
  1281. sum_s = 0
  1282. for i in range(0,6):
  1283.     sum_a += alphai[0][i]*(alphai[1][i]**2)
  1284.     sum_s += alphai[1][i]**2
  1285. alpha_mother = sum_a/sum_s
  1286. sigma_mother = np.sqrt(sum_s)
  1287. print('alpha15_m=', alpha_mother,'+/-', sigma_mother)
  1288.  
  1289. ## 20°
  1290.  
  1291. plt.plot(a20_1[0],a20_1[1],label="wy", marker='.', color='green')
  1292. plt.xlabel('Tempo[s]')
  1293. plt.ylabel('Velocità angolare in y[rad/s]')
  1294. plt.grid()
  1295. xa = 0.38
  1296. xb = 1.02
  1297. plt.vlines(xa,-10,40,colors="orange",linestyle="--")
  1298. plt.vlines(xb,-10,40,colors="orange",linestyle="--")
  1299. plt.legend()
  1300. plt.savefig('20deg_wy_vs_t')
  1301.  
  1302. xnew = a20_1[0][( a20_1[0]>xa)&( a20_1[0]<xb)]
  1303. ynew = a20_1[1][(a20_1[0]>xa)&( a20_1[0]<xb)]
  1304. #questo sigma serve solo per essere inserito nel codice, è stato scientificamente dimostrato che non ha impatto
  1305. #dato che i valori di m e c non cambiano nonstante i sigma messi
  1306. sa15_1 = np.repeat(np.std(ynew),len(xnew))
  1307.  
  1308. #Qui calcoleremo m e c
  1309. m, sm, c, sc, cov, rho = lin_fit(xnew, ynew, sa15_1, "tempo [s]", "Vel. angolare $\omega$ [rad/s]", verbose = True, plot=False, setrange=False)
  1310.  
  1311. #Questa parte del codice applica la formula (applicata solo nel intervallo dove c'è moto)
  1312. #Il numeratore:
  1313. num = 0
  1314. for i in range(0, len(ynew)):
  1315.     num += (ynew[i] - m*xnew[i] - c)**2
  1316. #E il valore cercato    
  1317. sigma1 = np.sqrt(num/(len(ynew)-2))
  1318. sigma = []
  1319. sigma = np.repeat(sigma1, len(ynew))
  1320.  
  1321. #Qui graficheremo finalmente il fit lineare
  1322. m, sm, c, sc, cov, rho = lin_fit(xnew, ynew, sigma, "tempo [s]", "Vel. angolare $\omega$ [rad/s]", verbose=False, plot=True, setrange=False)
  1323. plt.savefig('Fit lin 20deg_1')
  1324.  
  1325. alpha20 = [[],[],[]]
  1326. #E qui inseriamo i nuovi valori di m e c in alphai per la tabella
  1327. alpha20[0].append(m)
  1328. alpha20[1].append(sm)
  1329. alpha20[2].append(rho)
  1330. print('alpha=',m,'+/-',sm)
  1331.  
  1332. N = 2
  1333.  
  1334. plt.plot(a20_2[0],a20_2[1],label="wy", marker='.', color='green')
  1335. plt.xlabel('Tempo[s]')
  1336. plt.ylabel('Velocità angolare in y[rad/s]')
  1337. plt.grid()
  1338. xa = 0.5
  1339. xb = 1.15
  1340. plt.vlines(xa,-10,40,colors="orange",linestyle="--")
  1341. plt.vlines(xb,-10,40,colors="orange",linestyle="--")
  1342. plt.legend()
  1343. plt.savefig('20deg_wy_vs_t2')
  1344.  
  1345. xnew = a20_2[0][( a20_2[0]>xa)&( a20_2[0]<xb)]
  1346. ynew = a20_2[1][(a20_2[0]>xa)&( a20_2[0]<xb)]
  1347. #questo sigma serve solo per essere inserito nel codice, è stato scientificamente dimostrato che non ha impatto
  1348. #dato che i valori di m e c non cambiano nonstante i sigma messi
  1349. sa15_1 = np.repeat(np.std(ynew),len(xnew))
  1350.  
  1351. #Qui calcoleremo m e c
  1352. m, sm, c, sc, cov, rho = lin_fit(xnew, ynew, sa15_1, "tempo [s]", "Vel. angolare $\omega$ [rad/s]", verbose = True, plot=False, setrange=False)
  1353.  
  1354. #Questa parte del codice applica la formula (applicata solo nel intervallo dove c'è moto)
  1355. #Il numeratore:
  1356. num = 0
  1357. for i in range(0, len(ynew)):
  1358.     num += (ynew[i] - m*xnew[i] - c)**2
  1359. #E il valore cercato    
  1360. sigma1 = np.sqrt(num/(len(ynew)-2))
  1361. sigma = []
  1362. sigma = np.repeat(sigma1, len(ynew))
  1363.  
  1364. #Qui graficheremo finalmente il fit lineare
  1365. m, sm, c, sc, cov, rho = lin_fit(xnew, ynew, sigma, "tempo [s]", "Vel. angolare $\omega$ [rad/s]", verbose=False, plot=True, setrange=False)
  1366. plt.savefig('Fit lin 20deg_2')
  1367.  
  1368.  
  1369. #E qui inseriamo i nuovi valori di m e c in alphai per la tabella
  1370. alpha20[0].append(m)
  1371. alpha20[1].append(sm)
  1372. alpha20[2].append(rho)
  1373. print('alpha=',m,'+/-',sm)
  1374.  
  1375. N = 3
  1376.  
  1377. plt.plot(a20_3[0],a20_3[1],label="wy", marker='.', color='green')
  1378. plt.xlabel('Tempo[s]')
  1379. plt.ylabel('Velocità angolare in y[rad/s]')
  1380. plt.grid()
  1381. xa = 0.55
  1382. xb = 1.18
  1383. plt.vlines(xa,-10,40,colors="orange",linestyle="--")
  1384. plt.vlines(xb,-10,40,colors="orange",linestyle="--")
  1385. plt.legend()
  1386. plt.savefig('20deg_wy_vs_t3')
  1387.  
  1388. xnew = a20_3[0][( a20_3[0]>xa)&( a20_3[0]<xb)]
  1389. ynew = a20_3[1][(a20_3[0]>xa)&( a20_3[0]<xb)]
  1390. #questo sigma serve solo per essere inserito nel codice, è stato scientificamente dimostrato che non ha impatto
  1391. #dato che i valori di m e c non cambiano nonstante i sigma messi
  1392. sa15_1 = np.repeat(np.std(ynew),len(xnew))
  1393.  
  1394. #Qui calcoleremo m e c
  1395. m, sm, c, sc, cov, rho = lin_fit(xnew, ynew, sa15_1, "tempo [s]", "Vel. angolare $\omega$ [rad/s]", verbose = True, plot=False, setrange=False)
  1396.  
  1397. #Questa parte del codice applica la formula (applicata solo nel intervallo dove c'è moto)
  1398. #Il numeratore:
  1399. num = 0
  1400. for i in range(0, len(ynew)):
  1401.     num += (ynew[i] - m*xnew[i] - c)**2
  1402. #E il valore cercato    
  1403. sigma1 = np.sqrt(num/(len(ynew)-2))
  1404. sigma = []
  1405. sigma = np.repeat(sigma1, len(ynew))
  1406.  
  1407. #Qui graficheremo finalmente il fit lineare
  1408. m, sm, c, sc, cov, rho = lin_fit(xnew, ynew, sigma, "tempo [s]", "Vel. angolare $\omega$ [rad/s]", verbose=False, plot=True, setrange=False)
  1409. plt.savefig('Fit lin 20deg_3')
  1410.  
  1411.  
  1412. #E qui inseriamo i nuovi valori di m e c in alphai per la tabella
  1413. alpha20[0].append(m)
  1414. alpha20[1].append(sm)
  1415. alpha20[2].append(rho)
  1416. print('alpha=',m,'+/-',sm)
  1417.  
  1418. N = 4
  1419.  
  1420. plt.plot(a20_4[0],a20_4[1],label="wy", marker='.', color='green')
  1421. plt.xlabel('Tempo[s]')
  1422. plt.ylabel('Velocità angolare in y[rad/s]')
  1423. plt.grid()
  1424. xa = 0.75
  1425. xb = 1.35
  1426. plt.vlines(xa,-10,40,colors="orange",linestyle="--")
  1427. plt.vlines(xb,-10,40,colors="orange",linestyle="--")
  1428. plt.legend()
  1429. plt.savefig('20deg_wy_vs_t4')
  1430.  
  1431. xnew = a20_4[0][( a20_4[0]>xa)&( a20_4[0]<xb)]
  1432. ynew = a20_4[1][(a20_4[0]>xa)&( a20_4[0]<xb)]
  1433. #questo sigma serve solo per essere inserito nel codice, è stato scientificamente dimostrato che non ha impatto
  1434. #dato che i valori di m e c non cambiano nonstante i sigma messi
  1435. sa15_1 = np.repeat(np.std(ynew),len(xnew))
  1436.  
  1437. #Qui calcoleremo m e c
  1438. m, sm, c, sc, cov, rho = lin_fit(xnew, ynew, sa15_1, "tempo [s]", "Vel. angolare $\omega$ [rad/s]", verbose = True, plot=False, setrange=False)
  1439.  
  1440. #Questa parte del codice applica la formula (applicata solo nel intervallo dove c'è moto)
  1441. #Il numeratore:
  1442. num = 0
  1443. for i in range(0, len(ynew)):
  1444.     num += (ynew[i] - m*xnew[i] - c)**2
  1445. #E il valore cercato    
  1446. sigma1 = np.sqrt(num/(len(ynew)-2))
  1447. sigma = []
  1448. sigma = np.repeat(sigma1, len(ynew))
  1449.  
  1450. #Qui graficheremo finalmente il fit lineare
  1451. m, sm, c, sc, cov, rho = lin_fit(xnew, ynew, sigma, "tempo [s]", "Vel. angolare $\omega$ [rad/s]", verbose=False, plot=True, setrange=False)
  1452. plt.savefig('Fit lin 20deg_4')
  1453.  
  1454.  
  1455. #E qui inseriamo i nuovi valori di m e c in alphai per la tabella
  1456. alpha20[0].append(m)
  1457. alpha20[1].append(sm)
  1458. alpha20[2].append(rho)
  1459. print('alpha=',m,'+/-',sm)
  1460.  
  1461. N = 5
  1462.  
  1463. plt.plot(a20_5[0],a20_5[1],label="wy", marker='.', color='green')
  1464. plt.xlabel('Tempo[s]')
  1465. plt.ylabel('Velocità angolare in y[rad/s]')
  1466. plt.grid()
  1467. xa = 0.52
  1468. xb = 1.15
  1469. plt.vlines(xa,-10,40,colors="orange",linestyle="--")
  1470. plt.vlines(xb,-10,40,colors="orange",linestyle="--")
  1471. plt.legend()
  1472. plt.savefig('20deg_wy_vs_t5')
  1473.  
  1474. xnew = a20_5[0][( a20_5[0]>xa)&( a20_5[0]<xb)]
  1475. ynew = a20_5[1][(a20_5[0]>xa)&( a20_5[0]<xb)]
  1476. #questo sigma serve solo per essere inserito nel codice, è stato scientificamente dimostrato che non ha impatto
  1477. #dato che i valori di m e c non cambiano nonstante i sigma messi
  1478. sa15_1 = np.repeat(np.std(ynew),len(xnew))
  1479.  
  1480. #Qui calcoleremo m e c
  1481. m, sm, c, sc, cov, rho = lin_fit(xnew, ynew, sa15_1, "tempo [s]", "Vel. angolare $\omega$ [rad/s]", verbose = True, plot=False, setrange=False)
  1482.  
  1483. #Questa parte del codice applica la formula (applicata solo nel intervallo dove c'è moto)
  1484. #Il numeratore:
  1485. num = 0
  1486. for i in range(0, len(ynew)):
  1487.     num += (ynew[i] - m*xnew[i] - c)**2
  1488. #E il valore cercato    
  1489. sigma1 = np.sqrt(num/(len(ynew)-2))
  1490. sigma = []
  1491. sigma = np.repeat(sigma1, len(ynew))
  1492.  
  1493. #Qui graficheremo finalmente il fit lineare
  1494. m, sm, c, sc, cov, rho = lin_fit(xnew, ynew, sigma, "tempo [s]", "Vel. angolare $\omega$ [rad/s]", verbose=False, plot=True, setrange=False)
  1495. plt.savefig('Fit lin 20deg_5')
  1496.  
  1497.  
  1498. #E qui inseriamo i nuovi valori di m e c in alphai per la tabella
  1499. alpha20[0].append(m)
  1500. alpha20[1].append(sm)
  1501. alpha20[2].append(rho)
  1502. print('alpha=',m,'+/-',sm)
  1503.  
  1504. #Prints the data in a latex-format tabular to copy and paste
  1505. df = pd.DataFrame( {'alpha': alpha20[0]
  1506.                    ,'sigma(alpha)': alpha20[1]
  1507.                    ,'rho': alpha20[2]}
  1508.                   )
  1509.  
  1510. print(df.to_latex(index=False,formatters={'alpha20[0]': '{:.2f}'.format,
  1511.                                            'alpha20[1]': '{:.2f}'.format,
  1512.                                               'alpha20[2]': '{:.2f}'.format}
  1513.                   ))
  1514.  
  1515. sum_a = 0
  1516. sum_s = 0
  1517. for i in range(0,6):
  1518.     sum_a += alphai[0][i]*(alphai[1][i]**2)
  1519.     sum_s += alphai[1][i]**2
  1520. alpha_mother = sum_a/sum_s
  1521. sigma_mother = np.sqrt(sum_s)
  1522. print('alpha20_m=', alpha_mother,'+/-', sigma_mother)
  1523.  
  1524.  
  1525.  
  1526. # $\alpha$ in funzione di $sin(\theta)$
  1527.  
  1528. Per questo quesito, $\alpha$ verrà espressa (con la sua incertezza, quindi in plt.errorbar) in funzione dei diversi angoli $\theta$. (Perciò è importante avere un numero relativamente grande di angoli $\theta$). Da questo si potrà estrarre un coefficiente angolare $m$.
  1529.  
  1530. #al = np.asarray(alphai[0])
  1531. #sal = np.asarray(alphai[1])
  1532. al = [0.3, 0.45, 0.66, 0.73, 0.99, 1.3]
  1533. al = np.asarray(al)
  1534. sal = [0.03, 0.045, 0.066, 0.073, 0.099, 0.13]
  1535. sal = np.asarray(sal)
  1536. #The angles for theta are also obviously placeholders, whatsmore it's also not unlikely it will be in degrees and not rads
  1537. theta = [0, np.pi/6, np.pi/4, np.pi/3, np.pi/2, np.pi]
  1538. theta = np.asarray(theta)
  1539. m, sm, c, sc, cov, rho = lin_fit(theta, al, sal, "sin(theta)", "alpha", plot=True, setrange=False)
  1540.  
  1541.  
  1542. **Importante: non ho considerato la parte in italico nei quesiti, perciò va ancora fatta quella parte**
  1543.  
  1544. # Misura di $I_{CM}$ e di $g$
  1545.  
  1546. Questa parte presuppone che le misure dei vari corpi del sistema sono già state fatte. Useremo la formula per il momento d'inerzia del cilindro.
  1547.  
  1548.  
  1549. La formula usata per calcolare il momento d'inerzia può variare in funzione di come consideriamo il cilindro: se è pieno, allora $I_{CM}=1/2*MR^2$, mentre se lo consideriamo vuoto $I_{CM}=MR^2$.
  1550.  
  1551. #Assumendo che essa sarà considerata piena e omogenea:
  1552. M = #kg
  1553. sM = #deviazione standard di M
  1554. R = #m
  1555. sR = #deviazione standard di R
  1556. I = M*R^2
  1557. #La deviazione standard su I sarà calcolata con la formula di propagazione delle incertezze per i monomi:
  1558. sI = I*((sM/M)**2+4*(sR/R)**2)**0.5
  1559. print('I_cm=', I,'+/-',sI)
  1560.  
  1561. Il calcolo di g, leggermente più complicato di quello di I, si basa sulla formula (5) del PP4: $m = \frac{MgR}{I_{CM}+M\cdot R^2}$ ossia $g = m\frac{I_{CM}+M\cdot R^2}{MR}$ dove $m$ è il coefficiente angolare del grafico di $\alpha$ vs $sin(\theta)$.
  1562.  
  1563.  
  1564. Il calcolo di g verrà fatto  rimpiazzando $I_{CM}$ con la sua formula per cilindri pieni.
  1565.  
  1566. #Rimpiazzando con la formula. Damn coffee is effective. Staying awake is child's play
  1567. g1 = m*3/2*R
  1568. #La deviazione standard è calcolata con la formula di propagazione delle incertezze per monomi
  1569. sg1 = g1*((sm/m)**2+(sR/R)**2)**0.5
  1570. print('g1=',g1,'+/-',sg1)
Add Comment
Please, Sign In to add comment