如何枚举SymPy表达式中未定义的函数?

时间:2014-02-10 02:26:02

标签: sympy

我有各种涉及UndefinedFunction实例的SymPy表达式:

f = Function('f')
g = Function('g')
e = f(x) / g(x)

如何获取此类表达式中出现的函数调用列表?在这个例子中,我想得到[f(x), g(x)]

我知道free_symbols,但它会回归set([x])(应该这样)。

2 个答案:

答案 0 :(得分:3)

你想使用atoms是正确的,但要注意SymPy中的所有函数都来自Function,而不仅仅是未定义的函数。所以你也会得到

>>> (sin(x) + f(x)).atoms(Function)
set([f(x), sin(x)])

因此,您需要进一步将列表缩小为仅UndefinedFunction的函数。请注意UndefinedFunctionf的元类,所以要做到这一点,你需要像

这样的东西
>>> [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)

是可能的。