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

使用SymPy计算吸附氢气熵时遇类型错误:ImmutableDenseNDimArray与NegativeOne无法相加

问题分析与解决

错误根源

  1. 类型兼容问题:你混用了NumPy数组和SymPy符号变量,两者的运算体系不兼容,导致数组类型ImmutableDenseNDimArray无法与SymPy的符号NegativeOne(即-1)进行运算,触发类型错误。
  2. 公式语法错误:第二个指数项的括号位置错误——原代码中sym.exp(-(h * f))/(k * T)会先计算exp(-h*f)再除以k*T,但振动配分函数的正确逻辑是指数参数为-(h*f)/(k*T),括号缺失导致计算逻辑完全偏离。

修正方案

1. 替换数组类型

将NumPy数组改为SymPy原生的sym.Array(或直接用Python列表),让SymPy能正确处理数组元素与符号变量的运算。

2. 修正公式括号位置

确保指数项的参数是完整的-(h*f)/(k*T),恢复正确的配分函数计算逻辑。

修正后的代码

import sympy as sym

c = 3e8
h = 6.626e-34
k = 1.38e-23

T = sym.symbols('T')

# 使用SymPy数组替代NumPy数组
v = sym.Array([3034.1, 3027, 1265.8, 1257.5, 840.6, 642.7])
f = v * c * 100

# 修正括号位置,保证指数参数正确
Q = sym.exp(-(h * f)/(2 * k * T)) / (1 - sym.exp(-(h * f)/(k * T)))
print(Q)

后续数值计算扩展

如果需要将符号结果转为数值计算,可使用以下两种方式:

# 方式1:代入具体温度值计算
Q_numeric = Q.subs(T, 300).evalf()
print(Q_numeric)

# 方式2:转为NumPy可调用的函数
Q_func = sym.lambdify(T, Q, 'numpy')
print(Q_func(300))

内容的提问来源于stack exchange,提问作者Luke Pretzie

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 10:48:15