首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有Hadamard变换(叠加) Qubit的3路量子纠缠

具有Hadamard变换(叠加) Qubit的3路量子纠缠
EN

Stack Overflow用户
提问于 2018-03-23 20:53:20
回答 2查看 215关注 0票数 0

在3量子位上运行以下操作时:

代码语言:javascript
复制
H(qubits[0]);
CNOT(qubits[0], qubits[1]);
CNOT(qubits[0], qubits[2]);
CNOT(qubits[1], qubits[2]);

我得到了这样的结果:量子位0是叠加的,量子位1和量子位0一样,2和量子位0一样,一半的时间。例如,类似叠加的值。

为什么在量子位1和量子位0上运行CNOT之后,在量子位2上运行CNOT和其他两个量子位后,就会使qubit 2进入量子位0与而非qubit 0之间的叠加状态?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-03-24 10:12:53

如果你做一些量子计算数学,你会发现你最终处于以下状态:

代码语言:javascript
复制
|ψ ⟩ = (|000⟩ + |011⟩) / √2

这实质上是量子位元0和纠缠量子位元1和2之间的叠加。

代码语言:javascript
复制
|ψ ⟩ = |0⟩ ⊗ (|00⟩ + |11⟩) / √2

您可以用Python中的IBM QISKit来计算这个数学:

代码语言:javascript
复制
from qiskit import QuantumProgram
from math import sqrt
import numpy as np

qp = QuantumProgram()
cname = '3-qubit'
num_qubits = 3
qr = qp.create_quantum_register('qr', num_qubits)
cr = qp.create_classical_register('cr', num_qubits)
qc = qp.create_circuit(cname, [qr], [cr])

qc.h(qr[0])
qc.cx(qr[0], qr[1])
qc.cx(qr[0], qr[2])
qc.cx(qr[1], qr[2])

qc.measure(qr, cr)

results = qp.execute(cname)
print(results.get_counts(cname))

这将给出类似于以下结果的结果:

代码语言:javascript
复制
{'000': 530, '011': 494}

你也可以显式地获得这个状态,通过你的电路的幺正矩阵,并将它应用到你的初始状态- [1,0,0,0,0,0,0,0],也就是向量〉。

代码语言:javascript
复制
results = qp.execute(cname, backend='local_unitary_simulator', shots=1)
data = results.get_data(cname)
u = np.real(data['unitary'] * sqrt(2.0)).astype(int)
psi = np.zeros(2**num_qubits, dtype=np.int_)
psi[0] = 1
u @ psi

结果是

代码语言:javascript
复制
array([1, 0, 0, 1, 0, 0, 0, 0])

第0项是〉,第3项是\011〉.

票数 0
EN

Stack Overflow用户

发布于 2018-10-22 12:15:44

在下面,您可以看到这个量子操作是按位算符量子的,

代码语言:javascript
复制
qubits[0]= a
qubits[1] = y
qubits[2] = z 

设@是位运算符,x@x =0,任意p@0 =p

代码语言:javascript
复制
qubits[0] = H(a) = x  (superposition state, final x ) 
CNOT(qubits[0], qubits[1]) = CNOT(x,y) = (x, x @ y) = (x, yy)  (final qubits[1]=yy)
CNOT(qubits[0], qubits[2]) = CNOT(x,z) = (x, x @ z) = (x, zz)
CNOT(qubits[1], qubits[2]) = CNOT(yy,zz) = (yy, zz@ yy) = (x@y, x@z@x@y)  = (x@y,z@y) (final qubits[2]=z@y)

(x,y,z) = (0,0,0) ==> (qubits[0],qubits[1],qubits[2]) = (0,0,0)
(x,y,z) = (0,0,1) ==> (qubits[0],qubits[1],qubits[2]) = (0,0,1)
(x,y,z) = (0,1,0) ==> (qubits[0],qubits[1],qubits[2]) = (0,1,1)
(x,y,z) = (0,1,1) ==> (qubits[0],qubits[1],qubits[2]) = (0,1,0)
(x,y,z) = (1,0,0) ==> (qubits[0],qubits[1],qubits[2]) = (1,1,0)
(x,y,z) = (1,0,1) ==> (qubits[0],qubits[1],qubits[2]) = (1,1,1)
(x,y,z) = (1,1,0) ==> (qubits[0],qubits[1],qubits[2]) = (1,0,1)
(x,y,z) = (1,1,1) ==> (qubits[0],qubits[1],qubits[2]) = (1,0,0)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49458157

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档