我正在尝试使用SymPy来计算某些表达式,但有时候,单独使用.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())
对于那些想要知道的人,是的,我需要解析一个字符串来获得该函数。
答案 0 :(得分:0)
问题在于,同情不会将e
解释为exp(1)
,而是将其视为符号e
,就像它将x
视为符号x
一样。如果你想让别人明白你想要什么,你可以写exp(1)
而不是e
。
请参阅下面的示例,了解sympy如何解释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))))
所以你要做的就是用e
替换字符串中的exp(1)
或稍后替换它。例如,您的代码可能如下所示:
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())