콘텐츠로 이동

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에 얼마나 가까운지 비교하라.