如何解决函数的 Sympy 模式
在 Wolfram Research Mathematica 中,可以定义类型的替换规则
sustitution = g_[arg___] -> g[Sequence @@ Reverse[{arg}]]
然后可以将其应用于涉及函数的不同表达式,结果如下:
f[x,y] /. sustitution >> f[y,x]
g[x1,x2,x3] >> g[x3,x1]
h[1,z,w,t]/.sustitution >> h[t,1]
因为可以使用名称为 g_ 的模式作为函数名称,而使用另一个模式 arg___ 作为参数,因此无论出现在表达式中的函数名称如何,相同的替换规则都是有效的.
是否可以将 WildFunction 符号与 replace 一起使用以获得与 Sympy 类似的效果?
解决方法
SymPy 类型的 arg 重映射函数不需要 arg__
,因为可以从函数调用本身检索 args:
>>> from sympy.abc import x,y,z
>>> from sympy import Function
>>> f = Function('f')
>>> g_ = lambda f: f.func(*list(reversed(f.args)))
>>> g_(f(x,z))
f(z,x)
另一种在表达式中以相同方式更改所有用户定义函数的方法是使用 replace
,如下所示:
>>> from sympy.abc import *
>>> from sympy import Function,AppliedUndef
>>> f,g,h,F=symbols('f,F',cls=Function)
>>> eq=f(x,z)+g(y,x,w)*h(1,u,t)**cos(F(x,1,w))
>>> eq.replace(
... lambda x: isinstance(x,AppliedUndef),... lambda x: x.func(*list(reversed(x.args))))
f(z,x) + g(w,y)*h(t,1)**cos(F(w,x))
如果您想对所有函数应用这种转换,请使用 Function
而不是 AppliedUndef
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。