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

SymPy中evalf执行单变量表达式时返回表达式而非数值的问题

问题原因与解决方法

问题出在你使用的小写e不是SymPy内置的自然常数,SymPy会将其识别为未知符号,导致代入x的值后,表达式仍包含未定义的符号e,无法计算出数值结果。同时log(e)里的e同样是未知符号,自然也无法求值。

解决方案

方案1:替换为SymPy的自然常数E

SymPy中代表自然常数的是大写E,将表达式里的e替换为E即可:

方式A:直接构造SymPy表达式(推荐)

from sympy import symbols, E, sin, cos, log

x = symbols('x')
# log(E)等于1,可简化表达式
expr = E**sin(x) * x * cos(x) + 1.0
print(expr.evalf(subs={x: 1}))

方式B:使用sympify处理字符串

from sympy import symbols, sympify

x = symbols('x')
expr = sympify('E**sin(x)*x*log(E)*cos(x) + 1.0')
print(expr.evalf(subs={x: 1}))

方案2:简化表达式优化计算

由于log(E)的结果是1,完全可以从表达式中移除这一项,进一步简化计算逻辑:

from sympy import symbols, E, sin, cos

x = symbols('x')
expr = E**sin(x) * x * cos(x) + 1.0
print(expr.evalf(subs={x: 1}))

运行上述代码后,会输出代入x=1后的数值结果:2.97249868051821

内容的提问来源于stack exchange,提问作者Michael Eliosov

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 12:38:16