Skip to main content
IBM Quantum Platform

불확실성 탐구

이 교실 내 키스킷 모듈을 사용하려면 학생에게 다음 패키지가 설치된 Python 환경이 있어야 합니다:

  • qiskit v2.1.0 이상
  • qiskit-ibm-runtime v0.40.1 이상
  • qiskit-aer v0.17.0 이상
  • qiskit.visualization
  • numpy
  • pylatexenc

위의 패키지를 설정하고 설치하려면 키스킷 설치 가이드를 참조하세요. 실제 양자 컴퓨터에서 작업을 실행하려면 학생들은 IBM Cloud 계정 설정 가이드의 단계에 따라 IBM Quantum®에 계정을 설정해야 합니다.

이 모듈은 테스트를 거쳐 8분 동안 QPU 시간을 사용했습니다. 이는 추정치일 뿐입니다. 실제 사용량은 다를 수 있습니다. 시간이 많이 걸리는 두 가지 계산은 헤더 코멘트에 표시되어 있으며, 학생이 QPU 시간이 부족한 경우 시뮬레이터에서 수행할 수 있습니다. 이를 제거하면 모듈은 30~30초의 QPU 시간만 필요합니다.

# Uncomment and modify this line as needed to install dependencies
#!pip install 'qiskit>=2.1.0' 'qiskit-ibm-runtime>=0.40.1' 'qiskit-aer>=0.17.0' 'numpy' 'pylatexenc'

아래에서 케이티 박사( McCormick )의 모듈 워크스루를 시청하거나 여기를 클릭하여 YouTube 에서 시청하세요.



소개

물리학 수업이 아니더라도 불확실성 원리에 대해 들어본 적이 있을 것입니다. 불확실성에 대한 일반적인 구어체 표현은 "무언가를 바라보면 그것에 영향을 미친다"입니다 확실히 그렇습니다. 그러나 불확실성을 설명하는 더 물리적인 방법은 두 가지를 동시에 임의의 정확도로 알 수 없는 비호환성이 있는 특정 물리적 관측값이 있다는 것입니다. 많은 학생들이 호환되지 않는 변수인 xxpxp_x, 즉 각각 xx -축이라고 하는 한 축을 따른 위치와 그 방향을 따른 선형 운동량을 처음 접하게 됩니다. 이러한 변수에 대해 불확실성에 대한 제약 조건은 다음과 같이 작성됩니다 ΔxΔpx2.\Delta x \Delta p_x \geq \frac{\hbar}{2}. 여기서 Δx\Delta x 은 " xx 의 불확실성"이라고 하며, 통계의 표준 편차와 동일한 정의를 가지며 다음과 같이 정의할 수 있습니다 Δx=x2x2.\Delta x = \sqrt{\langle x^2 \rangle - \langle x \rangle^2}. Δpx\Delta p_x 도 같은 방식으로 정의됩니다. 여기서는 이 불확실성 관계를 도출하지 않고 고전파에 대한 우리의 이해와 일치한다는 점을 지적할 것입니다. 즉, 진정으로 하나의 완벽한 주파수 ff 와 파장 λ\lambda 을 가진 파동은 완벽한 사인곡선으로서 영원히 계속될 것입니다. 양자역학적으로 이것은 드 브로글리의 가설에 따라 운동량을 완벽하게 아는 것과 일치합니다: λ=h/p\lambda = h/p. 그러나 파동과 같은 입자의 위치를 wherewhere 알기 위해서는 예를 들어 매우 좁은 가우스처럼 공간에서 파동을 설명하는 파동이 더 급격히 피크가 되어야 합니다. 이렇게 급격히 피크가 높아지는 파동 함수를 포함한 모든 연속 함수를 파장이 다른 푸리에 급수 정현파 함수로 표현할 수 있다는 것을 알고 있습니다. 그러나 파동 함수가 더 급격히 정점에 도달하면(그리고 그 위치를 더 잘 알면) 푸리에 급수에서 더 많은 항이 필요하며, 이는 더 많은 파장의 혼합(따라서 양자역학적으로 더 많은 운동량 값)을 의미합니다.

더 간단하게 설명하자면, 운동량이 잘 정의된 상태(공간에서 완벽한 사인곡선)는 위치가 매우 불확실합니다. 디락 델타 분포와 같이 위치가 잘 정의된 상태는 매우 불확실한 모멘텀을 가집니다.

이러한 비호환성을 나타내는 다른 변수도 있습니다. 예를 들어, 파티클의 스핀은 한 축을 따라 잘 정의된 투영을 가질 수 있지만 직교 축의 투영에 대해서는 아무것도 알 수 없습니다. 예를 들어 상태 0|0\rangle \sim |\uparrow\rangle (큐비트 또는 spin-1/2 입자의 경우)는 zz 축을 따라 확실한 투영(큐비트의 경우 1, spin-1/2 입자의 경우 /2\hbar/2 )을 가집니다. 그러나 이 상태는 각각 xx 축에 잘 정의된 투영을 가진 두 상태의 중첩으로 작성할 수 있습니다: 0=12(+x+x)|0\rangle = \frac{1}{\sqrt{2}}(|+\rangle_x+|-\rangle_x) 또는 동등하게 (10)=12[12(11)+12(11)].\begin{pmatrix} 1 \\ 0\end{pmatrix} = \frac{1}{\sqrt{2}}\left[\frac{1}{\sqrt{2}}\begin{pmatrix} 1 \\ 1\end{pmatrix}+\frac{1}{\sqrt{2}}\begin{pmatrix} 1 \\ -1\end{pmatrix}\right]. +x|+\rangle_xx|-\rangle_x 과 마찬가지로 xx 에 잘 정의된 투영을 갖습니다. 따라서 xx 축을 따라 상태의 투영을 지정하면 zz 축을 따른 투영을 알 수 없습니다. 그리고 zz 축에 투영을 지정하면 xx 축에 대한 투영을 알 수 없습니다. 이를 스핀과 큐비트의 맥락에서 논의할 때 약간의 차이가 있습니다. 하지만 일반적으로 폴리 행렬의 고유 상태는 우리가 탐구할 수 있는 흥미로운 관계를 가지고 있습니다. 이 강의에서는 이러한 양립할 수 없는 변수의 불확실성에 대한 직관을 실험적으로 확인하고 IBM® 양자 컴퓨터에서 불확실성 관계가 유지되는지 검증할 것입니다.


직관에 대한 간단한 점검

이 첫 번째 실험과 모듈 전체에서 "키스킷 패턴"이라는 양자 컴퓨팅 프레임워크를 사용하여 워크플로우를 다음 단계로 나눌 것입니다:

  • 1단계: 기존 입력을 양자 문제에 매핑하기
  • 2단계: 양자 실행을 위한 문제 최적화
  • 3단계: IBM Quantum 기본 함수를 사용하여 실행하기
  • 4단계: 후처리 및 고전적 분석

당사는 일반적으로 이러한 단계를 따르지만, 항상 명시적으로 표시하지는 않습니다.

먼저 런타임 프리미티브를 포함한 몇 가지 필수 패키지를 로드하는 것으로 시작하겠습니다. 또한 사용 가능한 가장 사용량이 적은 양자 컴퓨터를 선택할 것입니다.

처음 사용할 때 자격 증명을 저장하는 코드는 아래에 있습니다. 노트북을 공유할 때 실수로 자격 증명이 공유되지 않도록 노트북을 환경에 저장한 후 이 정보를 노트북에서 삭제해야 합니다. 자세한 안내는 IBM Cloud 계정 설정하기신뢰할 수 없는 환경에서 서비스 초기화를 참조하세요.

from numpy import pi

# Load IBM Quantum Compute Service
from qiskit_ibm_runtime import QiskitRuntimeService

# Syntax for first saving your token.  Delete these lines after saving your credentials.
# QiskitRuntimeService.save_account(channel='ibm_quantum_platform',
# instance = '<YOUR_IBM_INSTANCE_CRN>', token='<YOUR-API_KEY>', overwrite=True, set_as_default=True)
# service = QiskitRuntimeService(channel='ibm_quantum_platform')

# Load saved credentials
service = QiskitRuntimeService()
# Load the Runtime primitive and session
from qiskit_ibm_runtime import (
    Batch,
    SamplerV2 as Sampler,
    EstimatorV2 as Estimator,
)

# Use the least busy backend
backend = service.least_busy(min_num_qubits=127)
print(backend.name)

Output:

ibm_sherbrooke

학생이 수업 중에 사용 가능한 양자 컴퓨팅 시간을 모두 소진한 경우, 아래 줄을 주석 처리하지 않고 위에서 선택한 양자 컴퓨터의 노이즈 동작을 부분적으로 모방하는 시뮬레이터를 설정하는 데 사용할 수 있습니다.

# Import an estimator, this time from qiskit (we will import from Runtime for real hardware)
from qiskit_aer.primitives import SamplerV2, EstimatorV2
from qiskit_aer.noise import NoiseModel

# Generate the noise model from the backend properties
noise_model = NoiseModel.from_backend(backend)

noisy_sampler = SamplerV2(options={"backend_options": {"noise_model": noise_model}})
noisy_estimator = EstimatorV2(options={"backend_options": {"noise_model": noise_model}})

한 오퍼레이터인 Z의 고유 상태는 다른 오퍼레이터인 X의 고유 상태가 아니라는 점을 기억하실 것입니다. 이제 xxzz 축을 따라 측정하여 실험적으로 이를 관찰해 보겠습니다. IBM 양자 컴퓨터는 zz 을 따라 측정하도록 구조화되어 있기 때문에 zz 을 따라 측정하려면 qc.measure () 을 사용하면 됩니다. 그러나 xx 을 따라 측정하려면 시스템을 회전하여 xx 축을 측정하는 방향으로 효과적으로 이동시켜야 합니다. 이는 하다마드 게이트를 통해 이루어집니다. yy 을 따라 측정하는 데 필요한 유사한 단계가 있습니다. 편의를 위해 필요한 단계를 여기에 모았습니다:

  • 따라 측정하려면 zz : qc.measure()
  • xx : qc.h() 을 따라 측정하려면 qc.measure()
  • 측정 방법 yy : qc.sdg(), qc.h(), qc.s다음 qc.measure()

1단계: 고전적 입력을 양자 문제에 매핑하기

이 경우 매핑 단계는 위에서 설명한 측정과 회전을 양자 회로로 간단히 표현하는 것입니다:

# Step 1: Map

# Import some general packages
from qiskit import ClassicalRegister, QuantumCircuit, QuantumRegister

# Define registers
qr = QuantumRegister(1, "q")
cr = ClassicalRegister(2, "c")
qc = QuantumCircuit(qr, cr)

# Add a first measurement
qc.measure(qr, cr[0])
qc.barrier()

# Change basis so that measurements made on quantum computer which normally tell us about z,
# now tell us about x.
qc.h(qr)

# Add a second measurement
qc.measure(qr, cr[1])

qc.draw("mpl")

Output:

Output of the previous code cell

2단계: 양자 실행을 위한 문제 최적화

이 단계에서는 수행하고자 하는 연산을 특정 양자 컴퓨터의 기능으로 표현합니다. 또한 우리의 문제를 양자 컴퓨터의 레이아웃에 매핑합니다.

# Step 2: Transpile
from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager

target = backend.target
pm = generate_preset_pass_manager(target=target, optimization_level=3)

qc_isa = pm.run(qc)

3단계: IBM Quantum 기본 함수를 사용하여 실행하기

샘플러를 사용하여 측정값에 대한 통계를 수집할 수 있습니다. 우리는 mode = backend.를 사용하여 실제 양자 컴퓨터에서 실행될 수 있는 샘플러 프리미티브를 구현할 것입니다. 다른 워크플로우를 위한 모드도 있으며, 아래에서는 그중 하나를 사용할 것입니다. 샘플러는 “pubs”(Primitive Unified Blocs) 목록을 인수로 전달하여 run() 메서드를 호출함으로써 사용됩니다. 각 펍에는 최대 세 가지 값이 포함되어 있으며, 이 값들은 함께 추정기가 수행해야 할 작업의 계산 단위를 정의합니다. 즉, 회로, 관측 가능 변수, 매개변수입니다. 또한 회로 목록, 관측 가능한 변수 목록, 매개변수 목록을 제공할 수도 있습니다. 자세한 내용은 ‘PUB 개요 ’를 참조하십시오.

실제 양자 컴퓨터에서 실행하여 실제 양자 물리학 실험을 수행하고자 합니다. 실제 양자 컴퓨터에서 할당된 시간을 모두 소진했다면, 아래 코드를 양자 컴퓨터에 주석 처리하고 시뮬레이터에서 실행할 코드의 주석 처리를 해제할 수 있습니다.

# Step 3: Run the job on a real quantum computer


sampler = Sampler(mode=backend)
pubs = [qc_isa]
job = sampler.run(pubs)
res = job.result()

counts = res[0].data.c.get_counts()

# Run the job on the Aer simulator with noise model from real backend

# job = noisy_sampler.run([qc_isa])
# res=job.result()
# counts=res[0].data.c.get_counts()

4단계: 후처리

이것은 특히 간단한 사후 처리의 경우로, 단순히 개수를 시각화하는 것입니다.

키스킷은 가장 낮은 번호의 항목을 마지막/오른쪽에 나열하는 방식으로 큐비트, 측정값 등을 주문하는데, 이를 "리틀엔디안"이라고 합니다. 즉, 아래 '10'이라고 표시된 열은 첫 번째 측정에서 '0'이 나왔고 두 번째 측정에서 '1'이 나온 횟수를 나타냅니다.

# Step 4: Post-process

from qiskit.visualization import plot_histogram

plot_histogram(counts)

Output:

Output of the previous code cell

이 규칙이 마음에 들지 않으면 marginal_counts 을 사용하여 각 측정 결과를 개별적으로 시각화할 수 있습니다:

from qiskit.result import marginal_counts

plot_histogram(
    marginal_counts(counts, indices=[0]), title="Counts after first measurement"
)

Output:

Output of the previous code cell
plot_histogram(
    marginal_counts(counts, indices=[1]), title="Counts after second measurement"
)

Output:

Output of the previous code cell

기본적으로 키스킷의 상태는 0|0\rangle 상태로 초기화됩니다. 따라서 거의 모든 첫 번째 측정값이 0|0\rangle 으로 나온 것은 놀라운 일이 아닙니다. 그러나 두 번째 측정( xx 에 대한 상태 예측에 대한 정보를 제공하는 측정)에서는 거의 균등하게 나뉘어져 있다는 점에 유의하세요. zz 에 대한 측정 결과는 매우 예측 가능한 반면 xx 에 대한 측정 결과는 매우 예측할 수 없는 결과를 제공하는 상태인 것 같습니다. 이를 살펴봅시다.

반대 순서로 측정하면 어떻게 되나요? 먼저 하다마드 게이트를 사용하여 ±x|\pm\rangle_x 에서 0|0\rangle 가 측정될 확률에 대한 통계를 얻을 수 있습니다. 그런 다음 두 번째 측정에서는 두 번째 하다마드 게이트를 사용하여 zz 기준으로 다시 변경합니다.

# Step 1:

# Define registers
qr = QuantumRegister(1, "q")
cr = ClassicalRegister(2, "c")
qc = QuantumCircuit(qr, cr)

# Change basis to measure along x.
qc.h(qr)
qc.measure(qr, cr[0])
qc.barrier()

# Change our basis back to z and make a second measurement
qc.h(qr)
qc.measure(qr, cr[1])

qc.draw("mpl")

Output:

Output of the previous code cell
# Step 2: Transpile the circuit for running on a quantum computer

pm = generate_preset_pass_manager(target=target, optimization_level=3)
qc_isa = pm.run(qc)
# Step 3: Run the job on a real quantum computer

sampler = Sampler(mode=backend)
pubs = [qc_isa]
job = sampler.run(pubs)
res = job.result()
counts = res[0].data.c.get_counts()

# Run the job on the Aer simulator with noise model from real backend
# job = noisy_sampler.run([qc_isa])
# res=job.result()
# counts=res[0].data.c.get_counts()
# Step 4: Post-process
from qiskit.visualization import plot_histogram

plot_histogram(counts)

Output:

Output of the previous code cell

여기에서는 예측 가능성이 더 낮아 보입니다! 이전에는 적어도 첫 번째 측정의 결과가 어떻게 나올지 알 수 있었지만, 이제는 가능한 모든 상태에 걸쳐 상당히 고르게 분포되어 있습니다. 왜 이런 일이 발생했는지는 그리 어렵지 않게 알 수 있습니다. +x|+\rangle_xx|-\rangle_x 을 50대 50으로 혼합한 0|0\rangle 에서 시작했습니다 0=12(+x+x)|0\rangle=\frac{1}{\sqrt{2}}(|+\rangle_x+|-\rangle_x) 따라서 첫 번째 측정에서 + 또는 - 상태(차트에서 0과 1로 매핑됨)를 얻을 확률은 분명히 같아야 합니다. xx 을 따라 측정하면 상태가 고유 상태 +x|+\rangle_x 또는 고유 상태 x|-\rangle_x 로 축소됩니다. 이러한 각 상태는 0|0\rangle1|1\rangle 의 50대 50 혼합 상태입니다 +x=12(0+1)|+\rangle_x = \frac{1}{\sqrt{2}}(|0\rangle+|1\rangle) x=12(01)|-\rangle_x = \frac{1}{\sqrt{2}}(|0\rangle-|1\rangle) 따라서 시스템이 xx 의 고유 상태에 있으면 zz 을 따라 측정하면 0|0\rangle1|1\rangle 이 모두 산출되며 거의 동일한 확률로 산출됩니다. 따라서 첫 번째 예시를 통해 어떤 주에서는 일부 측정값의 결과는 매우 예측 가능하지만 다른 측정값의 결과는 예측할 수 없다는 것을 알 수 있었습니다. 현재의 예는 이보다 더 나쁜 일도 할 수 있다는 것을 보여줍니다. 측정 순서를 바꾸기만 해도 두 측정값에 대해 예측할 수 없는 결과가 나올 수 있는 상태가 있습니다. 주어진 상태에 대해 수량이 얼마나 확실한지 또는 불확실한지 조사해 보겠습니다.


불확실성 계산

불확실성 또는 분산을 사용하여 이를 정량화할 수 있습니다. '불확실성'은 흔히 분포의 '분산'의 제곱근으로 정의됩니다. 즉, 관측 가능한 일부 SS 에 대한 불확실성은 ΔS\Delta S 으로 표시되며 다음과 같이 주어집니다

(ΔS)2(SS)2(ΔS)2=S22SS+S2(ΔS)2=S2S2\begin{aligned} (\Delta S)^2 & \equiv \langle (S - \langle S \rangle)^2 \rangle\\ (\Delta S)^2 & = \langle S^2 - 2 S \langle S \rangle +\langle S \rangle^2 \rangle\\ (\Delta S)^2 & = \langle S^2 \rangle - \langle S \rangle^2 \end{aligned}

폴리 행렬의 경우 S2=IS^2 = I, 이것은 다음과 같이 됩니다

(ΔS)2=1S2(\Delta S)^2 = 1 - \langle S \rangle^2

이를 구체적인 사례에 적용해 보겠습니다. 상태 ψ=+y=12(1i),|\psi\rangle = |+\rangle_y = \frac{1}{\sqrt{2}}\begin{pmatrix} 1 \\ i \end{pmatrix}, 로 시작하여 해당 상태에서 관측 가능한 XX 의 불확실성을 결정해 보겠습니다.

이해도 점검

상태 +y=+i|+\rangle_y = |+i\rangle 에서 XX 의 불확실성을 직접 계산합니다.

  • ΔX=+iX2+i+iX+i2\Delta X =\sqrt{\langle+i| X^2 |+i\rangle - \langle+i| X |+i\rangle^2}

    주어진 상태에서는 이렇게 산출됩니다:

    ΔX=12(1i)(0110)(0110)12(1i)(12(1i)(0110)12(1i))2ΔX=12(1i)(1001)(1i)(12(1i)(i1))2ΔX=12(1i)(1i)(12(0)))2ΔX=12(2)=1\begin{aligned} \Delta X & =\sqrt{\frac{1}{\sqrt{2}}\begin{pmatrix}1 & -i\end{pmatrix} \begin{pmatrix}0 & 1 \\ 1 & 0\end{pmatrix} \begin{pmatrix}0 & 1 \\ 1 & 0\end{pmatrix} \frac{1}{\sqrt{2}}\begin{pmatrix}1 \\ i\end{pmatrix} - \left(\frac{1}{\sqrt{2}}\begin{pmatrix}1 & -i\end{pmatrix} \begin{pmatrix}0 & 1 \\ 1 & 0\end{pmatrix} \frac{1}{\sqrt{2}}\begin{pmatrix}1 \\ i\end{pmatrix}\right)^2}\\ \Delta X & =\sqrt{\frac{1}{2}\begin{pmatrix}1 & -i\end{pmatrix} \begin{pmatrix}1 & 0 \\ 0 & 1\end{pmatrix} \begin{pmatrix}1 \\ i\end{pmatrix} - \left(\frac{1}{2}\begin{pmatrix}1 & -i\end{pmatrix} \begin{pmatrix}i \\ 1\end{pmatrix}\right)^2}\\ \Delta X & =\sqrt{\frac{1}{2}\begin{pmatrix}1 & -i\end{pmatrix} \begin{pmatrix}1 \\ i\end{pmatrix} - \left(\frac{1}{2}(0))\right)^2}\\ \Delta X & =\sqrt{\frac{1}{2}(2)} = 1 \end{aligned}

qc.initialize() 을 사용하여 임의의 초기 상태를 만들 수 있습니다. 여기서 가상 단위의 구문은 1j1j 입니다.

# Step 1: Map the problem into a quantum circuit

from qiskit.quantum_info import SparsePauliOp
import numpy as np

obs = SparsePauliOp("X")

# Define registers
qr = QuantumRegister(1, "q")
cr = ClassicalRegister(1, "c")
qc = QuantumCircuit(qr, cr)

# Initialize the state
qc.initialize([1, 1j] / np.sqrt(2))

# Step 2: Transpile the circuit

pm = generate_preset_pass_manager(target=target, optimization_level=3)
qc_isa = pm.run(qc)
obs_isa = obs.apply_layout(layout=qc_isa.layout)

# Step 3: Run the circuit on a real quantum computer


estimator = Estimator(mode=backend)
pubs = [(qc_isa, obs_isa)]
job = estimator.run([[qc_isa, obs_isa]])
res = job.result()

# Run the job on the Aer simulator with noise model from real backend
# job = noisy_estimator.run([[qc_isa,obs_isa]])
# res=job.result()

# Step 4: Return the result in classical form, and analyze.

print(res[0].data.evs)

Output:

-0.02408454165642664

위의 방정식에 따르면 (ΔX)2=1X2=1(0.0015...)2ΔX=0.999...(\Delta X)^2 = 1 - \langle X \rangle^2 = 1-(0.0015...)^2 \rightarrow \Delta X = 0.999... 동일한 상태를 유지하되 이제 ZZ 의 기대값을 구해 보겠습니다:

# Step 1: Map the problem into a quantum circuit

obs = SparsePauliOp("Z")

# Define registers
qr = QuantumRegister(1, "q")
cr = ClassicalRegister(1, "c")
qc = QuantumCircuit(qr, cr)

# Initialize the state to |+>_y
qc.initialize([1, 1j] / np.sqrt(2))


# Step 2: Transpile the circuit

pm = generate_preset_pass_manager(target=target, optimization_level=3)
qc_isa = pm.run(qc)
obs_isa = obs.apply_layout(layout=qc_isa.layout)

# Step 3: Run the circuit on a real quantum computer

estimator = Estimator(mode=backend)
pubs = [(qc_isa, obs_isa)]
job = estimator.run(pubs)
res = job.result()

# Run the job on the Aer simulator with noise model from real backend
# job = noisy_estimator.run([[qc_isa,obs_isa]])
# res=job.result()

# Step 4: Return the result in classical form, and analyze.

print(res[0].data.evs)

Output:

0.04958271968581247

이전과 동일한 계산을 할 수 있지만 분산이 다시 1.0 에 매우 가깝다는 것을 알 수 있습니다. 결론을 내릴 수 있습니다 ΔXΔZ1.0\Delta X \Delta Z \approx 1.0. 실제로 이것은 우리가 선택한 상태와 거의 일치합니다. 하지만 더 잘할 수 있을까요? 아니면 더 나쁠까요?

한 방향의 위치( x,x, )와 같은 방향의 운동량( px.p_x. ) 사이에는 불확실성 관계가 있다는 것을 상기하십시오. 이러한 변수의 경우 가장 익숙한 형태는 아마도 다음과 같습니다 ΔxΔpx/2\Delta x \Delta p_x \geq \hbar/2 이것이 우리가 기억하는 전부라면 ΔX\Delta XΔZ\Delta Z 도 불확실성에 대한 근본적인 한계가 있을 수 있다고 생각할 수 있습니다. ΔXΔZ\Delta X \Delta Z 제품이 0에 도달하는 것은 불가능할까요? 다른 상태를 시도하여 이 문제가 해결되는지 확인해 보겠습니다. 이번에는 ψ=12(11).|\psi\rangle = \frac{1}{\sqrt{2}}\begin{pmatrix} 1 \\ 1 \end{pmatrix}. 어떤 일이 일어나는지 보겠습니다. 아래 코드에서 추정기는 동일한 작업 제출에서 두 세트의 회로와 관측값을 허용할 수 있습니다.

# Step 1: Map the problem into a quantum circuit

obs1 = SparsePauliOp("X")
obs2 = SparsePauliOp("Z")

# Define registers

qr = QuantumRegister(1, "q")
cr = ClassicalRegister(1, "c")
qc = QuantumCircuit(qr, cr)

# Initialize the state
qc.initialize([1, 1] / np.sqrt(2))

# Step 2: Transpile the circuit

pm = generate_preset_pass_manager(target=target, optimization_level=3)
qc_isa = pm.run(qc)
obs1_isa = obs1.apply_layout(layout=qc_isa.layout)
obs2_isa = obs2.apply_layout(layout=qc_isa.layout)

# Step 3: Run the circuit on a real quantum computer

with Batch(backend=backend) as batch:
    estimator = Estimator(mode=batch)
    pubs = [(qc_isa, obs1_isa), (qc_isa, obs2_isa)]
    job = estimator.run(pubs)
    res = job.result()
batch.close()

# Run the job on the Aer simulator with noise model from real backend

# job = noisy_estimator.run([[qc,obs1],[qc,obs2]])
# res=job.result()

# Step 4: Return the result in classical form, and analyze.

print("The expectation value of the first observable is: ", res[0].data.evs)
print("The expectation value of the second observable is: ", res[1].data.evs)

Output:

The expectation value of the first observable is:  1.0011036174126302
The expectation value of the second observable is:  0.0029429797670141016

XX 의 기대값은 1.0 에 가까워야 하지만 1.0 을 초과해서는 안 됩니다. 1.0 을 아주 조금 초과하더라도 걱정하지 마세요. 이는 노이즈 및/또는 판독 오류와 같은 요인으로 인해 발생할 수 있습니다. 이것은 매우 중요한 주제이지만 지금은 무시해도 됩니다.

1.0 에 매우 가까운 XX 의 기대값을 얻었습니다( XX 의 분산이 매우 낮음에 해당). 따라서 두 분산의 곱은 매우 낮습니다:

ΔXΔZ=1(0.9853)2×1(0.00195)2=0.171.\Delta X \Delta Z = \sqrt{1-(0.9853)^2} \times \sqrt{1-(-0.00195)^2} = 0.171.

이 값이 정확히 0은 아니지만, 폴리 연산자( ±1\pm 1 )의 고유값과 비교하면 점점 작아지고 있습니다. 선형 위치와 운동량 사이의 불확실성 관계는 연산자 xxpxp_x 사이의 정류 관계를 사용하여 명시적으로 다르게 작성할 수 있다는 것을 기억할 수 있습니다:

ΔxΔpx12[x,px]\Delta x \Delta p_x \geq \frac{1}{2}|\langle [x,p_x] \rangle|

여기서,

[x,px]=xpxpxx[x,p_x] = xp_x-p_xx

xxpxp_x 의 정류자입니다.

이것은 폴리 연산자에게 가장 쉽게 확장할 수 있는 형태입니다. 일반적으로 AABB 두 운영자의 경우,

ΔAΔB12[A,B].\Delta A \Delta B \geq \frac{1}{2}|\langle [A,B] \rangle|.

그리고 폴리 행렬 XXZZ 의 경우 다음을 계산하려면 [X,Z][X,Z] 이 필요합니다

ΔXΔZ12[X,Z].\Delta X \Delta Z \geq \frac{1}{2}|\langle [X,Z] \rangle|.

여기에서는 이를 보여드리고, 독자들이 연습용으로 비슷한 계산을 해볼 수 있도록 남겨두겠습니다:

[X,Z]=XZZX=(0110)(1001)(1001)(0110)[X,Z] = XZ-ZX = \begin{pmatrix}0 & 1 \\ 1 & 0\end{pmatrix}\begin{pmatrix}1 & 0 \\ 0 & -1\end{pmatrix}-\begin{pmatrix}1 & 0 \\ 0 & -1\end{pmatrix}\begin{pmatrix}0 & 1 \\ 1 & 0\end{pmatrix} [X,Z]=(0110)(0110)=2(0110)[X,Z] = \begin{pmatrix}0 & -1 \\ 1 & 0\end{pmatrix}-\begin{pmatrix}0 & 1 \\ -1 & 0\end{pmatrix} = 2\begin{pmatrix}0 & -1 \\ 1 & 0\end{pmatrix}

이것은 완벽하게 수용 가능한 대답이지만 한 단계 더 나아가면 다음과 같습니다

[X,Z]=2i(0ii0)=2iY[X,Z] = -2i\begin{pmatrix}0 & -i \\ i & 0\end{pmatrix}=-2iY

따라서 불확실성 관계는 다음과 같습니다

ΔXΔZY.\Delta X \Delta Z \geq |\langle Y \rangle|.

이해도 점검

[X,Y][X,Y][Y,Z][Y,Z] 을 결정합니다. 이를 사용하여 XXYY, YYZZ 사이의 불확실성 관계를 적습니다.

  • [X,Y]=XYYX=(0110)(0ii0)(0ii0)(0110)=2(i00i)=2iZ[X,Y] = XY-YX = \begin{pmatrix}0 & 1 \\ 1 & 0\end{pmatrix}\begin{pmatrix}0 & -i \\ i & 0\end{pmatrix}-\begin{pmatrix}0 & -i \\ i & 0\end{pmatrix}\begin{pmatrix}0 & 1 \\ 1 & 0\end{pmatrix} = 2 \begin{pmatrix}i & 0 \\ 0 & -i\end{pmatrix}=2iZ[Y,Z]=YZZY=(0ii0)(1001)(1001)(0ii0)=2(0ii0)=2iX[Y,Z] = YZ-ZY = \begin{pmatrix}0 & -i \\ i & 0\end{pmatrix}\begin{pmatrix}1 & 0 \\ 0 & -1\end{pmatrix}-\begin{pmatrix}1 & 0 \\ 0 & -1\end{pmatrix}\begin{pmatrix}0 & -i \\ i & 0\end{pmatrix} = 2 \begin{pmatrix}0 & i \\ i & 0\end{pmatrix}=2iX

    일반적인 불확실성 관계와 결합하면 다음과 같은 결과를 얻을 수 있습니다

    ΔXΔYZ,\Delta X \Delta Y \geq |\langle Z \rangle|,ΔYΔZX.\Delta Y \Delta Z \geq |\langle X \rangle|.

일관성 확인

계속 진행하기 전에 이 결과가 이전 결과와 일치하는지 확인해 보겠습니다. ψ=12(11).|\psi\rangle = \frac{1}{\sqrt{2}}\begin{pmatrix} 1 \\ 1 \end{pmatrix}. 상태를 사용했고 ΔXΔZ=0.171.\Delta X \Delta Z = 0.171. 이제 이 제품이 다음보다 크거나 같아야 한다는 것을 알았습니다

Y=12(11)(0ii0)12(11)|\langle Y \rangle|=\frac{1}{\sqrt{2}}\begin{pmatrix} 1 & 1 \end{pmatrix}\begin{pmatrix}0 & -i \\ i & 0\end{pmatrix}\frac{1}{\sqrt{2}}\begin{pmatrix} 1 \\ 1 \end{pmatrix} Y=12(11)(ii)=12(i+i)=0.|\langle Y \rangle| = \frac{1}{2}\begin{pmatrix} 1 & 1 \end{pmatrix}\begin{pmatrix} -i \\ i \end{pmatrix} = \frac{1}{2}(-i+i) = 0.

실제로 그렇습니다, ΔXΔZ=0.171Y=0\Delta X \Delta Z = 0.171 \geq |\langle Y \rangle|=0

아래 질문을 통해 이러한 결과에 대한 직관력을 키우세요:

이해도 점검

다음 항목을 세트로 묶어 답하세요:

(a) XX 에서 불확실성이 0이 되는 상태는 어떤 상태일 것으로 예상하십니까?

(b) ZZ 에서 불확실성이 0이 될 것으로 예상하는 상태는 어떤 상태입니까?

(c) 어떤 상태에서 0의 기대값 Y\langle Y \rangle 을 얻을 수 있을까요?

(d) 위의 질문에 대한 답변이 ΔXΔZY\Delta X \Delta Z \geq |\langle Y \rangle|?

(e) 추정기를 사용하여 이를 명시적으로 확인하는 코드를 작성합니다.

  • (a) XX 연산자의 고유 상태는 XX 에서 불확실성이 0이 될 것으로 예상할 수 있습니다. 실제로 ψ=+x,|\psi\rangle = |+\rangle_x, 을 사용하면 다음과 같습니다 ΔX=1X2=112=0.\Delta X = \sqrt{1-\langle X \rangle^2} = \sqrt{1-1^2} = 0.

    (b) ZZ 연산자의 고유 상태는 ZZ 에서 불확실성이 0이 될 것으로 예상할 수 있습니다. 실제로 ψ=1,|\psi\rangle = |1\rangle, 을 사용하면 다음과 같습니다 ΔZ=1Z2=1(1)2=0.\Delta Z = \sqrt{1-\langle Z \rangle^2} = \sqrt{1-(-1)^2} = 0.

    (c) 측정 시 yy 축에서 음수 투영과 마찬가지로 양수 투영을 산출하는 모든 상태에 대해 Y=0\langle Y \rangle=0 을 찾을 수 있을 것으로 예상합니다. 여기에는 XXZZ 의 고유 상태가 포함됩니다.

    (d) 예. XX 또는 ZZ 의 고유 상태에 대한 불확실성의 곱 ΔXΔZ\Delta X \Delta Z 은 매우 작은 값을 기대할 수 있습니다: ΔXΔZ0.\Delta X \Delta Z \approx 0. 동일한 상태에 대해 Y=0\langle Y \rangle=0 도 기대할 수 있기 때문에 이는 유지될 수 있습니다. 따라서 불확실성 관계를 만족시킬 수 있습니다.

    (e) 다음과 같은 코드로 이를 확인할 수 있습니다:

    obs1 = SparsePauliOp.from_list(
        [("X", 1.000)]
    )
    obs2 = SparsePauliOp.from_list(
        [("Y", 1.000)]
    )
    obs3 = SparsePauliOp.from_list(
        [("Z", 1.000)]
    )
    qc = QuantumCircuit(1,1)
    qc.ry(pi/2,0)
    
    job = estimator.run([(qc, [[obs1], [obs2], [obs3]])], precision=0.001)
    res=job.result()

    결과는 모든 기대값을 반환합니다. 모든 기대값을 검색하고 불확실성을 계산하려면 다음을 사용할 수 있습니다:

    xs=res[0].data.evs[0]
    ys=abs(res[0].data.evs[1])
    zs=res[0].data.evs[2]
    
    import math
    prodxz=((1-xs[i]*xs[i])**0.5)*(1-zs[i]*zs[i])**0.5
    

다음 항목을 세트로 묶어 답하세요:

(a) 기대값이 큰 상태 Y\langle Y \rangle 를 생각해 볼 수 있나요?

(b) 동일한 상태의 불확실성이 크거나 작을 것으로 예상하십니까 XX?

(c) 동일한 상태의 불확실성이 크거나 작을 것으로 예상하십니까 ZZ?

(d) 위의 질문에 대한 답변이 ΔXΔZY\Delta X \Delta Z \geq |\langle Y \rangle|?

(e) 추정기를 사용하여 이를 명시적으로 확인하는 코드를 작성합니다.

  • (a) YY : +y|+\rangle_y 에서 Y1\langle Y \rangle\approx 1 을 찾을 수 있을 것으로 예상합니다.

    (b) +y,|+\rangle_y, 상태에서 XX 을 측정하면 동일한 빈도/확률로 양수 및 음수 결과가 나오므로 XX 상태의 불확실성이 클 것으로 예상할 수 있습니다.

    (c) +y,|+\rangle_y, 상태에서 ZZ 을 측정하면 동일한 빈도/확률로 양수 및 음수 결과가 나오므로 ZZ 상태의 불확실성이 클 것으로 예상할 수 있습니다.

    (d) 예. 불확실성의 산물 ΔXΔZ\Delta X \Delta Z 의 경우 Y,Y, 의 고유 상태와 +y,|+\rangle_y, 의 경우 특히 큰 값을 기대할 수 있습니다. 또한 같은 주에 대해서도 Y1\langle Y \rangle\approx 1. 따라서 Y\langle Y \rangleΔXΔZ\Delta X \Delta Z 모두 이 상태에서 상당히 크며 불확실성 관계가 다시 충족될 수 있을 것으로 보입니다.

    (e) 다음과 같은 코드로 이를 확인할 수 있습니다:

    obs1 = SparsePauliOp.from_list(
        [("X", 1.000)]
    )
    obs2 = SparsePauliOp.from_list(
        [("Y", 1.000)]
    )
    obs3 = SparsePauliOp.from_list(
        [("Z", 1.000)]
    )
    qc = QuantumCircuit(1,1)
    qc.rx(-pi/2,0)
    
    job = estimator.run([(qc, [[obs1], [obs2], [obs3]])], precision=0.001)
    res=job.result()

    결과는 모든 기대값을 반환합니다. 모든 기대값을 검색하고 불확실성을 계산하려면 다음을 사용할 수 있습니다:

    xs=res[0].data.evs[0]
    ys=abs(res[0].data.evs[1])
    zs=res[0].data.evs[2]
    
    import math
    prodxz=((1-xs[i]*xs[i])**0.5)*(1-zs[i]*zs[i])**0.5
    

불확정성 관계의 검증

위의 테스트는 상태 벡터의 단일 선택에 대한 불확실성 관계의 유효성만 입증했습니다 ψ=+x|\psi\rangle = |+\rangle_x. 이것이 일반적으로 실험과 일치한다는 것을 확신하려면 상태 벡터의 여러 선택에 대해 추정기를 사용하여 유사한 계산을 수행해야 합니다. 먼저 상태 벡터를 zz 축에서 멀리 회전시키고, RY 게이트를 사용하여 매개변수 θ\theta 를 사용하여 다른 초기 상태를 생성하는 것으로 시작하겠습니다.

# The calculation below uses approximately 3-4 minutes of QPU time.
# Step 1: Map the problem into a quantum circuit

from qiskit.circuit import Parameter
import numpy as np

# Specify observables
obs1 = SparsePauliOp("X")
obs2 = SparsePauliOp("Y")
obs3 = SparsePauliOp("Z")

# Define registers
qr = QuantumRegister(1, "q")
cr = ClassicalRegister(1, "c")
qc = QuantumCircuit(qr, cr)

# Rotate away from |0>
theta = Parameter("θ")
qc.ry(theta, 0)

params = np.linspace(0, 2, num=21)

# Step 2: Transpile the circuit

pm = generate_preset_pass_manager(target=target, optimization_level=3)
qc_isa = pm.run(qc)
obs1_isa = obs1.apply_layout(layout=qc_isa.layout)
obs2_isa = obs2.apply_layout(layout=qc_isa.layout)
obs3_isa = obs3.apply_layout(layout=qc_isa.layout)

# Step 3: Run the circuit on a real quantum computer

with Batch(backend=backend) as batch:
    estimator = Estimator(mode=batch)
    pubs = [(qc_isa, [[obs1_isa], [obs2_isa], [obs3_isa]], [params])]
    job = estimator.run(pubs, precision=0.01)
    res = job.result()

batch.close()

# Run the job on the Aer simulator with noise model from real backend

# job = noisy_estimator.run([(qc, [[obs1], [obs2], [obs3]], [params])])
# res=job.result()
# Step 4: Post-processing and classical analysis.
xs = res[0].data.evs[0]
ys = abs(res[0].data.evs[1])
zs = res[0].data.evs[2]

# Calculate uncertainties

delx = []
delz = []
prodxz = []
for i in range(len(xs)):
    delx.append(abs((1 - xs[i] * xs[i])) ** 0.5)
    delz.append(abs((1 - zs[i] * zs[i])) ** 0.5)
    prodxz.append(delx[i] * delz[i])
# Here we can plot the results from this simulation.
import matplotlib.pyplot as plt

plt.plot(params, delx, label=r"$\Delta$ X")
plt.plot(params, ys, label=r"$\langle$ Y $\rangle$")
plt.plot(params, delz, label=r"$\Delta$ Z")
plt.plot(params, prodxz, label=r"$\Delta$X $\Delta$Z")
plt.xlabel(r"$\theta$")
plt.ylabel("Expectation/Uncertainty Values")
plt.legend()
plt.show()

Output:

Output of the previous code cell

빨간색 곡선 (ΔXΔZ)(\Delta X \Delta Z) 은 항상 주황색 곡선 Y.\langle Y \rangle. 보다 큽니다. 불확실성 곱이 하락하여 한계에 어느 정도 근접하는 경우도 있고 상승하여 한계에서 멀어지는 경우도 있지만 항상 불확실성 관계를 따릅니다.

물론 한계 Y\langle Y \rangle 는 항상 0에 매우 가깝기 때문에 불확실성 관계에 대한 최선의 테스트는 아닐 수 있습니다. YY 의 고유 상태에 대해 더 큰 투영을 갖는 양자 상태를 사용하겠습니다. 구체적으로, 여전히 zz 축에서 0|0\rangle 을 다양한 각도로 회전하지만, 이제 그 결과 상태도 zz 를 중심으로 어떤 각도, 아마도 π/4\pi/4 로 회전하여 어떤 일이 일어나는지 살펴볼 것입니다.

# The calculation below uses approximately 3-4 minutes of QPU time.
from qiskit.circuit import Parameter
import numpy as np

# Step 1: Map the problem to a quantum circuit

# Specify observables
obs1 = SparsePauliOp("X")
obs2 = SparsePauliOp("Y")
obs3 = SparsePauliOp("Z")

# Define registers
qr = QuantumRegister(1, "q")
cr = ClassicalRegister(1, "c")
qc = QuantumCircuit(qr, cr)

# Rotate away from |0> along one plane, and then along a transverse direction.
theta = Parameter("θ")
qc.ry(theta, 0)
qc.rz(pi / 4, 0)

params = np.linspace(0, 2, num=21)

# Step 2: Transpile the circuit

pm = generate_preset_pass_manager(target=target, optimization_level=3)
qc_isa = pm.run(qc)

obs1_isa = obs1.apply_layout(layout=qc_isa.layout)
obs2_isa = obs2.apply_layout(layout=qc_isa.layout)
obs3_isa = obs3.apply_layout(layout=qc_isa.layout)

# Step 3: Run the circuit on a real quantum computer

with Batch(backend=backend) as batch:
    estimator = Estimator(mode=batch)
    pubs = [(qc_isa, [[obs1_isa], [obs2_isa], [obs3_isa]], [params])]
    job = estimator.run(pubs, precision=0.01)
    res = job.result()

batch.close()

# Run the job on the Aer simulator with noise model from real backend

# job = noisy_estimator.run([(qc, [[obs1], [obs2], [obs3]], [params])])
# res=job.result()
# Step 4: Post-processing and classical analysis.
xs = res[0].data.evs[0]
ys = abs(res[0].data.evs[1])
zs = res[0].data.evs[2]

# Calculate uncertainties

delx = []
delz = []
prodxz = []
for i in range(len(xs)):
    delx.append(abs((1 - xs[i] * xs[i])) ** 0.5)
    delz.append(abs((1 - zs[i] * zs[i])) ** 0.5)
    prodxz.append(delx[i] * delz[i])
# Here we can plot the results from this simulation.
import matplotlib.pyplot as plt

plt.plot(params, delx, label=r"$\Delta$ X")
plt.plot(params, ys, label=r"$\langle$ Y $\rangle$")
plt.plot(params, delz, label=r"$\Delta$ Z")
plt.plot(params, prodxz, label=r"$\Delta$X $\Delta$Z")
plt.xlabel(r"$\theta$")
plt.ylabel("Expectation/Uncertainty Values")
plt.legend()
plt.show()

Output:

Output of the previous code cell

이제 우리는 불확실성에 대한 한계가 (ΔXΔZ)(\Delta X \Delta Z) 시험대에 오르고 있음을 목격하고 있다! 빨간 곡선이 이전보다 주황색 곡선에 훨씬 더 가까워졌다. 사실, 잡음이 없는 경우 불확정성 관계는 정확히 포화 상태( (ΔXΔZ)=Y(\Delta X \Delta Z) = \langle Y \rangle )가 될 것이다. 잡음과 판독 오차가 존재하는 상황에서, 가끔씩 측정값이 예상보다 아주 약간 더 (ΔXΔZ)(\Delta X \Delta Z) 크게 나오는 Y.\langle Y \rangle. 것은 놀랄 일이 아니다. 이는 불확정성의 진정한 위반이 아니라, 단순히 제로가 아닌 오차의 결과물일 뿐이다.

이해도 점검

Y\langle Y \rangle 를 최대한 크게 만들어 이 기능을 극한까지 끌어올릴 수 있는 방법을 설명해 주세요.

  • 현재 코드에는 기본 초기 상태 0|0\ranglezz 축에서 일부 매개변수화된 각도 θ\theta 로 회전시킨 다음 zz 축을 중심으로 상태 벡터를 yy 축으로 일부 회전시키는 각도 π/4,\pi/4, 로 회전시키는 선이 있습니다.

    qc.ry(theta,0)

    qc.rz(pi/4,0)

    zz 에 대한 로테이션을 π/4\pi/4 에서 π/2\pi/2 로 변경하여 YY 의 고유 상태까지 회전할 수 있습니다 :

    qc.ry(theta,0)

    qc.rz(pi/2,0)

    다른 변경 사항은 필요하지 않습니다.

코드를 변경하거나 복사하여 기대값 Y를 최대로 하여 불확실성 관계 검사를 구현합니다. 불확실성 관계는 유지되나요?

  • 위 예제의 코드를 그대로 사용하되, 다음과 같이 수정합니다

    qc.rz(pi/2,0)

    교체하기 위해 교체

    qc.rz(pi/4,0).

    결과 그림은 아래와 같아야 하며, 불확실성 원칙은 여전히 유효합니다.

    불확실성을 Y 연산자의 최대 기대값과 비교하는 플롯입니다.

위의 코드를 수정하여 비슷한 그림을 만들고, 양자 컴퓨터에서 측정한 결과 ΔXΔY\Delta X \Delta Y 제품이 정상적으로 작동함을 보여줍니다. 원하는 상태 집합을 선택하세요.

  • 위 예제의 코드를 그대로 사용할 것이며, 얼굴에서는 기대값을 사용하여 다른 불확실성을 계산하기만 하면 위와 동일한 결과를 사용할 수 있습니다. 예를 들어 다음을 사용할 수 있습니다

    xs=res[0].data.evs[0]
    ys=res[0].data.evs[1]
    zs=abs(res[0].data.evs[2])
    import math
    delx = []
    dely = []
    prodxy=[]
    for i in range(len(xs)):
        delx.append((1-xs[i]*xs[i])**0.5)
        dely.append((1-ys[i]*ys[i])**0.5)
        prodxy.append(((1-xs[i]*xs[i])**0.5)*(1-ys[i]*ys[i])**0.5)

    그리고 우리는

    import matplotlib.pyplot as plt
    plt.plot(params, delx, label=r'$\Delta$ X')
    plt.plot(params, dely, label=r'$\langle$ Y $\rangle$')
    plt.plot(params, zs, label=r'$\Delta$ Z')
    plt.plot(params, prodxy, label=r'$\Delta$X $\Delta$Z')
    plt.xlabel(r'$\theta$')
    plt.ylabel('Expectation/Uncertainty Values')
    plt.legend()
    plt.show()

도전: θ\theta 의 여러 값을 스캔한 것처럼 ϕ\phi 의 여러 값을 스캔하는 코드를 작성하고 불확실성 관계를 위반하지 않는다는 것을 보여주는 3D 플롯을 작성하세요. 원하는 관찰 항목을 선택하세요.


질문

교수자는 노트북이 어떻게 사용되고 있는지에 대한 이 간단한 설문조사를 작성하여 공통 커리큘럼에 배치하는 방법에 대한 안내와 답안지가 포함된 노트북 버전을 요청할 수 있습니다.

핵심 개념:

  • 위치 및 선형 운동량, 스핀의 구성 요소를 포함한 많은 물리적 관측 변수 세트 사이에는 불확실성 관계가 존재합니다.
  • 폴리 행렬은 통근하지 않습니다. 이는 스핀의 모든 구성 요소를 동시에 알거나 결정할 수 없다는 사실을 수학적으로 반영한 것입니다.
  • 양자 컴퓨팅은 폴리 연산자/행렬을 많이 사용하므로 폴리 연산자와 밀접하게 관련된 스핀 연산자에 대한 불확실성 관계를 아는 것이 유용합니다.
  • 두 연산자 AABB 의 불확실성에 대한 일반적인 공식은 다음과 같습니다 ΔAΔB12[A,B].\Delta A \Delta B \geq \frac{1}{2}|\langle [A,B] \rangle|.
  • 어떤 연산자 AA 의 고유상태 a|a\rangle 는 해당 연산자와 관련된 물리적 관측량에 대해 불확실성을 0으로 만든다. 실험적으로 보더라도, ΔA0.\Delta A \approx 0.
  • 어떤 운영자 AA 의 고유 상태 a|a\rangleAA 와 통근하지 않는 운영자 BB 에게는 더 큰 불확실성을 야기합니다.
  • 실제 양자 컴퓨터를 사용한 실험 결과는 물리적 연산자의 행렬 표현을 통해 얻은 직관을 확인시켜 줍니다.

T/F 문제:

  1. T/F One은 XXYY 을 동시에 측정할 수 있지만 ZZ 은 측정할 수 없습니다.
  2. T/F One은 XXZZ 을 동시에 측정할 수 있지만 YY 은 측정할 수 없습니다.
  3. T/F 리니어 포지션 및 리니어 모멘텀 운영자는 출퇴근하지 않습니다.
  4. T/F IBM 양자 컴퓨터는 기본적으로 ZZ 을 따라 측정하므로 다른 방향을 따라 측정하려면 회전을 수행해야 합니다.
  5. T/F 아래 회로는 ZZXX 을 효과적으로 측정합니다.
측정값, 하다마드 게이트, 그리고 또 다른 측정값을 보여주는 회로도입니다.

MC 질문:

  1. 아래 다이어그램은 다음 중 어떤 불확실성 관계를 보여 주는가?

    • a. ΔXΔYZ\Delta X \Delta Y \geq |\langle Z \rangle|
    • b. ΔYΔZX\Delta Y \Delta Z \geq |\langle X \rangle|
    • c. ΔZΔXY\Delta Z \Delta X \geq |\langle Y \rangle|
    • d. 해당 항목 없음
불확실성을 Y 연산자의 최대 기대값과 비교하는 플롯입니다.
  1. 다음 중 xx 을 따라 측정을 수행하는 표준 순서는 무엇입니까?

    • a. 전용 qc.measure()
    • b. qc.h() then qc.measure()
    • c. qc.h(), qc.h() then qc.measure()
    • d. qc.h(), qc.s, qc.h() qc.measure()
    • e. qc.sdg(), qc.h(), qc.s qc.measure()
    • f. qc.sdg(), qc.h(), qc.s, qc.h() qc.measure()
  2. 다음 중 가장 큰 기대값을 산출하는 상태는 X\langle X \rangle?

    • a. +x|+\rangle_x
    • b. x|-\rangle_x
    • c. +y|+\rangle_y 라고도 함 +i|+i\rangle
    • d. y|-\rangle_y 라고도 함 i|-i\rangle
    • e. 0|0\rangle 라고도 함 |\uparrow\rangle
    • f. 1|1\rangle 라고도 함 |\downarrow\rangle
  3. 다음 중 불확실성이 가장 큰 상태는 ΔX\Delta X?

    • a. +x|+\rangle_x
    • b. +y|+\rangle_y 라고도 함 +i|+i\rangle
    • c. 0|0\rangle 라고도 함 |\uparrow\rangle
    • d. a와 B가 동점입니다
    • e. b와 c가 동점입니다
    • f. a, B, C가 동점인 경우

토론 질문:

  1. 이 불확실성 개념이 데카르트 공간에서 벡터 화살표로서의 스핀 개념과 어떤 식으로든 충돌하나요? 블로흐 구체는 어떨까요?

  2. xx 축과 yy 축의 중간 방향을 따라 측정 장치의 방향을 잡았다고 가정해 보겠습니다. 무슨 일이 발생했습니까? 이 방향을 따라 측정할 수 있나요? 이것이 XXYY 의 불확실성과 어떤 관련이 있나요?

  3. 여기서 얻은 결과를 확신하기 위해 어떤 추가 실험을 하고 싶으신가요?

이 페이지가 도움이 되었습니까?
GitHub에서 버그, 오타를 보고하거나 컨텐츠를 요청하십시오.