sympy解析器不将expm1识别为符号函数

时间:2018-03-11 18:24:38

标签: python sympy

在以下示例中未正确解析函数expm1

from sympy.parsing.sympy_parser import parse_expr
print parse_expr('expm1(x)').diff('x')

给出

Derivative(expm1(x), x)

如何sympyexpm1标识为符号函数,以便得到与

相同的结果
print parse_expr('exp(x) - 1').diff('x')

给出了exp(x)

1 个答案:

答案 0 :(得分:3)

由于SymPy中没有内置expm1,因此解析器对此表示法一无所知。 local_dict的参数parse_expr可用于向SymPy解释不熟悉的函数和符号的含义。

expm1 = lambda x: exp(x)-1
parse_expr('expm1(x)', local_dict={"expm1": expm1})

返回exp(x) - 1

为了使expm1保持为具有已知导数的单个函数,而不是exp(x)-1,将其定义为SymPy函数(有关更多此类示例,请参阅tutorial)。

class expm1(Function):
    def fdiff(self, argindex=1):
        return exp(self.args[0])

确认这是有效的:

e = parse_expr('expm1(x)', local_dict={"expm1": expm1})
print(e)           # expm1(x)
print(e.diff(x))   # exp(x)
f = lambdify(x, e)
print(f(1))        # 1.718281828459045
print(f(1e-20))    # 1e-20, unlike exp(x)-1 which would evaluate to 0