You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 03:47:34