Ciao Sto cercando di eseguire una moltiplicazione di matrice ed espanderlo in seguito. Tuttavia, sympy
non sembra supportare l'espansione delle equazioni di matrice. Ad esempio Runge-Kutta 4 per matrici:Come espandere l'espressione di matrice in sympy
from sympy import init_session
init_session()
from sympy import *
A = MatrixSymbol('A', 3, 3)
x = MatrixSymbol('x', 3, 1)
dt = symbols('dt')
k1 = A*x
k2 = A*(x + S(1)/2*k1*dt)
k3 = A*(x + S(1)/2*k2*dt)
k4 = A*(x + k3*dt)
final = dt*S(1)/6*(k1 + 2*k2 + 2*k3 + k4)
final.expand()
Con risultato
Traceback (most recent call last)
<ipython-input-38-b3ff67883c61> in <module>()
12 final = dt*1/6*(k1+2*k2+2*k3+k4)
13
---> 14 final.expand()
AttributeError: 'MatMul' object has no attribute 'expand'
Spero l'espressione può essere espansa come la variante scalare:
A,x,dt = symbols('A x dt')
k1 = A*x
k2 = A*(x+k1*dt*S(1)/2)
k3 = A*(x+k2*dt*S(1)/2)
k4 = A*(x+k3*dt)
final = x+dt*(S(1)/6)*(k1+k2+k3+k4)
collect(expand((final)),x)
Con risultato:
x*(A**4*dt**4/24 + A**3*dt**3/8 + A**2*dt**2/3 + 2*A*dt/3 + 1)
È possibile modificare anche un'espressione di matrice?
La risposta di nicoguaro elimina l'errore, ma espande l'intera espressione in una matrice. Come illustrato nell'esempio scalare, non quello che sto cercando
Dovrebbe funzionare. Ho aperto https://github.com/sympy/sympy/issues/10360. – asmeurer