gpt4 book ai didi

sympy - 用同名符号替换 sympy 表达式中的函数

转载 作者:行者123 更新时间:2023-12-05 07:42:49 29 4
gpt4 key购买 nike

Function 出现在方程中或者是要求解的目标时,sympy 的 solve 函数似乎无法求解某些方程。

为了解决这个问题,我想创建一个通用函数,它会自动用同名的 Symbol 替换表达式中的 Function

例如,如果 Function('myfunc')(Symbol('t')) 出现在表达式中,我想用 Symbol('myfunc')

subs 函数无法执行此操作,因为必须事先明确知道名称。

replace 函数看起来很有前途,尤其是它的 func -> func 风格,但我不知道如何从对象中获取函数对象的名称。

最佳答案

这是我的建议:

import sympy

t = sympy.Symbol("t")
x = sympy.Symbol("x")
F = sympy.Function("F")(t)
G = sympy.Function("G")

def remove_undefineds(expression):
for item in sympy.preorder_traversal(expression):
if isinstance(item, sympy.function.AppliedUndef):
name = str(item).split('(')[0]
expression = expression.subs(item, sympy.Symbol(name))
return expression


expression = F + G(x) + t**x

cleaned = remove_undefineds(expression)

产量:

    In [1]: expression
Out[1]: t**x + F(t) + G(x)

In [2]: cleaned
Out[2]: F + G + t**x

想法是遍历表达式的 preorder_traversal,检查每个项目是否是 AppliedUndefined 的实例(即 F(_),其中 F 是未定义的函数),如果是,则将其替换为相应名称的符号.

我使用 string split 来单独获取“myfunc”部分,假设参数将在这一步被删除;否则可以用 str(item) 替换。

我还假设只替换未定义的函数,否则就必须相应地增加......

关于sympy - 用同名符号替换 sympy 表达式中的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44169734/

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