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

SymPy中无需预知最终单位将物理常量表达式转为数值的解决方案

SymPy物理常量表达式快速取数值的解决方案

问题原因

直接调用evalf()、simplify()无法得到数值的核心原因是:SymPy的physics.units模块下的物理常量同时存储了数值和单位量纲两个属性,符号运算阶段不会自动代入常量数值,也不会自动做单位归一化,必须显式完成单位转换后才能提取纯数值。

最简解决方法

你可以直接调用convert_to方法将表达式转换为对应物理量的目标单位,再除以单位本身即可得到纯数值,示例代码如下:

from IPython.display import display, Latex
from sympy import *
import sympy.physics.units as U

c = U.speed_of_light
G = U.gravitational_constant
hb = U.hbar

expr = sqrt(hb*G/(c**3))
# 转换为普朗克长度对应的单位:米,再提取数值
expr_m = U.convert_to(expr, U.meter)
result = N(expr_m / U.meter)

print(f"带单位结果:{expr_m}")
print(f"纯数值结果:{result}")

运行后可直接得到普朗克长度的近似数值:1.61625502442370e-35

通用封装方案

如果不想每次手动指定目标单位,可以封装自动识别量纲的工具函数,实现一键取值:

def get_phys_value(expr, unit_sys=U.si):
    # 自动识别表达式量纲,匹配对应单位后返回纯数值
    dim = U.Dimension(unit_sys.get_dimensional_expr(expr))
    base_unit = U.convert_to(U.Quantity(dimension=dim), unit_sys._base_units)
    return N(U.convert_to(expr, base_unit) / base_unit)

# 测试调用
print(get_phys_value(expr))

内容的提问来源于stack exchange,提问作者Gergely Nagy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 02:21:02