2016-04-06 12 views
1

Ich möchte den folgenden Ausdruck in sympy erstellen: mListe/Array von Matrizen in sympy

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

M, U und A^(k) sind quadratische Matrizen der Größe.

Bisher konnte ich dies für eine gegebene p tun:

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

Allerdings habe ich nicht p auf eine feste Zahl festlegen möchten. Stattdessen möchte ich ein Symbol sein, genau wie m. Wie kann dies in Sympathie erreicht werden?

Antwort

1

Es könnte einen besseren Weg geben. Bis jetzt habe ich erreicht, was ich will, indem ich A als eine Funktion und nicht als eine Liste definiere:

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))