QuTiP中如何交换张量内子态位置且保持psi的ket属性
QuTiP 张量积量子态指定位置子系统交换实现方案
核心实现方法(推荐)
直接使用QuTiP量子对象(Qobj)内置的permute方法完成子系统顺序重排,该方法会自动保留量子态的右矢属性,不需要手动构造交换算符,操作无数值误差。
QuTiP中张量积的子系统索引从0开始计数:原有3体态的三个子系统索引依次为0(第一个fock态)、1(第二个fock态)、2(第三个fock态),要交换第二个和第三个位置的子系统,只需要给permute传入新顺序的原索引列表[0,2,1]即可,对应新张量积的第0位放原0号系统、第1位放原2号系统、第2位放原1号系统。
代码示例:
# 原有态定义(替换成你实际的N、constants取值即可) N = 5 constants = 0.8 psi = constants * tensor(fock(N,0), fock(N,1), fock(N,2)) # 执行子系统交换 psi = psi.permute([0, 2, 1])
结果验证
可以直接和目标态做差求模长验证正确性,同时检查态类型确认保持ket属性:
psi_target = constants * tensor(fock(N,0), fock(N,2), fock(N,1)) # 验证态完全一致,输出为0 print("态差值模长:", (psi - psi_target).norm()) # 验证态类型为右矢,输出'ket' print("态类型:", psi.type)
补充说明
- 该方法会自动修正Qobj的
dims维度标记,后续做偏迹、张量积、演化等操作不会出现维度不匹配问题,比手动reshape数组、手动构造SWAP算符的方案更稳妥。 - 如果需要以量子算符作用的形式完成交换(例如要把交换操作嵌入量子电路逻辑),可以构造作用在索引1、2位置的两体SWAP算符,扩展到3体全空间后作用在态上,效果和
permute完全一致,但实现更繁琐,无特殊需求直接用permute即可。
内容的提问来源于stack exchange,提问作者Stal
相关产品推荐
相关产品推荐

