在以下示例中未正确解析函数expm1
:
from sympy.parsing.sympy_parser import parse_expr
print parse_expr('expm1(x)').diff('x')
给出
Derivative(expm1(x), x)
如何sympy
将expm1
标识为符号函数,以便得到与
print parse_expr('exp(x) - 1').diff('x')
给出了exp(x)
?
答案 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