블로흐 구면으로 단일 큐비트 게이트 이해하기

양자 게이트를 표현하는 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 Aerstatevector_simulator를 사용하였습니다.

1. X축 회전: X gate, Rx gate

X gate는 x축을 기준으로 π만큼 반시계 방향으로 회전시킵니다.

\[X = \begin{bmatrix} 0 & 1\\ 1 & 0 \end{bmatrix}\]
qc = QuantumCircuit(1)
qc.x(0)
result = execute(qc, backend).result()
plot_bloch_multivector(result.get_statevector())

x

*π가 아닌 다른 θ 값으로 지정할 수 있는 Rx gate도 존재합니다.

\[Rx(\theta ) = \begin{bmatrix} cos(\frac{\theta}{2}) & -i*sin(\frac{\theta}{2})\\ -i*sin(\frac{\theta}{2}) & cos(\frac{\theta}{2}) \end{bmatrix}\]
qc = QuantumCircuit(1)
qc.rx(pi/4, 0)
result = execute(qc, backend).result()
plot_bloch_multivector(result.get_statevector())

rx

2. Y축 회전: Y gate, Ry gate

Y gate는 y축을 기준으로 π만큼 반시계 방향으로 회전시킵니다.

\[Y = \begin{bmatrix} 0 & -i\\ i & 0 \end{bmatrix}\]
qc = QuantumCircuit(1)
qc.y(0)
result = execute(qc, backend).result()
plot_bloch_multivector(result.get_statevector())

y

*π가 아닌 다른 θ 값으로 지정할 수 있는 Ry gate도 존재합니다.

\[Ry(\theta ) = \begin{bmatrix} cos(\frac{\theta}{2}) & -sin(\frac{\theta}{2})\\ sin(\frac{\theta}{2}) & cos(\frac{\theta}{2}) \end{bmatrix}\]
qc = QuantumCircuit(1)
qc.ry(pi/4, 0)
result = execute(qc, backend).result()
plot_bloch_multivector(result.get_statevector())

ry

3. Z축 회전: Z gate, T gate, S gate, Rz gate, P gate

Z gate는 z축을 기준으로 π만큼 반시계 방향으로 회전시킵니다.

\[Z = \begin{bmatrix} 1 & 0\\ 0 & -1 \end{bmatrix}\]
qc = QuantumCircuit(1)
qc.z(0)
result = execute(qc, backend).result()
plot_bloch_multivector(result.get_statevector())

z

*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())

rz

4. 중첩 상태: H gate

H(Hadamard) gate는 중첩 상태를 만들어주는 게이트로, z축 기준 π만큼, y축 기준 π/2만큼 회전시킵니다.

\[H = \frac{1}{\sqrt{2}}\begin{bmatrix} 1 & 1 \\ 1& -1 \end{bmatrix}\]
qc = QuantumCircuit(1)
qc.h(0)
result = execute(qc, backend).result()
plot_bloch_multivector(result.get_statevector())

h

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())

z

References


💬 Any comments and suggestions will be appreciated.

Leave a comment