PennyLane量子库计算异常:Pauli算符张量积期望值不一致问题
问题原因解析
核心错误:混淆矩阵乘法与张量积
你物理推导里的关键错误是把矩阵乘法和张量积搞混了:
- Pauli X算子在同一量子比特上的矩阵乘法确实是单位矩阵:$X \cdot X = I$;
- 但X与自身的张量积(作用在不同量子比特)不是单位矩阵:$X \otimes X$是两比特的XX关联算子,它的平方才是单位矩阵,本身不是。
所以你说的$X(0) \otimes X(1) \otimes X(1)$等价于$X(0)$的结论不成立——这里的$X(1) \otimes X(1)$是两比特的XX算子,不是单位矩阵,整个三比特算子的期望值是$\langle X(0) \rangle \cdot \langle X(1) \rangle \cdot \langle X(1) \rangle$,和$\langle X(0) \rangle$完全不同。
代码中的算子实际含义
你的两段代码都是两比特系统,第一段里的qml.PauliX(0) @ qml.PauliX(1) @ qml.PauliX(1)是算子复合操作(即量子门的先后作用):
- 先对比特1应用X门;
- 再对比特1应用X门——两次X门作用抵消,等价于对比特1做单位操作;
- 最后对比特0应用X门。
整个复合操作等价于仅对比特0应用X门、比特1保持单位操作(即$X(0) \otimes I(1)$),所以它的期望值和第二段代码里的$\langle X(0) \rangle$理论上完全一致。
为什么你看到结果不同?
如果实际运行两段代码结果不一样,大概率是以下原因:
- PennyLane版本问题:旧版本对算子复合的处理可能存在bug,建议升级到最新稳定版;
- 代码书写错误:比如误把
@写成其他符号、wires编号写错等; - 浮点计算误差:极小的数值差异可能来自浮点精度限制,但通常可以忽略。
补充:如果要实现三比特的$X(0) \otimes X(1) \otimes X(2)$
若你想测试三比特系统中$X(0) \otimes X(1) \otimes X(2)$的期望值,需要创建三比特设备,代码示例:
import pennylane as qml dev = qml.device("default.qubit", wires=3) @qml.qnode(dev) def func(x, y, z): qml.RY(x, wires=0) qml.RY(y, wires=1) qml.RY(z, wires=2) return qml.expval(qml.PauliX(0) @ qml.PauliX(1) @ qml.PauliX(2)) print(func(10,5,3))
此时期望值为$\langle X(0) \rangle \cdot \langle X(1) \rangle \cdot \langle X(2) \rangle$,和$\langle X(0) \rangle$明显不同。
内容的提问来源于stack exchange,提问作者navid
相关产品推荐
相关产品推荐

