146 lines
3.3 KiB
Python
146 lines
3.3 KiB
Python
# coding: utf-8
|
||
from __future__ import division, unicode_literals
|
||
from lab import *
|
||
|
||
import numpy as np
|
||
import matplotlib.pyplot as plt
|
||
import uncertainties.umath as u
|
||
|
||
mass = lambda x: ufloat(x, 0.01)*0.001
|
||
length = lambda x: ufloat(x, 0.5)*0.01
|
||
|
||
##
|
||
## Costants
|
||
##
|
||
|
||
mL = [ (16.47, 251.0) # violet
|
||
, (5.49, 252.7) # black
|
||
, (6.16, 287.7) # green
|
||
, (1.48, 188.8) # white
|
||
]
|
||
|
||
mu = [mass(m)/length(l) for m,l in mL] # linear density (kg/m)
|
||
pp = mass(50.03) # tare mass (kg)
|
||
g = 9.80665 # acceleration due to gravity (m/s^2)
|
||
|
||
sigma = 0.8 # frequency uncertainty
|
||
|
||
## green string
|
||
## T,L,μ constant, plot ν(n)
|
||
|
||
m = mass(400.21) + pp
|
||
L = length(98.5)
|
||
T = m*g
|
||
|
||
n = np.arange(1,8)
|
||
nu = np.array([23.97, 48.20, 72.54, 96.97, 122.20, 147.10, 171.30])
|
||
|
||
# linear regression y=kx where
|
||
# y=ν, x=n, k=1/(2L)√(T/μ)
|
||
x = np.linspace(0,8,100)
|
||
k = simple_linear(n, nu, sigma)
|
||
f = lambda x: k.n*x
|
||
|
||
plt.figure(1)
|
||
plt.xlim(0,8)
|
||
plt.ylim(0,200)
|
||
plt.xlabel('n armonica')
|
||
plt.ylabel('frequenza di risonanza (Hz)')
|
||
plt.scatter(n, nu, color='#468174')
|
||
plt.plot(x, f(x), '#5ca897')
|
||
plt.show()
|
||
|
||
# χ² test
|
||
alpha = chi_squared_fit(n, nu, f, sigma, s=1)
|
||
|
||
v0 = 2*L*k # actual propagation velocity
|
||
v = u.sqrt(T/mu[2]) # theoretical propagation velocity
|
||
|
||
print '''
|
||
χ²: α={:.3f}, α>ε: {}
|
||
k: ({})1/s
|
||
v°: ({})m/s
|
||
v: ({})m/s
|
||
'''.format(alpha, alpha>epsilon, k, v0, v)
|
||
|
||
|
||
##
|
||
## green string
|
||
## T,μ,n constant, plot ν(T), n=2
|
||
|
||
M = [mass(i)+pp for i in [700.45, 499.95, 450.16, 400.19, 200.16, 140.92]]
|
||
T = np.array([g*i.n for i in M])
|
||
nu = np.array([60.26, 52.20, 49.70, 47.06, 34.96, 31.22])
|
||
|
||
# linear regression y=kx where
|
||
# y=ν, x=√T, k=1/(L√μ)
|
||
x = np.linspace(1, 8, 100)
|
||
k = simple_linear(np.sqrt(T), nu, sigma)
|
||
f = lambda x: k.n*np.sqrt(x)
|
||
|
||
plt.figure(2)
|
||
plt.xlabel('Tensione (N)')
|
||
plt.ylabel('Frequenza 2ª armonica (Hz)')
|
||
plt.scatter(T, nu, color='#673f73')
|
||
plt.plot(x, f(x), '#975ca8')
|
||
plt.show()
|
||
|
||
# χ² test
|
||
alpha = chi_squared_fit(T, nu, f, sigma, s=1)
|
||
print "χ²: α={}, α>ε: {}".format(alpha, alpha>epsilon)
|
||
|
||
##
|
||
## green string
|
||
## T,μ,n constant, plot ν(L), n=2
|
||
|
||
m = mass(400.21) + pp
|
||
T = m*g
|
||
|
||
L = np.array([116.5, 104.5, 95.4, 82.2, 75.0, 64.5, 54.7])*0.01
|
||
nu = np.array([44.58, 49.43, 54.60, 63.58, 69.34, 80.75, 96.40])
|
||
|
||
# linear regression y=kx where
|
||
# y=ν, x=1/L, k=n/2 √(T/μ)
|
||
x = np.linspace(0.5, 1.25, 100)
|
||
k = simple_linear(1/L, nu, sigma)
|
||
f = lambda x: k.n/x
|
||
|
||
plt.figure(3)
|
||
plt.xlabel('Lunghezza corda (m)')
|
||
plt.ylabel('Frequenza 2ª armonica (Hz)')
|
||
plt.scatter(L, nu, color='#844855')
|
||
plt.plot(x, f(x), '#a85c6c')
|
||
plt.show()
|
||
|
||
# χ² test
|
||
alpha = chi_squared_fit(L, nu, f, sigma, s=1)
|
||
print "χ^2: α={}, α>ε: {}".format(alpha, alpha>epsilon)
|
||
|
||
##
|
||
## every string
|
||
## T,n,L constant, plot ν(μ), n=2
|
||
|
||
m = mass(400.21) + pp
|
||
L = length(98.5)
|
||
n = 2
|
||
|
||
mu = np.array([i.n for i in mu])
|
||
nu = np.array([26.90, 47.23, 47.60, 78.20])
|
||
|
||
# linear regression y=kx where
|
||
# y=ν, x=1/√μ, k=√T/L
|
||
x = np.linspace(0.0005,0.007,100)
|
||
k = simple_linear(1/np.sqrt(mu), nu, sigma)
|
||
f = lambda x: k.n/np.sqrt(x)
|
||
|
||
plt.figure(4)
|
||
plt.xlabel('Densità lineare (kg/m)')
|
||
plt.ylabel('Frequenza 2ª armonica')
|
||
plt.scatter(mu, nu, color='#44507c')
|
||
plt.plot(x, f(x), '#5c6ca8')
|
||
plt.show()
|
||
|
||
# χ² test
|
||
alpha = chi_squared_fit(mu, nu, f, sigma, s=1)
|
||
print "χ²: α={}, α>ε: {}".format(alpha, alpha>epsilon)
|