密立根油滴实验计算代码

密立根油滴实验动态法计算公式和预设参数值

密立根油滴实验是一个著名的实验,其中有用非平衡法(动态法)测量油滴电荷量的步骤,在做实验时计算量繁琐,这里用一个python小程序提供辅助计算
其中主要的计算公式和相关参数值如下:
注意:不同实验室里装置不同,相关参数会有所不同,如有不同请在程序开始位置进行修改。
求 油 滴 电 荷 量 的 公 式 : q = 18 π η ′ 3 2 L 3 2 2 g ( ρ − ρ ′ ) ⋅ d U ′ ( 1 t g + 1 t e ) ( 1 t g ) 1 2 油 滴 半 径 : r = 9 η v g 2 ( ρ − ρ ′ ) g η 的 修 正 函 数 : η ′ = η 1 + b r P {\begin{aligned} 求油滴电荷量的公式 :q &= \frac{ 18\pi\eta'^{\frac{3}{2}} L^{\frac{3}{2}} }{\sqrt{2g(\rho-\rho')} } \cdot\frac{d}{U'} \big( \frac{1}{t_g} + \frac{1}{t_e} \big)\big( \frac{1}{t_g} \big)^{\frac{1}{2}}\\ \\ 油滴半径:r&=\sqrt{\frac{9\eta v_g}{2(\rho-\rho')g}}\\ \\ \eta的修正函数:\eta'&=\frac{\eta}{1+\frac{b}{rP}}\\ \end{aligned} }\\ qrηη=2g(ρρ) 18πη23L23Ud(tg1+te1)(tg1)21=2(ρρ)g9ηvg =1+rPbη
相 关 参 数 的 默 认 值 : ( 有 不 同 的 需 要 在 代 码 中 进 行 简 单 修 改 ) 空 气 压 强 : P = 76.0 c m H g 修 正 常 数 : b = 6.17 × 1 0 − 6 m ⋅ c m H g 粘 滞 系 数 : η = 1.83 × 1 0 − 5 k g ⋅ m − 1 ⋅ s − 1 平 行 极 板 间 距 离 : d = 5.00 × 1 0 − 3 m 匀 速 上 升 / 下 降 的 距 离 : L = 1.6 m m 重 力 加 速 度 : g = 9.794 m / s 2 油 的 密 度 : ρ = 981 k g ⋅ m − 3 空 气 密 度 : ρ ′ = 1.2928 k g ⋅ m − 3 匀 速 上 升 的 时 间 t e : 测 量 得 到 匀 速 下 降 的 时 间 t g : 测 量 得 到 油 滴 的 上 升 电 压 U ′ : 测 量 得 到 \begin{aligned} 相关参数的默认值&:(有不同的需要在代码中进行简单修改)\hspace{5cm}\\ 空气压强&:P=76.0cmHg\\ 修正常数&:b=6.17\times 10^{-6}m\cdot cmHg\\ 粘滞系数&:\eta = 1.83\times10^{-5}kg\cdot m^{-1} \cdot s^{-1}\\ 平行极板间距离&:d=5.00\times 10^{-3}m\\ 匀速上升/下降的距离&:L=1.6mm\\ 重力加速度&:g=9.794m/s^{2}\\ 油的密度&:\rho=981kg\cdot m^{-3}\\ 空气密度&:\rho'=1.2928kg\cdot m^{-3}\\ 匀速上升的时间t_e&:测量得到\\ 匀速下降的时间t_g&:测量得到\\ 油滴的上升电压U'&:测量得到\\ \end{aligned} /tetgU()P=76.0cmHgb=6.17×106mcmHgη=1.83×105kgm1s1d=5.00×103mL=1.6mmg=9.794m/s2ρ=981kgm3ρ=1.2928kgm3

计算代码(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库。

代码测试:

用代码中的测试数据进行测试:
输出结果
结果中有两个值,一个是进行了科学计数法表示,一个是原始数据。

有问题欢迎交流指正,如果觉得有用的话还求一个小小的赞(〃‘▽’〃)。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐