我有各种涉及UndefinedFunction实例的SymPy表达式:
f = Function('f')
g = Function('g')
e = f(x) / g(x)
如何获取此类表达式中出现的函数调用列表?在这个例子中,我想得到[f(x), g(x)]
。
我知道free_symbols
,但它会回归set([x])
(应该这样)。
答案 0 :(得分:3)
你想使用atoms
是正确的,但要注意SymPy中的所有函数都来自Function
,而不仅仅是未定义的函数。所以你也会得到
>>> (sin(x) + f(x)).atoms(Function)
set([f(x), sin(x)])
因此,您需要进一步将列表缩小为仅UndefinedFunction
的函数。请注意UndefinedFunction
是f
的元类,所以要做到这一点,你需要像
>>> [i for i in expr.atoms(Function) if isinstance(i.__class__, UndefinedFunction)]
[f(x)]
答案 1 :(得分:1)
事实证明,atoms
成员方法可以接受要过滤的类型。所以
e.atoms(Function)
返回
set([f(x), g(x)])
正如我想要的那样。
这样的更好的东西e.diff(x).atoms(Derivative)
是可能的。