Lab 1. 큐비트와 상태 벡터
실습 실행: Colab 노트북 링크를 추가한다.
학습 목표
- 큐비트 상태를 상태 벡터로 표현하는 방법을 이해한다
- Qiskit으로 1큐비트 회로를 만들고 상태 벡터를 확인한다
- 측정 결과(counts)가 확률 분포를 따른다는 것을 확인한다
핵심 개념
상태 벡터
큐비트의 상태는 두 기저 상태 \(|0\rangle\), \(|1\rangle\)의 선형 결합으로 쓴다.
\[
|\psi\rangle = \alpha|0\rangle + \beta|1\rangle =
\begin{pmatrix} \alpha \\ \beta \end{pmatrix},
\qquad |\alpha|^2 + |\beta|^2 = 1
\]
측정하면 \(|\alpha|^2\)의 확률로 0, \(|\beta|^2\)의 확률로 1이 나온다.
기저 상태
| 상태 | 벡터 | 측정 결과 |
|---|---|---|
| \(\vert 0\rangle\) | \((1, 0)^T\) | 항상 0 |
| \(\vert 1\rangle\) | \((0, 1)^T\) | 항상 1 |
| \(\vert +\rangle\) | \(\frac{1}{\sqrt{2}}(1, 1)^T\) | 0과 1이 각각 50% |
환경 설정
!pip install qiskit -q
import numpy as np
from qiskit import QuantumCircuit
from qiskit.quantum_info import Statevector
from qiskit.primitives import StatevectorSampler
상태 벡터 확인
Hadamard 게이트로 \(|0\rangle\)을 균등 중첩 상태 \(|+\rangle\)로 만든다.
qc = QuantumCircuit(1)
qc.h(0)
sv = Statevector.from_instruction(qc)
print(sv)
print(np.round(sv.probabilities(), 3)) # [0.5 0.5]
측정 실행
측정을 추가하고 1000번 반복 실행한다.
qc_m = qc.copy()
qc_m.measure_all()
sampler = StatevectorSampler()
result = sampler.run([qc_m], shots=1000).result()
counts = result[0].data.meas.get_counts()
print(counts) # 예: {'0': 488, '1': 512}
해석
상태 벡터는 측정 전 확률을 정확히 알려주지만, 실제 양자컴퓨터에서는 상태 벡터를 직접 볼 수 없다. 측정 결과는 매번 0 또는 1 하나뿐이며, shots를 반복해 모은 counts로 확률을 추정한다.
과제 1: X 게이트
qc.h(0) 대신 qc.x(0)을 적용하라. 상태 벡터와 counts가 어떻게 바뀌는가?
# 학생 수정: qc.h(0) -> qc.x(0)
과제 2: shots 비교
shots를 10과 10000으로 각각 실행하라. counts의 비율이 0.5에 얼마나 가까운지 비교하라.