SymPy:求和的索引符号

SymPy : Indexed symbols to Summation

我有这样的表达:

-(a[1]*b[1] + a[2]*b[2])/((a[1]*b[1] - a[1] + a[2]*b[2] - a[2])) 

然后转

(-summation(b[omega]*a[omega]))/(summation((b[omega]-1)*a[omega]))

哪里

omega = 1,2 

可能吗?

Python 循环可能比您要执行的操作更简单。

类似

numerator = -sum([b[omega]*a[omega] for omega in range(len(a))])
denominator = sum([(b[omega]-1)*a[omega] for omega in range(len(a))])
result = numerator/denominator

如果你想要更多基于 SymPy 的东西,你将不得不更多地参与,因为 Python 在索引数组时不接受符号。可能有很多方法可以做到这一点,但这是第一个想到的方法:

from sympy import *
omega = symbols('omega')
a = symbols('a1 a2')
b = symbols('b1 b2')

class A(Function):
    @classmethod
    def eval(self, x):
        if isinstance(x, Symbol):
            return
        else:
            return a[x]

class B(Function):
    @classmethod
    def eval(self, x):
        if isinstance(x, Symbol):
            return
        else:
            return b[x]

# indexing starts at 0
numerator = -summation(B(omega)*A(omega), (omega, 0, 1))
denominator = summation((B(omega)-1)*A(omega), (omega, 0, 1))
result = numerator/denominator