我正在尝试以f(g(x))
的形式生成一些随机表达式。我希望能够将g
替换为sin(x)
或x**2
,并将f
替换为cos(x)
或log(x)
。所以我会得到类似sin(cos(x))
或log(x**2)
的东西(但随机)。
此任务遇到的部分是替换外部和内部函数。
这是我的代码:
import sympy
from sympy import abc
x = abc.x
f = sympy.Function('f')(x)
g = sympy.Function('g')(x)
full=f.subs(x, g)
newExpr = sympy.sin(x)
newExpr2 = sympy.cos(x)
print(full)
replaced_inner = full.subs(g, newExpr)
print(replaced_inner)
both = replaced_inner.subs(f, newExpr2)
print(both)
full
打印f(g(x))
,这样可以正常工作
replaced_inner
打印f(sin(x))
,因此效果很好
我希望both
打印f(sin(x))
时会打印cos(sin(x))
我尝试使用args[0]
和f.func
,但没有取得进展。
如何替换内部和外部函数(以及最终更复杂的东西,如f(g(h(x)))
。
我可以简单地创建cos(sin(x))
,但是我想使用变量来做,这样我就可以随机分配要替换的函数。
答案 0 :(得分:2)
问题出在诸如<{1}}之类的功能和诸如sympy.Function('f')
之类的表达式上。定义sympy.Function('f')(x)
后,您将f = sympy.Function('f')(x)
表达式f
制成。由于
表达式f(x)
没有f(g(x))
作为子表达式,尝试替换失败。
如果您使用实际功能,而不是过早插入f(x)
,则所有这些都已解决。
x
此打印
f = sympy.Function('f')
g = sympy.Function('g')
full = f(g(x))
newExpr = sympy.sin
newExpr2 = sympy.cos
print(full)
replaced_inner = full.subs(g, newExpr)
print(replaced_inner)
both = replaced_inner.subs(f, newExpr2)
print(both)
此外:您可能还对支持某些模式的replace
方法感兴趣。这里不是必需的,但是对于更高级的替换来说可能是必需的。