gpt4 book ai didi

python - 如何在 SymPy 表达式中查找自由符号*和*未定义函数?

转载 作者:行者123 更新时间:2023-12-01 07:10:18 25 4
gpt4 key购买 nike

我想知道如何找到与 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_1x。但是,它不会返回与函数 f_1f_2 关联的符号。 (第一个问题:为什么?它们不是免费的吗?)。 .atoms(Function) 也没有帮助。它找到函数,但不返回其关联符号(例如 f_1),而是返回整个函数调用(例如 f_1(x))。

主要问题:如何在上述表达式中找到符号f_1f_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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com