我想知道如何在sympy表达式中找到与Functions连接的符号。我知道.free_symbols
,.atoms(Function)
以及.atoms(AppliedUndef)
。这是一些代码来说明为什么这些都不满足我的需要。
f1 = Function(r'f_1')
f2 = Function(r'f_2')
c1, x = symbols(r'c_1, x')
expr = c1+f1(x)+f2(x)
print(expr)
# c_1 + f_1(x) + f_2(x)
print(expr.free_symbols)
# {x, c_1}
print(expr.atoms(Function))
# {f_1(x), f_2(x)}
from sympy.core.function import AppliedUndef
print(expr.atoms(AppliedUndef))
# {f_1(x), f_2(x)}
(注释是每个打印行的输出)。所以
.free_symbols
很好,它给了我c_1
和x
。但是,它不返回与功能f_1
和f_2
关联的符号。 (第一个问题:为什么?他们不以某种方式免费吗?)。 .atoms(Function)
也无济于事。它找到函数,但不返回其关联的符号(例如f_1
),而是返回整个函数调用(例如f_1(x)
)。主要问题:如何在上述表达式中找到符号
f_1
和f_2
?背景:我想要这个的原因是因为我想通过以下方式
lambdify
expr_num = lambdify([c1, f1, f2, x], expr)
但是我不想在表达式中手动给出参数
[c1, f1, f2, x]
,而是希望找到所有必需的符号。 最佳答案
以下内容获取免费的符号和AppliedUndef函数的名称:
>>> s = f(x).free_symbols
>>> func = set([i.func for i in f(x).atoms(Function) if isinstance(i, AppliedUndef)])
>>> s | func
{x, f}
关于python - 如何在SymPy表达式中查找自由符号*和*未定义函数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58257706/