密立根油滴实验是一个著名的实验,其中有用非平衡法(动态法)测量油滴电荷量的步骤,在做实验时计算量繁琐,这里用一个python小程序提供辅助计算。
其中主要的计算公式和相关参数值如下:
注意:不同实验室里装置不同,相关参数会有所不同,如有不同请在程序开始位置进行修改。
使用时确保这些相关参数与自己实验的参数设置值相同,不同需要要对数值进行相应修改。
测量次数默认为5次,也可调整。
from decimal import *
import math
getcontext().prec = 24
text_times = 5 # 设置每个油滴上下往返时间的测量次数,默认为5
# 相关参数值(不同的需要修改)
P = Decimal('76') # 空气压强
b = Decimal("6.17e-6") # 修正常数
n = Decimal("1.83e-5") # 粘滞系数
d = Decimal('0.005') # 平行极板间距离
L = Decimal('0.0016') # 匀速上升/下降的距离
g = Decimal('9.794') # 重力加速度
rou = Decimal(918) # 油的密度
rou2 = Decimal('1.2928') # 空气密度
pi = Decimal(str(math.pi)) # 圆周率π
e1 = Decimal("1.6021892e-19") # 理论元电荷值
data_tg = [] # 用于存储下降时间
data_te = [] # 用于存储下降时间
for i in range(1, text_times+ 1 ):
tg = input("输入匀速下降时间:tg" + str(i) + "= ")
data_tg.append(Decimal(tg))
tgp = sum(data_tg)/Decimal(text_times)
print("计算得到的tg平均值:"+str(sum(data_tg)/Decimal(text_times)) )
for i in range(1, text_times+ 1 ):
te = input("输入匀速上升时间:te" + str(i) + "= ")
data_te.append(Decimal(te))
tep = sum(data_te)/Decimal(text_times)
print("计算得到的te平均值:"+str(sum(data_te)/Decimal(text_times)) )
U = input("输入上升电压:U'= ")
U = Decimal(U)
# 计算公式
r = (9*n*L / (2*(rou - rou2)* g * tgp) ) ** Decimal('0.5')
n2 = n/(1+b/(r*P)) # 修正后的粘滞系数
K = ( 18*pi*(n2**Decimal('1.5'))*(L**Decimal('1.5')) / ( (2*g*(rou-rou2))**Decimal('0.5') ) ) * d
q = (K/U) * (1/tgp + 1/tep) * ((1/tgp)**Decimal('0.5'))
N = q/e1
# 结果显示
print("油滴半径:r=",end='');print("%e" % r)
print("r=",end='');print(r)
print("修正后的粘滞系数:n2=",end='');print("%e" % n2)
print("n2=",end='');print(n2)
print("油滴所带的电荷量:q=",end='');print('%e'% q)
print("q=",end='');print(q)
print('q/e:N=',end='');print(N)
input("结束,按任意键继续")
# 这是一组测试数据
# 12.59
# 12.61
# 12.29
# 12.94
# 12.88
# 7.97
# 8.11
# 8.07
# 8.21
# 8.05
# 342
程序中为了保证数据计算的精确性,引入了decimal库。
用代码中的测试数据进行测试:
结果中有两个值,一个是进行了科学计数法表示,一个是原始数据。
有问题欢迎交流指正,如果觉得有用的话还求一个小小的赞(〃‘▽’〃)。