Мне интересно, как найти символы, связанные с функциями , в выражении симпты. Мне известны .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]
вручную я бы хотел найти все необходимые символы в выражении.