In [1]:
import numpy as np
import matplotlib.pyplot as plt
import math
import random
from math import sqrt
In [117]:
def sciPrintR(val, relErr, name=None):
if name != None:
print name, val, "+-", val * relErr, "(", relErr * 100., "%)"
else:
print val, "+-", val * relErr, "(", relErr * 100., "%)"
def sciPrintD(val, dErr, name=None):
if name != None:
print name, val, "+-", dErr, "(", (dErr/val) * 100., "%)"
else:
print val, "+-", dErr, "(", (dErr/val) * 100., "%)"
def prodErrorR(errors):
errors = np.array(errors)
return np.sqrt((errors**2).sum())
def stdPlt(X, Y, title=None):
fig = plt.figure(figsize=(8, 16))
if title != None:
plt.title(title)
ax = fig.add_subplot(111)
k_off = 1.05
x_minor_ticks = np.linspace(0, X.max() * k_off + 0.0001, 125) # 104
x_major_ticks = np.array([x_minor_ticks[i] for i in range(0, x_minor_ticks.size, 20)])
y_minor_ticks = np.linspace(0, Y.max() * k_off + 0.0001, 248) # 4822
y_major_ticks = np.array([y_minor_ticks[i] for i in range(0, y_minor_ticks.size, 20)])
ax.set_xticks(x_major_ticks)
ax.set_xticks(x_minor_ticks, minor=True)
ax.set_yticks(y_major_ticks)
ax.set_yticks(y_minor_ticks, minor=True)
ax.grid(which='minor', alpha=0.4, linestyle='-')
ax.grid(which='major', alpha=0.7, linestyle='-')
plt.xlim((0, X.max() * k_off))
plt.ylim((0, Y.max() * k_off))
k = Y.max() / Y.mean()
plt.plot([0, X.mean() * k], [0, Y.mean()* k])
#plt.plot(X, Y)
plt.scatter(X, Y, s=5, color="black")
plt.show()
print(math.sqrt(0.1*0.1 + 0.6*0.6 + 0.4*0.4))
prodErrorR([0.1,0.6,0.4])
Out[117]:
In [144]:
L = 501 * 1e-3
DL = 1 * 1e-3
am = (50.695 + 2.573 + 2.571 + 0.740) * 1e-3
m1 = 492.7 * 1e-3
m2 = 494.6 * 1e-3
m3 = 491.5 * 1e-3 # 491.5 * 1e-3
Dm = 0.5 * 1e-3
g = 9.815
print(am)
In [152]:
freqs = np.array([0, 134.4, 403.0, 675.7, 949.4, 1229.6, 1513.5, 1790.9]) # ! corrr
ns = np.array([0, 1, 3, 5, 7, 9, 11, 13])
def pl_works(freqs, ns, m_sum_1):
print "freq :"
sciPrintD((freqs[1:] / ns[1:]).mean(), (freqs[1:] / ns[1:]).std(ddof=1) / np.size(freqs.size))
# tables
wave_lengths = (2. * L) / ns[1:]
us = freqs[1:] * wave_lengths # u = lambda * freq
print "us :"
otd_freq_err = (freqs[1:] / ns[1:]).std(ddof=1)
for i in range(us.size):
sciPrintR(us[i], prodErrorR([otd_freq_err / (freqs[i + 1] / ns[i + 1]), DL / L]))
us_mean = us.mean()
Dus_mean = us.std(ddof=1)/np.sqrt(us.size)
sciPrintD(us_mean, Dus_mean, "us_mean = ")
T = g * m_sum_1
pl = T / (us * us ) # u = sqrt(T / pl)
pls = pl
print "pls :"
for i in range(pl.size):
sciPrintR(pl[i], pl.std(ddof=1) / pl[i], "pl[%d]" % (i))
print "pls mean after ="
sciPrintR(pl.mean(), prodErrorR([(pl.std(ddof=1) / math.sqrt(pl.size) / pl.mean()), 1 / 501]), "pl_mean_after")
# mean
freq_base = freqs[1:] / ns[1:]
freq_mean = freq_base.mean()
Dfreq_mean = freq_base.std(ddof=1) / np.sqrt(freq_base.size)
Rfreq_mean = Dfreq_mean / freq_mean
sciPrintR(freq_mean, Rfreq_mean, "lambda_1 = ")
wave_length = 2. * L / ns[1]
Rwave_length = DL / wave_length
u = freq_mean * wave_length
Ru = prodErrorR([Rwave_length, Rfreq_mean])
Rm_sum_1 = (Dm * 2) / m_sum_1
T = g * m_sum_1
RT = Rm_sum_1
pl = T / (u * u)
Rpl = prodErrorR([RT, Ru, Ru])
sciPrintR(pl, Rpl, "pl_mean = ")
return pls, us_mean, Dus_mean
great_pl_1, us_mean_1, Dus_mean1 = pl_works(freqs, ns, am + m1 + m2)
stdPlt(ns, freqs, title=r"$\nu(n) [m = %f]$" % (am + m1 + m2))
In [153]:
print("New start freq = ", freqs[1] * sqrt((m1 + m2 + m3)/(m1 + m2)))
In [154]:
freq2 = np.array([0, 161.1, 484.6, 806.7, 1130.5, 1457.55, 1790.7, 2128.0])
ns2 = np.array([0, 1, 3, 5, 7, 9, 11, 13])
great_pl_2, us_mean_2, Dus_mean2 = pl_works(freq2, ns2, am + m1 + m2 + m3 )
stdPlt(ns2, freq2, title=r"$\nu(n) [m = %f]$" % (am + m1 + m2 + m3))
In [150]:
all_pl = np.append(great_pl_1, great_pl_2)
# print(all_pl)
PL_VAL = all_pl.mean()
R_PL_VAL = all_pl.std(ddof=1)/np.sqrt(all_pl.size) / PL_VAL
R_PL_VAL = prodErrorR([R_PL_VAL, Dm / (am + m1+ m2+m3), 1. / 501.])
sciPrintR(PL_VAL * 1e6, R_PL_VAL)
In [ ]: