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
我有这样的表达:
-(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