블로흐 구면으로 단일 큐비트 게이트 이해하기
양자 게이트를 표현하는 4가지 방법 중 블로흐 구면에 중점을 두고, 단일 큐비트 게이트(single qubit gates)를 이해해봅시다.
from qiskit import QuantumCircuit, execute, Aer
from qiskit.tools.visualization import plot_bloch_multivector
from math import pi
backend = Aer.get_backend('statevector_simulator')
백엔드는 Qiskit Aer
의 statevector_simulator
를 사용하였습니다.
1. X축 회전: X gate, Rx gate
X gate는 x축을 기준으로 π
만큼 반시계 방향으로 회전시킵니다.
qc = QuantumCircuit(1)
qc.x(0)
result = execute(qc, backend).result()
plot_bloch_multivector(result.get_statevector())
*π
가 아닌 다른 θ 값으로 지정할 수 있는 Rx gate도 존재합니다.
qc = QuantumCircuit(1)
qc.rx(pi/4, 0)
result = execute(qc, backend).result()
plot_bloch_multivector(result.get_statevector())
2. Y축 회전: Y gate, Ry gate
Y gate는 y축을 기준으로 π
만큼 반시계 방향으로 회전시킵니다.
qc = QuantumCircuit(1)
qc.y(0)
result = execute(qc, backend).result()
plot_bloch_multivector(result.get_statevector())
*π
가 아닌 다른 θ 값으로 지정할 수 있는 Ry gate도 존재합니다.
qc = QuantumCircuit(1)
qc.ry(pi/4, 0)
result = execute(qc, backend).result()
plot_bloch_multivector(result.get_statevector())
3. Z축 회전: Z gate, T gate, S gate, Rz gate, P gate
Z gate는 z축을 기준으로 π
만큼 반시계 방향으로 회전시킵니다.
qc = QuantumCircuit(1)
qc.z(0)
result = execute(qc, backend).result()
plot_bloch_multivector(result.get_statevector())
*T gate는 π/4
, S gate는 π/2
만큼 z축을 기준으로 회전시킵니다.
*특정 값이 아닌 다른 θ 값으로 지정할 수 있는 Rz gate와 P gate도 존재합니다.
\[Rz(\theta ) = \begin{bmatrix} e^{-i*\frac{\theta}{2}} & 0 \\ 0 & e^{i*\frac{\theta}{2}} \end{bmatrix}\] \[P(\theta ) = \begin{bmatrix} 1 & 0 \\ 0 & e^{i*\theta} \end{bmatrix}\]qc = QuantumCircuit(1)
qc.rz(pi/4, 0) # same with `qc.p(pi/4, 0)`
result = execute(qc, backend).result()
plot_bloch_multivector(result.get_statevector())
4. 중첩 상태: H gate
H(Hadamard) gate는 중첩 상태를 만들어주는 게이트로, z축 기준 π
만큼, y축 기준 π/2
만큼 회전시킵니다.
qc = QuantumCircuit(1)
qc.h(0)
result = execute(qc, backend).result()
plot_bloch_multivector(result.get_statevector())
5. 변화 없음: I gate
I gate는 현재 큐비트에 아무 영향을 주지 않습니다.
\[I = \begin{bmatrix} 1 & 0\\ 0 & 1 \end{bmatrix}\]qc = QuantumCircuit(1)
qc.i(0)
result = execute(qc, backend).result()
plot_bloch_multivector(result.get_statevector())
References
💬 Any comments and suggestions will be appreciated.
Leave a comment