Python 如何用SymPy计算具有指数的单变量函数?

Python 如何用SymPy计算具有指数的单变量函数?,python,python-3.x,sympy,Python,Python 3.x,Sympy,我试图使用symphy来计算一些表达式,但有时,单独使用.subs()函数,或后跟.evalf(),不会给出任何浮点值或整数值 ##--IMPORT from mpmath import * from sympy import * from sympy.parsing.sympy_parser import parse_expr x = symbols("x") _fOfX = "e**x + x + 1" if __name__== "__main__": #Function t

我试图使用symphy来计算一些表达式,但有时,单独使用
.subs()
函数,或后跟
.evalf()
,不会给出任何浮点值或整数值

##--IMPORT
from mpmath import *
from sympy import *
from sympy.parsing.sympy_parser import parse_expr

x = symbols("x")

_fOfX = "e**x + x + 1"

if __name__== "__main__":
    #Function to sympy expression
    _sympyFunction = sympify(_fOfX)
    #Calcolo la derivata prima
    _dPrima = diff(_sympyFunction,x,1)
    _dPrima = _dPrima.subs(x,5)

    print(_dPrima.evalf())

对于那些想知道的人来说,是的,我需要解析一个字符串来获得函数。

问题是,sympy不会将
e
解释为
exp(1)
,而是将
e
作为符号,就像它将
x
视为
x
一样。如果你想让sympy理解你想要的东西,你可以写
exp(1)
int而不是
e

请参见下面的示例,了解Symphy如何解释string1和string2

import sympy as sym

string1 = "e"
string2 = "exp(1)"

sym_string1 = sym.sympify(string1)
sym_string2 = sym.sympify(string2)

print(type(sym_string1))
print(type(sym_string2))

e = sym.symbols('e')
print(type(sym_string1.subs(e, sym.exp(1))))
因此,您可以用
exp(1)
替换字符串中的
e
,或者稍后替换它。例如,您的代码可能如下所示:

from mpmath import *
from sympy import *
from sympy.parsing.sympy_parser import parse_expr

x = symbols("x")

_fOfX = "e**x + x + 1"

if __name__== "__main__":
    #Function to sympy expression
    _sympyFunction = sympify(_fOfX)
    #Calcolo la derivata prima
    _dPrima = diff(_sympyFunction,x,1)
    _dPrima = _dPrima.subs(x,5)
    #Replace e with exp(1)
    e = symbols('e')
    _dPrima = _dPrima.subs(e, exp(1))

    print(_dPrima.evalf())

e的定义不应该包含在“从mpath导入*”中吗?它确实被导入了,但sympy应该如何知道它呢?Sympy无法处理您导入的所有其他软件包,因为有太多甚至不兼容的软件包。所以它只使用它自己和它自己的定义。务必小心使用
import*
。想象一下,您还可以从numpy import*获得
。然后,您将得到
e
的两个独立(从技术角度来看是不同的)定义。