sympy log_expand两个未定义函数的乘积

时间:2017-08-28 08:20:53

标签: sympy

我在Sympy中创建了两个未定义的函数。当我使用两个未定义函数的乘积的log时,我应用log_expand(),我得不到两个未定义函数的日志总和。

最小工作示例(MWE):

class A(Function):

    nargs = 1

    def fdiff(self, argindex=1):
        if argindex == 1:
            return -1*self.args[0]*A(self.args[0])
        else:
            raise ArgumentIndexError(self, argindex)


class B(Function):

    nargs = 1

    def fdiff(self, argindex=1):
        if argindex == 1:
            return self.args[0]*B(self.args[0])
        else:
            raise ArgumentIndexError(self, argindex)


x = Symbol('x', real=True)
expr = A(x)*B(x)
pprint(expr)                   # Outputs: A(x)⋅B(x)
pprint(log(expr))              # Outputs: log(A(x)⋅B(x))
pprint(expand_log(log(expr)))  # Outputs: log(A(x)⋅B(x))

最后一行的预期输出为log(A(x)) + log(B(x)),但我得到log(A(x)⋅B(x))

我是否需要在每个类中定义属性或方法?

请注意,MWE中的未定义函数仅用于演示目的。实际函数更复杂,并且使用eval类方法(@classmethod)。

1 个答案:

答案 0 :(得分:1)

如果为每个功能设置属性is_positive=True,它们将展开。使用SymPy函数,我这样做:

>>> f,g=symbols('f g', cls=Function, positive=True)
>>> expand_log(log(f(x)*g(x)))
log(f(x)) + log(g(x))