Lab-I/calorimetro.py

100 lines
1.7 KiB
Python
Raw Normal View History

2016-06-19 20:37:57 +02:00
# coding: utf-8
from __future__ import print_function
from lab import *
import matplotlib.pyplot as plt
import numpy as np
##
## Part 1
## equivalent mass
mt = 353.36
mi = np.array([592.67, 576.99, 512.66, 479.75, 498.35])
mf = np.array([682.53, 678.08, 634.87, 626.51, 626.81])
T1 = np.array([20.2, 35.1, 21.1, 38.9, 22.5])
T2 = np.array([83.1, 87.0, 89.9, 87.2, 95.0])
Te = np.array([38.0, 51.0, 48.9, 61.9, 53.9])
m1 = mi-mt
m2 = mf-mi
me = m2*(T2-Te)/(Te-T1) - m1
me = me[2:].mean()
print('m_e: ', me)
##
## Part 2
## specific heat
mt = 359.67
mi = np.array([713.98, 717.14, 693.60])
ms = np.array([130.02, 121.85, 38.95])
m1 = mi-mt
Ts = 100
T1 = np.array([21.2, 23.2, 21.2])
Te = np.array([23.6, 25.3, 23.0])
cs = (Te-T1)*(m1+me)/((Ts-Te)*ms)
print('''
rame: {:.1f}
ottone: {:.1f}
alluminio: {:.1f}
'''.format(*cs*4186))
##
## Part 3
## Joule constant
mt = 354.71
m = 760.53 - mt
V = 14
I = 3
T = sample(22.0, 23.4, 24.8, 26.4, 27.6, 29.0, 30.4)
t = sample(0, 1, 2, 3, 4, 5, 6)*60
# linear interpolation
x = np.linspace(0,370)
a,b = linear(t, T, 0.1)
f = lambda x: a.n+b.n*x
# plot T - t
plt.xlabel('tempo (s)')
plt.ylabel('temperatura (s)')
plt.xlim(0,400)
plt.scatter(t, T, color='#135964')
plt.plot(t, f(t), '#317883')
plt.show()
# χ² test
alpha = chi_squared_fit(t, T, f, 0.1)
print('χ²: α={:.3f}, α>ε: {}'.format(alpha, alpha>epsilon))
# find J from b
J = I*V/(b*(m+me))
print('J={}'.format(J))
##
## Part 4
## latent heat
mt = 355.12 # calorimeter tare
mi = 386.61 # calorimeter + ice
mf = 561.62 # calorimeter + ice + water
m1 = mf-mi # water
m2 = mi-mt # ice
t1 = 91.1
t2 = -17
te = 66.8
ca = 4.2045 # water specific heat at 91°C
cg = 2.0461 # ice specific heat at -17°C
l = ca*(m1+me)/m2*(t1-te) + cg*t2 - ca*te
print(l)