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
相关产品推荐
相关产品推荐

