Python 符号乘法同余中的无穷和
我正在编写一个软件,它使用SymPy来象征性地编写代码,我遇到了需要简化的乘法和。我使用的算法调用了将两个相乘的和转换为双和。下面是我试图实现的一个示例: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
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。