# 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)