如何在sympy中切换为SI单位计算氢原子波函数?
在SymPy中使用SI单位计算氢原子波函数
SymPy的HydrogenAtom类默认采用Hartree单位(以玻尔半径为长度基准,Hartree为能量基准),要切换到SI单位,有几种可行的实现方式:
方法1:手动转换Hartree单位结果
默认计算出的波函数基于无量纲径向坐标(以玻尔半径为参照),你可以通过坐标替换和量纲调整完成SI单位转换:
- 玻尔半径(SI单位):
a0 = 5.29177210903e-11 m - 波函数量纲转换:Hartree单位下波函数量纲为
1/bohr^(3/2),转SI单位需除以a0^(3/2),最终得到1/m^(3/2)的正确量纲
示例代码:
from sympy.physics.hydrogen import HydrogenAtom from sympy import symbols, pi # 定义量子数和径向坐标 n, l, m = 1, 0, 0 r = symbols('r') # 创建氢原子实例(默认Hartree单位) ha = HydrogenAtom(n, l, m) # 获取Hartree单位下的径向波函数 psi_hartree = ha.radial_wavefunction(r) # 转换为SI单位:将无量纲r替换为实际长度r除以玻尔半径,同时调整量纲 a0 = 5.29177210903e-11 # 玻尔半径(米) psi_si = psi_hartree.subs(r, r/a0) / (a0**(3/2)) # 输出基态SI单位波函数,符合物理公式 print(psi_si)
方法2:直接定义SI单位下的波函数表达式
如果不需要依赖HydrogenAtom类,也可以直接写出SI单位下的氢原子波函数解析式,利用SymPy进行符号计算:
from sympy import symbols, exp, pi, sqrt # SI单位常数 a0 = 5.29177210903e-11 # 玻尔半径(m) r = symbols('r') # 基态(n=1,l=0,m=0)SI单位波函数 psi_1s = sqrt(2/(pi*a0**3)) * exp(-r/a0) # 计算r=a0处的波函数值 print(psi_1s.subs(r, a0))
方法3:利用SymPy单位模块系统转换
SymPy内置的单位模块可以更规范地处理单位转换,避免手动计算转换因子:
from sympy.physics.hydrogen import HydrogenAtom from sympy.physics.units import meter, bohr from sympy import symbols n, l, m = 1, 0, 0 r = symbols('r') ha = HydrogenAtom(n, l, m) # 获取Hartree单位下的波函数 psi_hartree = ha.radial_wavefunction(r) # 转换为SI单位:替换坐标单位,调整波函数量纲 psi_si = psi_hartree.subs(r, r / bohr) / (bohr**(3/2)) # 代入玻尔半径的SI数值 psi_si_with_units = psi_si.subs(bohr, 5.29177210903e-11 * meter) print(psi_si_with_units)
关键注意事项
- 径向坐标的含义:
HydrogenAtom返回的波函数中,r是无量纲的(即实际长度除以玻尔半径),转换时必须替换为实际SI长度与玻尔半径的比值 - 波函数量纲:氢原子波函数的量纲是
1/长度^(3/2),转换单位时必须同步调整,确保结果量纲正确
内容的提问来源于stack exchange,提问作者Graham G
相关产品推荐
相关产品推荐

