如何使用SymPy评估具有指数的单个变量函数?

时间:2017-05-27 14:27:11

标签: python python-3.x sympy

我正在尝试使用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())

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

1 个答案:

答案 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())