在SymPy中,我试图执行一个矩阵乘法,然后将其展开。然而,矩阵的展开似乎并不支持。例如,矩阵的四阶龙格库塔(RK4):
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()
从而产生结果
^{pr2}$我希望表达式可以像标量变量一样进行扩展:
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)
结果是:
x*(A**4*dt**4/24 + A**3*dt**3/8 + A**2*dt**2/3 + 2*A*dt/3 + 1)
有可能同样地改变矩阵表达式吗?在
尼科瓜罗的回答消除了错误,但将整个表达式扩展为一个矩阵。正如标量示例所示,不是我要找的。在
我认为你可以扩展矩阵表达式。但是你得到的不是矩阵,而是两个符号矩阵(Matsymbols)的乘法。如果你把你的表达式变成一个矩阵,你就可以得到你想要的展开式。请参阅下面的附加行
Matrix(final)
创建和显式矩阵与您的个别方程。将它们保留在矩阵中可能比较方便,这样您对一个条目所做的任何操作都可以对所有条目执行。为此,请将要执行的操作定义为applyfunc
的函数参数:对于打印经济,我使用带有紧凑符号项的矩阵来计算相同的值,然后在简化的矩阵上运行
^{pr2}$cse
得到:对非对易表达式的有限支持也可用,在这种情况下可以帮助:
但并非所有的简化例程都能识别nc(这是一个已知的问题):
相关问题 更多 >
编程相关推荐