2016-04-06 51 views
1

矩阵阵列我想在sympy创建下面的表达式:列表/在sympy

\sum_{k=0}^p \mathbf{M}\mathbf{A}^{(k)}\mathbf{U}

MUA^(k)是大小m的方阵。

到目前为止,我设法为给定p做到这一点:

import sympy 

m = sympy.symbols('m', integer=True) 
p = 3 

A = [sympy.MatrixSymbol('A^({})'.format(k), m, m) for k in range(p)] 
M = sympy.MatrixSymbol('M', m, m) 
U = sympy.MatrixSymbol('U', m, m) 

expr = M*A[0]*U 
for k in range(1, p): 
    expr += M*A[k]*U 
expr 

enter image description here

不过,我不想设定p到一个固定的数字。相反,我想p是一个符号,就像m。这怎么能在sympy中实现?

回答

1

可能有更好的办法。现在,我设法通过将A定义为函数而不是列表来达到我想要的效果:

m, p, k = symbols('m, p, k') 

M = sympy.MatrixSymbol('M', m, m) 
U = sympy.MatrixSymbol('U', m, m) 

class A(sympy.Function): 
    @classmethod 
    def eval(cls, k): 
     return sympy.MatrixSymbol('A^({})'.format(k), m, m) 

sympy.Sum(M * A(k) * U, (k, 1, p))