SymPy可以理解由求和指数索引的变量吗?

时间:2017-02-06 14:45:19

标签: sympy

我有一个形式的表达式(在LaTeX语法中):

\sum_{k=0}^{K-1} a_k = 0

a_k是“下标k”,我正在建立一个线性方程组的变量列表之一。我希望能够在紧凑的情况下将这个方程式表达为SymPy。一种尽可能的方式。好像我想用Sum()函数来表示求和,但我不知道如何告诉它on term k in the sum, a_k refers to the k-th symbol

这是否可行,例如,如果我设置这样的符号列表?

a = [sympy.symbols('a' + str(i)) for i in xrange(K)]

1 个答案:

答案 0 :(得分:5)

你的意思是这样吗?

In [1]: a = IndexedBase("a")

In [2]: Sum(a[k], (k, 0, K-1))
Out[2]: 
K - 1     
 ___      
 ╲        
  ╲   a[k]
  ╱       
 ╱        
 ‾‾‾      
k = 0

IndexedBase应该创建一个需要在每次使用时指定索引的变量。如果指数不同,则应将变量视为不同(例如a[k]a[j])。

如果您的总和已知限制(即非文字),您可以展开它:

In [3]: Sum(a[k], (k, 0, 10))
Out[3]: 
  10      
 ___      
 ╲        
  ╲   a[k]
  ╱       
 ╱        
 ‾‾‾      
k = 0     

In [4]: Sum(a[k], (k, 0, 10)).doit()
Out[4]: a[0] + a[1] + a[2] + a[3] + a[4] + a[5] + a[6] + a[7] + a[8] + a[9] + a[10]

不幸的是,并非SymPy的所有算法都完全支持IndexedBase个对象。在这种情况下,建议用Symbol替换。