SymPy:反函数的简化
SymPy: simplifying of inverse function
我定义了 2 个 sympy 函数 f、g、s.t。 g 是 f 的倒数:
import sympy as sy
g = sy.Function('g')
class f(sy.Function):
def inverse(self, argindex=1):
return g
x, y = sy.symbols('x y')
print sy.solve(y - f(x), x) # [g(y)] - correct
但是如果我尝试计算 f(g(x)) sympy 不会简化这个:
print f(g(x)) # f(g(x))
print f(g(x)).doit() # f(g(x)) - why not x?
print f(g(x)).simplify() # f(g(x)) - why not x?
问题:如何表示f(g(x))只是x?
inverse
没有实现这样做。我为它打开了https://github.com/sympy/sympy/issues/10487。理想情况下,我在下面写的内容应该默认工作。
您可以通过定义 _eval_simplify
轻松使其工作,例如
class f(sy.Function):
def inverse(self, argindex=1):
return g
def _eval_simplify(self, ratio, measure):
if isinstance(self.args[0], self.inverse()):
return self.args[0].args[0]
return self
如果你有很多 类 你想用它来做你可以把它放在一个超类中。
In [30]: f(g(x))
Out[30]: f(g(x))
In [31]: f(g(x)).simplify()
Out[31]: x
或者如果您希望 doit()
这样做,您可以定义 doit()
。
我定义了 2 个 sympy 函数 f、g、s.t。 g 是 f 的倒数:
import sympy as sy
g = sy.Function('g')
class f(sy.Function):
def inverse(self, argindex=1):
return g
x, y = sy.symbols('x y')
print sy.solve(y - f(x), x) # [g(y)] - correct
但是如果我尝试计算 f(g(x)) sympy 不会简化这个:
print f(g(x)) # f(g(x))
print f(g(x)).doit() # f(g(x)) - why not x?
print f(g(x)).simplify() # f(g(x)) - why not x?
问题:如何表示f(g(x))只是x?
inverse
没有实现这样做。我为它打开了https://github.com/sympy/sympy/issues/10487。理想情况下,我在下面写的内容应该默认工作。
您可以通过定义 _eval_simplify
轻松使其工作,例如
class f(sy.Function):
def inverse(self, argindex=1):
return g
def _eval_simplify(self, ratio, measure):
if isinstance(self.args[0], self.inverse()):
return self.args[0].args[0]
return self
如果你有很多 类 你想用它来做你可以把它放在一个超类中。
In [30]: f(g(x))
Out[30]: f(g(x))
In [31]: f(g(x)).simplify()
Out[31]: x
或者如果您希望 doit()
这样做,您可以定义 doit()
。