Python 符号乘法同余中的无穷和

Python 符号乘法同余中的无穷和,python,sympy,Python,Sympy,我正在编写一个软件,它使用SymPy来象征性地编写代码,我遇到了需要简化的乘法和。我使用的算法调用了将两个相乘的和转换为双和。下面是我试图实现的一个示例: from sympy import Sum, Function, Symbol, oo # Define variables n = Symbol('n') x = Symbol('x') t = Symbol('t') # Define functions theta = Function('theta')(t) p = Functio

我正在编写一个软件,它使用SymPy来象征性地编写代码,我遇到了需要简化的乘法和。我使用的算法调用了将两个相乘的和转换为双和。下面是我试图实现的一个示例:

from sympy import Sum, Function, Symbol, oo

# Define variables
n = Symbol('n')
x = Symbol('x')
t = Symbol('t')

# Define functions
theta = Function('theta')(t)
p = Function('p')(n,x)
q = Function('q')(n,x)

# Create Summations
pSum = Sum(p*theta**n, (n,0,oo))
qSum = Sum(q*theta**n, (n,0,oo))

# Multiply
out = pSum * qSum
print(out)
>>> Sum(p(n, x)*theta(t)**n, (n, 0, oo))*Sum(q(n, x)*theta(t)**n, (n, 0, oo))
我需要把这个转换成

print(out)
>>> Sum(Sum((p(i, x)*q(n-i, x))*theta**n, (i, 0, n)), (n, 0, oo))
我的方法是导入
Sum
并定义一个继承自
Sum
的类。然后,我定义
\uuuuuuuuuuuuuuuuuuuuuuu
操作符来执行我想要的操作。这适用于简单的情况,但在更复杂的情况下,它将不起作用。在本例中,第一种情况有效,但下一种情况不会成倍增加,因为*在symphy中时没有调用
\uuuuuuuuuuuuuuuuuu

import sympy
from sympy import expand, Function, Symbol, oo, diff, Sum, Derivative

class Sum2(Sum):

    # Overriding the __mul__ method.
    def __mul__(self, other):

        if isinstance(other, Sum2):
            i = Symbol('i')
            n = Symbol('n')
            return Sum2(Sum(self.args[0].subs(n, i)*other.args[0].subs(n, n-i), (i,0,n)), (n,0,oo))

        else:
            super().__mul__(other)

x = Symbol('x')
t = Symbol('t')
n = Symbol('n')

f = Function('f')(n, x)
a = Sum2(f*t**n, (n,0,oo))

# Works
print(a*a)

# Doesn't work.
c = (Derivative(a,x)*a).doit()
print(c)
print(c.doit())
print(expand(c))

我尝试过类似的方法,从
函数继承而来。同样的问题。也许
\uuuu mul\uuuu
不是重新定义的正确函数?我怎么能让无限和以这种方式相乘呢?

我想你的想法是对的<代码>\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。