我有一个ladder operatorâ
,它以以下方式作用于ket:
â |n〉= √n |n−1〉
â⁺ |n〉= √(n+1) |n+1〉
我想用这些关系来简化更复杂的表达式,例如â⁺â²|n〉
。这是我的Python代码:
import sympy
from sympy import *
from sympy.physics.quantum import *
n = symbols('n')
a = Operator('a')
ad = Dagger(a)
down = Eq( a *Ket(n), sqrt(n )*Ket(n-1) )
up = Eq( ad*Ket(n), sqrt(n+1)*Ket(n+1) )
expr = ad * a**2 * Ket(n)
在同形中使用已知等式的standard and most basic way是subs
但在本例中,它只对|n〉
有效,而对|n+1〉
或其他包含符号n
的ket无效。从中可以看出 这 示例:
In[1]: expr.subs( down.lhs, down.rhs ).subs( down.lhs, down.rhs ).subs( up.lhs, up.rhs )
Out[1]:
√n â⁺ â |n−1〉
我自己写了一个简单的算法,取得了最好的效果。该算法与this answer中的算法非常相似,您可以这样使用它:
结果
该算法只支持“纯”算子(没有任何运算)和左侧的伴随算子。例如,通过对
is_operator
和is_expandable_pow_of
进行一些小的修改,可以扩展算法,以允许在左侧使用逆运算符(No rights reserved.)
相关问题 更多 >
编程相关推荐