同义词中的列表/矩阵数组

时间:2016-04-06 13:46:27

标签: python 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一样。如何在同情中实现这一目标?

1 个答案:

答案 0 :(得分: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))