微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在Sympy的方程中分解矩阵的幂?

如何解决如何在Sympy的方程中分解矩阵的幂?

我有一个来自于的表达式

from sympy.physics.quantum import Commutator as cmm

    x,t,A,V,W,D = sp.symbols('x t A V W D',commutative = False)
    Q = sp.Function('Q',commutative = False)
    F = (sp.diff(Q(x,t),x)+ cmm(W,Q(x,t)).doit() - sp.I*cmm(A,t)+ cmm(W,t)).doit()).doit())*(sp.diff(Q(x,t)).doit()).doit())
    F.expand()

这给了我一个在 W 中具有零阶元素、在 W 中具有一阶和二阶元素的表达式。我只想获得第一个订单 W。我尝试了因式分解程序,但似乎由于没有交换的事实,它无法识别 W 的幂。它总是给我 0。有没有简单的方法可以做到这一点?我当然可以手工完成,但这不是我的目标。

谢谢

解决方法

您可以通过在遍历 F 的参数时收集它们来获得 W 中的所有一阶项:

>>> from sympy import Add
>>> first_order_terms = []
>>> for i in Add.make_args(F.expand()):
...   if i == W or i.is_Mul and i.has(W) and i.subs(W,y).as_independent(y)[1] == y:
...     first_order_terms.append(i)
... 
>>> Add(*first_order_terms)
-A*W*Q(x,t)*A*Q(x,t) - I*A*W*Q(x,t)*Derivative(Q(x,t),x) + A*W*Q(x,t)**2*A - 
A*Q(x,t)*A*W*Q(x,t) + A*Q(x,t)*W + A*Q(x,t)*W*A*Q(x,t) - I*A*Q(x,t)*W*Q(x,t) + I*A*Q(x,t)*W*Derivative(Q(x,x) + I*A*Q(x,t)**2*W - A*Q(x,t)**2*W*A - I*W*Q(x,t) - W*Q(x,t)*A + I*W*Q(x,t)*A*Derivative(Q(x,x) + W*Q(x,t)*A**2*Q(x,t) + W*Q(x,x) + I*W*Q(x,t)**2*A + I*Q(x,t) - Q(x,t)*A - I*Q(x,t)*W + Q(x,t)*W*A + Q(x,t)*A**2*W*Q(x,t)*W + I*Q(x,t) + Q(x,t)*W*A*Derivative(Q(x,x) - Q(x,t)*W*A**2*Q(x,t) - I*Q(x,t)*A - Q(x,x) - I*Derivative(Q(x,x)*A*W*Q(x,t) + I*Derivative(Q(x,x)*A*Q(x,t)*W + 
Derivative(Q(x,x)*W*Q(x,t)*A - 
Derivative(Q(x,x)*Q(x,t)*W - I*Derivative(Q(x,t)*W*A

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。