Langkau ke kandungan utama

Meneroka ketidakpastian

Untuk modul Qiskit in Classrooms ini, pelajar perlu mempunyai persekitaran Python yang berfungsi dengan pakej-pakej berikut dipasang:

  • qiskit v2.1.0 atau lebih baharu
  • qiskit-ibm-runtime v0.40.1 atau lebih baharu
  • qiskit-aer v0.17.0 atau lebih baharu
  • qiskit.visualization
  • numpy
  • pylatexenc

Untuk menyediakan dan memasang pakej-pakej di atas, lihat panduan Pasang Qiskit. Untuk menjalankan kerja pada komputer kuantum sebenar, pelajar perlu menyediakan akaun dengan IBM Quantum® dengan mengikuti langkah-langkah dalam panduan Sediakan akaun IBM Cloud anda.

Modul ini telah diuji dan menggunakan 8 minit masa QPU. Ini adalah anggaran sahaja. Penggunaan sebenar anda mungkin berbeza. Dua pengiraan yang memakan masa ditandakan sedemikian dalam ulasan pengepala dan boleh dijalankan pada simulator jika pelajar kekurangan masa QPU. Tanpa kedua-duanya, modul ini hanya memerlukan ~30 saat masa QPU.

# Added by doQumentation — required packages for this notebook
!pip install -q matplotlib numpy qiskit qiskit-aer qiskit-ibm-runtime
# 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'

Tonton panduan modul oleh Dr. Katie McCormick di bawah, atau klik di sini untuk menontonnya di YouTube.


Pengenalan

Kamu mungkin pernah mendengar tentang prinsip ketidakpastian, bahkan di luar kursus fizik kamu. Penyataan semula yang biasa untuk ketidakpastian ialah "Dengan melihat sesuatu, kamu mempengaruhinya." Itu memang benar. Tetapi cara yang lebih fizikal untuk menerangkan ketidakpastian ialah terdapat pemboleh ubah fizikal tertentu yang mempunyai ketakserasian yang menghalang kedua-duanya daripada diketahui secara serentak dengan ketepatan sewenang-wenangnya. Ramai pelajar pertama kali menemui pasangan pemboleh ubah tidak serasi xx dan pxp_x, yang bermaksud kedudukan sepanjang satu paksi yang dipanggil paksi-xx, dan momentum linear sepanjang arah tersebut, masing-masing. Untuk pemboleh ubah tersebut, kekangan ke atas ketidakpastian ditulis sebagai ΔxΔpx2.\Delta x \Delta p_x \geq \frac{\hbar}{2}. Di sini, Δx\Delta x dipanggil "ketidakpastian dalam xx", yang mempunyai definisi yang sama seperti sisihan piawai dalam statistik, dan boleh ditakrifkan sebagai Δx=x2x2.\Delta x = \sqrt{\langle x^2 \rangle - \langle x \rangle^2}. Δpx\Delta p_x ditakrifkan dengan cara yang sama. Di sini, kita tidak akan menerbitkan hubungan ketidakpastian ini; kita akan menunjukkan bahawa ia konsisten dengan pemahaman kita tentang gelombang klasik. Iaitu, satu gelombang dengan frekuensi ff dan panjang gelombang λ\lambda yang benar-benar sempurna akan berterusan selama-lamanya sebagai sinusoid yang sempurna. Secara mekanik kuantum, ini akan sepadan dengan mengetahui momentum dengan sempurna menurut hipotesis de Broglie: λ=h/p\lambda = h/p. Tetapi untuk mengetahui dimanadi mana zarah seperti gelombang itu berada, gelombang yang menerangkannya mesti menjadi lebih puncak tajam dalam ruang, seperti Gaussian yang sangat sempit, contohnya. Kita tahu bahawa kita boleh meluahkan sebarang fungsi selanjar, termasuk fungsi gelombang berpuncak tajam sedemikian, sebagai siri Fourier fungsi sinusoidal dengan panjang gelombang yang berbeza. Tetapi apabila fungsi gelombang menjadi lebih puncak tajam (dan kedudukan lebih diketahui), kita akan memerlukan lebih banyak sebutan dalam siri Fourier, yang bermaksud gabungan lebih banyak panjang gelombang (dan dengan itu, secara mekanik kuantum, lebih banyak nilai momentum).

Dinyatakan dengan lebih ringkas: keadaan dengan momentum yang terdefinisi dengan baik (sinusoid yang sempurna dalam ruang) mempunyai kedudukan yang sangat tidak pasti. Keadaan dengan kedudukan yang terdefinisi dengan baik (seperti taburan delta Dirac) mempunyai momentum yang sangat tidak pasti.

Terdapat pemboleh ubah lain yang menunjukkan ketakserasian sedemikian. Contohnya, putaran zarah mungkin mempunyai unjuran yang terdefinisi dengan baik sepanjang satu paksi, tetapi kemudian kita tidak tahu apa-apa tentang unjuran pada paksi ortogon. Sebagai contoh, keadaan 0|0\rangle \sim |\uparrow\rangle (untuk Qubit atau zarah spin-1/2) mempunyai unjuran yang pasti sepanjang paksi zz (iaitu 1 dalam konteks Qubit, dan /2\hbar/2 dalam konteks zarah spin-1/2). Tetapi keadaan ini boleh ditulis sebagai superposisi dua keadaan yang masing-masing mempunyai unjuran yang terdefinisi dengan baik pada paksi xx: 0=12(+x+x)|0\rangle = \frac{1}{\sqrt{2}}(|+\rangle_x+|-\rangle_x) atau secara setara (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_x mempunyai unjuran yang terdefinisi dengan baik pada xx, begitu juga x|-\rangle_x. Jadi jika kita menentukan unjuran suatu keadaan sepanjang paksi xx, kita tidak mengetahui unjuran sepanjang paksi zz. Dan jika kita menentukan unjuran pada paksi zz, kita tidak mengetahui unjuran sepanjang xx. Terdapat perbezaan kecil apabila membincangkan ini dalam konteks putaran dan dalam Qubit. Tetapi secara umumnya, keadaan eigen bagi matriks Pauli mempunyai hubungan menarik yang boleh kita terokai. Sepanjang pelajaran ini, kita akan menguji secara eksperimen intuisi kita untuk ketidakpastian dalam pemboleh ubah tidak serasi ini, dan mengesahkan bahawa hubungan ketidakpastian berlaku pada komputer kuantum IBM®.

Semakan mudah intuisi

Dalam eksperimen pertama ini dan sepanjang modul, kita akan menggunakan rangka kerja pengkomputeran kuantum yang dikenali sebagai "corak Qiskit", yang memecahkan aliran kerja kepada langkah-langkah berikut:

  • Langkah 1: Petakan input klasik kepada masalah kuantum
  • Langkah 2: Optimumkan masalah untuk pelaksanaan kuantum
  • Langkah 3: Laksanakan menggunakan Primitif Qiskit Runtime
  • Langkah 4: Pascapemprosesan dan analisis klasik

Kita akan mengikuti langkah-langkah ini secara amnya, walaupun kita mungkin tidak selalu melabelnya secara eksplisit.

Mari kita mulakan dengan memuatkan beberapa pakej yang diperlukan termasuk primitif Runtime. Kita juga akan memilih komputer kuantum yang paling kurang sibuk yang tersedia untuk kita.

Terdapat kod di bawah untuk menyimpan kelayakan kamu pada penggunaan pertama. Pastikan untuk memadamkan maklumat ini daripada buku nota selepas menyimpannya ke persekitaran kamu, supaya kelayakan kamu tidak terdedah secara tidak sengaja apabila berkongsi buku nota. Lihat Sediakan akaun IBM Cloud anda dan Mulakan perkhidmatan dalam persekitaran tidak dipercayai untuk panduan lanjut.

from numpy import pi

# Load the Qiskit Runtime 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)
ibm_sherbrooke

Jika pelajar kehabisan masa pengkomputeran kuantum yang tersedia semasa pelajaran, baris di bawah boleh dinyahulasan dan digunakan untuk menyediakan simulator yang sebahagiannya meniru tingkah laku hingar komputer kuantum yang dipilih di atas.

# 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}})

Kamu mungkin ingat bahawa keadaan eigen bagi satu operator, Z, bukanlah keadaan eigen bagi operator lain X. Kita akan memerhatikannya sekarang, secara eksperimen dengan membuat pengukuran sepanjang paksi xx dan zz. Untuk pengukuran sepanjang zz, kita hanya menggunakan qc.measure(), kerana komputer kuantum IBM distrukturkan untuk mengukur sepanjang zz. Tetapi untuk mengukur sepanjang xx, kita mesti memutar sistem untuk memindahkan paksi xx ke orientasi yang kita ukur. Ini dilakukan dengan Gate Hadamard. Terdapat langkah yang serupa diperlukan untuk pengukuran sepanjang yy. Langkah-langkah yang diperlukan dikumpulkan di sini untuk kemudahan:

  • Untuk mengukur sepanjang zz: qc.measure()
  • Untuk mengukur sepanjang xx: qc.h() kemudian qc.measure()
  • Untuk mengukur sepanjang yy: qc.sdg(), qc.h(), qc.s kemudian qc.measure()

Langkah 1: Petakan input klasik kepada masalah kuantum

Dalam kes ini, langkah pemetaan hanyalah menyatakan pengukuran dan putaran yang diterangkan di atas dalam Circuit kuantum:

# 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 of the previous code cell

Langkah 2: Optimumkan masalah untuk pelaksanaan kuantum

Langkah ini mengambil operasi yang ingin kita lakukan dan menyatakannya dari segi fungsi komputer kuantum tertentu. Ia juga memetakan masalah kita ke atas susun atur komputer kuantum.

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

Langkah 3: Laksanakan menggunakan primitif Qiskit Runtime

Kita boleh menggunakan Sampler untuk mengumpul statistik pengukuran. Kita akan membina primitif Sampler untuk dijalankan pada komputer kuantum sebenar menggunakan mode = backend. Terdapat mod lain untuk aliran kerja lain, dan kita akan menggunakannya di bawah. Sampler akan digunakan dengan memanggil kaedah run() dengan senarai "PUB" (Primitive Unified Blocs). Setiap PUB mengandungi sehingga tiga nilai yang, bersama-sama, mentakrifkan unit pengiraan kerja untuk estimator lengkapkan: Circuit, boleh cerap, parameter. Kamu juga boleh menyediakan senarai Circuit, senarai boleh cerap, dan senarai parameter. Untuk maklumat lanjut, baca Gambaran keseluruhan PUB.

Kita ingin menjalankan pada komputer kuantum sebenar, supaya kita melakukan eksperimen fizik kuantum yang sebenar. Jika kamu kehabisan masa yang diperuntukkan pada komputer kuantum sebenar, kamu boleh mengulasan kod di bawah untuk komputer kuantum, dan menyahulasan kod untuk menjalankan pada simulator.

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

Langkah 4: Pascapemprosesan

Ini adalah kes pascapemprosesan yang sangat mudah, di mana kita hanya memvisualisasikan kiraan.

Perhatikan bahawa Qiskit menyusun Qubit, pengukuran, dan perkara lain dengan menyenaraikan item bernombor terendah terakhir / di sebelah kanan, satu konvensyen yang disebut sebagai "little-endian". Ini bermakna lajur di bawah yang berlabel "10" merujuk kepada kiraan di mana pengukuran pertama menghasilkan "0", dan pengukuran kedua menghasilkan "1".

# Step 4: Post-process

from qiskit.visualization import plot_histogram

plot_histogram(counts)

Output of the previous code cell

Jika konvensyen ini tidak menarik minat kamu, kamu boleh menggunakan marginal_counts untuk memvisualisasikan hasil setiap pengukuran secara berasingan:

from qiskit.result import marginal_counts

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

Output of the previous code cell

plot_histogram(
marginal_counts(counts, indices=[1]), title="Counts after second measurement"
)

Output of the previous code cell

Secara lalai, keadaan dalam Qiskit dimulakan kepada keadaan 0|0\rangle. Jadi tidak hairanlah hampir semua pengukuran pertama menghasilkan 0|0\rangle. Walau bagaimanapun, perhatikan bahawa terdapat hampir pembahagian sama rata dalam pengukuran kedua (yang memberi maklumat tentang unjuran keadaan pada xx). Nampaknya keadaan yang memberi kita hasil pengukuran yang sangat dapat diramal sepanjang zz memberi kita set hasil yang sangat tidak dapat diramal untuk pengukuran sepanjang xx. Mari kita terokai ini.

Apa yang berlaku jika kita membuat pengukuran dalam urutan yang bertentangan? Kita boleh mulakan dengan menggunakan Gate Hadamard untuk mendapatkan statistik mengenai kebarangkalian 0|0\rangle diukur dalam ±x|\pm\rangle_x. Kemudian untuk pengukuran kedua, kita akan bertukar kembali ke asas zz menggunakan Gate Hadamard kedua.

# 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 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 of the previous code cell

Di sini, kita seolah-olah mempunyai kurang kebolehramalan! Sebelum ini, sekurang-kurangnya kita mengetahui apakah hasilnya untuk pengukuran pertama, kini kita mempunyai taburan yang agak sekata merentasi semua keadaan yang mungkin. Tidak terlalu sukar untuk melihat mengapa ini berlaku. Kita bermula dalam 0|0\rangle, yang merupakan campuran 50-50 antara +x|+\rangle_x dan x|-\rangle_x, menurut 0=12(+x+x)|0\rangle=\frac{1}{\sqrt{2}}(|+\rangle_x+|-\rangle_x) Jadi jelas terdapat kebarangkalian yang sama untuk memperoleh keadaan + atau - (dipetakan kepada 0 dan 1 dalam carta) untuk pengukuran pertama. Pengukuran sepanjang xx meruntuhkan keadaan ke dalam keadaan eigen +x|+\rangle_x atau keadaan eigen x|-\rangle_x. Setiap satu daripada keadaan tersebut merupakan campuran 50-50 antara 0|0\rangle dan 1|1\rangle, menurut +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) Jadi apabila sistem berada dalam keadaan eigen xx, jelas bahawa pengukuran sepanjang zz akan menghasilkan kedua-dua 0|0\rangle dan 1|1\rangle, dan akan berbuat demikian dengan kebarangkalian yang lebih kurang sama. Jadi contoh pertama kita menunjukkan bahawa ada keadaan yang mempunyai hasil yang sangat dapat diramal untuk sesetengah pengukuran, tetapi hasil yang tidak dapat diramal untuk pengukuran lain. Contoh semasa menunjukkan kita boleh lebih teruk daripada itu. Terdapat keadaan yang boleh memberi kita hasil yang tidak dapat diramal untuk kedua-dua pengukuran, walaupun jika kita hanya menukar turutan pengukuran. Mari kita selidiki betapa pasti atau tidak pastinya suatu kuantiti bagi keadaan tertentu.

Mengira ketidakpastian

Kita boleh mengukur ini menggunakan ketidakpastian, atau varians. "Ketidakpastian" sering ditakrifkan sebagai punca kuasa dua "varians" suatu taburan. Iaitu, ketidakpastian untuk beberapa boleh cerap SS dinotasikan sebagai ΔS\Delta S dan diberikan oleh

(Δ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}

Untuk kes matriks Pauli, yang mana S2=IS^2 = I, ini menjadi

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

Mari kita terapkan ini pada contoh konkrit. Mari kita mulakan dengan keadaan ψ=+y=12(1i),|\psi\rangle = |+\rangle_y = \frac{1}{\sqrt{2}}\begin{pmatrix} 1 \\ i \end{pmatrix}, dan mari kita tentukan ketidakpastian boleh cerap XX dalam keadaan tersebut.

Uji kefahaman kamu

Baca soalan di bawah, fikirkan jawapan kamu, kemudian klik segi tiga untuk mendedahkan penyelesaian.

Kira ketidakpastian XX dalam keadaan +y=+i|+\rangle_y = |+i\rangle, secara tangan.

Jawapan:

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

Dalam keadaan yang diberikan, ini menghasilkan:

Δ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}

Kita boleh mencipta keadaan awal yang sewenang-wenang menggunakan qc.initialize(). Perhatikan bahawa sintaks untuk unit khayalan di sini ialah 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)
-0.02408454165642664

Menurut persamaan kita di atas, (Δ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... Mari kita kekal dengan keadaan yang sama, tetapi cari nilai jangkaan ZZ, sekarang:

# 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)
0.04958271968581247

Kita boleh melakukan matematik yang sama seperti sebelum ini, tetapi kita akan melihat bahawa varians kembali sangat hampir dengan 1.0. Kita boleh menyimpulkan bahawa ΔXΔZ1.0\Delta X \Delta Z \approx 1.0. Memang ini kira-kira betul untuk keadaan yang kita pilih. Tetapi bolehkah kita lakukan lebih baik? Atau lebih teruk?

Ingat bahawa terdapat hubungan ketidakpastian antara kedudukan sepanjang satu arah, x,x, dan momentum sepanjang arah yang sama, px.p_x. Untuk pemboleh ubah tersebut, bentuk yang paling biasa adalah mungkin ΔxΔpx/2\Delta x \Delta p_x \geq \hbar/2 Jika ini sahaja yang kita ingat, kita mungkin tergoda untuk berfikir bahawa ΔX\Delta X dan ΔZ\Delta Z juga boleh mempunyai had asas sedemikian pada ketidakpastian. Mungkin adalah mustahil untuk hasil darab ΔXΔZ\Delta X \Delta Z mencapai sifar? Mari kita cuba keadaan lain dan lihat sama ada ini berlaku. Kali ini, kita akan menggunakan ψ=12(11).|\psi\rangle = \frac{1}{\sqrt{2}}\begin{pmatrix} 1 \\ 1 \end{pmatrix}. Mari lihat apa yang berlaku. Perhatikan bahawa dalam kod di bawah, estimator boleh menerima dua set Circuit dan boleh cerap dalam penghantaran kerja yang sama.

# 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)
The expectation value of the first observable is:  1.0011036174126302
The expectation value of the second observable is: 0.0029429797670141016

Nilai jangkaan XX sepatutnya hampir dengan 1.0, tetapi tidak seharusnya melebihi 1.0. Jangan risau jika ia melebihi 1.0 dengan jumlah yang sangat kecil. Ini boleh dikaitkan dengan faktor seperti hingar dan/atau ralat pembacaan. Walaupun ini adalah topik yang sangat penting, kita boleh mengabaikannya buat masa ini.

Kita mendapat nilai jangkaan XX yang sangat hampir dengan 1.0 (sepadan dengan varians yang sangat rendah untuk XX). Ini menjadikan hasil darab kedua-dua varians agak rendah:

Δ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.

Walaupun ini bukan tepat sifar, nilai ini semakin kecil berbanding dengan nilai eigen operator Pauli (±1\pm 1). Nah, kamu mungkin ingat bahawa hubungan ketidakpastian antara kedudukan linear dan momentum boleh ditulis secara berbeza, secara eksplisit menggunakan hubungan penukaran antara operator xx dan pxp_x:

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

di mana

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

ialah penukaran bagi xx dan pxp_x.

Inilah bentuk yang paling mudah dilanjutkan kepada operator Pauli. Secara umumnya, untuk dua operator AA dan BB,

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

Dan dalam kes matriks Pauli XX dan ZZ, kita memerlukan [X,Z][X,Z] untuk mengira

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

Kita tunjukkan ini di sini, dan tinggalkan pengiraan yang serupa kepada pembaca sebagai latihan:

[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}

Ini adalah jawapan yang boleh diterima sepenuhnya, tetapi dengan satu langkah lagi, kita melihat

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

Hubungan ketidakpastian kita dengan itu menjadi

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

Uji kefahaman kamu

Baca soalan di bawah, fikirkan jawapan kamu, kemudian klik segi tiga untuk mendedahkan penyelesaian.

Tentukan [X,Y][X,Y] dan [Y,Z][Y,Z]. Gunakan ini untuk menulis hubungan ketidakpastian antara XX & YY, dan YY & ZZ.

Jawapan:

[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

Menggabungkan dengan hubungan ketidakpastian umum, kita mendapat

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

Sahkan konsistensi

Sebelum meneruskan, mari kita semak bahawa ini konsisten dengan penemuan kita sebelumnya. Kita menggunakan keadaan ψ=12(11).|\psi\rangle = \frac{1}{\sqrt{2}}\begin{pmatrix} 1 \\ 1 \end{pmatrix}. Dan kita mendapati bahawa ΔXΔZ=0.171.\Delta X \Delta Z = 0.171. Kini kita tahu hasil darab ini seharusnya lebih besar atau sama dengan

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.

Jadi memang, ΔXΔZ=0.171Y=0\Delta X \Delta Z = 0.171 \geq |\langle Y \rangle|=0 Gunakan soalan di bawah untuk membina intuisi tentang penemuan-penemuan ini:

Uji kefahaman kamu

Baca soalan-soalan di bawah, fikirkan jawapan kamu, kemudian klik segi tiga untuk mendedahkan penyelesaian.

Jawab item-item berikut bersama-sama sebagai satu set:

(a) Keadaan apakah yang kamu jangkakan mempunyai ketidakpastian sifar dalam XX?

(b) Keadaan apakah yang kamu jangkakan mempunyai ketidakpastian sifar dalam ZZ?

(c) Dalam keadaan apakah kamu akan mendapat nilai jangkaan sifar Y\langle Y \rangle?

(d) Adakah jawapan kepada soalan-soalan di atas konsisten dengan kes ΔXΔZY\Delta X \Delta Z \geq |\langle Y \rangle|?

(e) Tulis kod untuk menyemak ini secara eksplisit menggunakan estimator.

Jawapan:

(a) Kita mungkin mengharapkan keadaan eigen operator XX menghasilkan ketidakpastian sifar dalam XX. Memang, menggunakan ψ=+x,|\psi\rangle = |+\rangle_x, kita mendapat ΔX=1X2=112=0.\Delta X = \sqrt{1-\langle X \rangle^2} = \sqrt{1-1^2} = 0.

(b) Kita mungkin mengharapkan keadaan eigen operator ZZ menghasilkan ketidakpastian sifar dalam ZZ. Memang, menggunakan ψ=1,|\psi\rangle = |1\rangle, kita mendapat ΔZ=1Z2=1(1)2=0.\Delta Z = \sqrt{1-\langle Z \rangle^2} = \sqrt{1-(-1)^2} = 0.

(c) Kita jangkakan mendapat Y=0\langle Y \rangle=0 untuk sebarang keadaan yang, apabila diukur, menghasilkan unjuran positif pada paksi yy sama kerap dengan unjuran negatif. Ini termasuk keadaan eigen bagi XX dan ZZ.

(d) Ya. Seseorang jangka nilai yang sangat kecil untuk hasil darab ketidakpastian ΔXΔZ\Delta X \Delta Z bagi keadaan eigen XX atau ZZ: ΔXΔZ0.\Delta X \Delta Z \approx 0. Ini boleh berlaku kerana kita juga jangkakan Y=0\langle Y \rangle=0 untuk keadaan-keadaan yang sama. Jadi hubungan ketidakpastian boleh dipenuhi.

(e) Kod seperti berikut akan mengesahkan ini:

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

Di mana hasilnya mengembalikan semua nilai jangkaan. Untuk mendapatkan semua nilai jangkaan dan mengira ketidakpastian, kita boleh menggunakan:

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

Jawab item-item berikut bersama-sama sebagai satu set:

(a) Bolehkah kamu fikirkan satu keadaan di mana kamu akan mempunyai nilai jangkaan yang besar Y\langle Y \rangle?

(b) Adakah kamu jangkakan keadaan yang sama mempunyai ketidakpastian besar atau kecil dalam XX?

(c) Adakah kamu jangkakan keadaan yang sama mempunyai ketidakpastian besar atau kecil dalam ZZ?

(d) Adakah jawapan kepada soalan-soalan di atas konsisten dengan kes ΔXΔZY\Delta X \Delta Z \geq |\langle Y \rangle|?

(e) Tulis kod untuk menyemak ini secara eksplisit menggunakan estimator.

Jawapan:

(a) Kita jangkakan mendapat Y1\langle Y \rangle\approx 1 untuk keadaan eigen YY: +y|+\rangle_y.

(b) Kita mungkin jangkakan XX mempunyai ketidakpastian besar dalam keadaan +y,|+\rangle_y, kerana mengukur XX dalam keadaan itu akan menghasilkan keputusan positif dan negatif dengan frekuensi/kebarangkalian yang sama.

(c) Kita mungkin jangkakan ZZ mempunyai ketidakpastian besar dalam keadaan +y,|+\rangle_y, kerana mengukur ZZ dalam keadaan itu akan menghasilkan keputusan positif dan negatif dengan frekuensi/kebarangkalian yang sama.

(d) Ya. Seseorang jangka nilai yang besar untuk hasil darab ketidakpastian ΔXΔZ\Delta X \Delta Z bagi keadaan eigen Y,Y, dan untuk +y,|+\rangle_y, khususnya. Kita juga jangkakan Y1\langle Y \rangle\approx 1 untuk keadaan yang sama. Jadi kedua-dua Y\langle Y \rangle dan ΔXΔZ\Delta X \Delta Z adalah agak besar dalam keadaan ini, dan adalah munasabah bahawa hubungan ketidakpastian boleh dipenuhi sekali lagi.

(e) Kod seperti berikut akan mengesahkan ini:

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

Di mana hasilnya mengembalikan semua nilai jangkaan. Untuk mendapatkan semua nilai jangkaan dan mengira ketidakpastian, kita boleh menggunakan:

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

Menguji hubungan ketakpastian

Ujian di atas hanya menunjukkan kesahihan hubungan ketakpastian untuk satu pilihan vektor keadaan ψ=+x|\psi\rangle = |+\rangle_x. Supaya kita lebih yakin bahawa ini secara amnya konsisten dengan eksperimen, kita perlu menjalankan pengiraan serupa menggunakan Estimator untuk pelbagai pilihan vektor keadaan. Mari kita mulakan dengan memutar vektor keadaan kita menjauhi paksi zz, menggunakan Gate RY untuk menghasilkan keadaan awal yang berbeza menggunakan parameter θ\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 of the previous code cell

Perhatikan bahawa lengkung merah (ΔXΔZ)(\Delta X \Delta Z) sentiasa lebih besar daripada lengkung oren Y.\langle Y \rangle. Kadang-kadang hasil darab ketakpastian menurun dan agak hampir dengan had, dan kadang-kadang ia naik dan lebih jauh dari had, tetapi ia sentiasa mematuhi hubungan ketakpastian.

Sudah tentu, ini mungkin bukan ujian terbaik bagi hubungan ketakpastian, memandangkan had kita Y\langle Y \rangle sentiasa sangat hampir dengan sifar. Mari kita gunakan keadaan kuantum yang mempunyai unjuran lebih besar pada eigenkeadaan YY. Khususnya, kita masih akan memutar 0|0\rangle menjauhi paksi zz pada sudut yang berbeza-beza, tetapi kini kita juga akan memutar keadaan tersebut mengelilingi zz pada sudut tertentu, mungkin π/4\pi/4, dan lihat apa yang berlaku.

# 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 of the previous code cell

Kini kita dapat lihat bahawa had ketakpastian (ΔXΔZ)(\Delta X \Delta Z) sedang diuji dengan lebih ketat! Lengkung merah kini jauh lebih hampir dengan lengkung oren berbanding sebelum ini. Bahkan, tanpa kehadiran hingar, hubungan ketakpastian akan tepat-tepat tepu ((ΔXΔZ)=Y(\Delta X \Delta Z) = \langle Y \rangle) pada satu titik. Dengan kehadiran hingar dan ralat pembacaan, tidak menghairankan jika sesuatu larian sesekali menghasilkan (ΔXΔZ)(\Delta X \Delta Z) yang sedikit lebih besar daripada Y.\langle Y \rangle. Ini bukan pelanggaran sebenar terhadap ketakpastian; ia hanyalah kesan sampingan daripada ralat yang tidak sifar.

Semak kefahaman anda

Baca soalan-soalan di bawah, fikirkan jawapan anda, kemudian klik segi tiga untuk mendedahkan penyelesaiannya.

Terangkan bagaimana anda akan mendorong ini ke had mutlak, menjadikan Y\langle Y \rangle sebesar mungkin?

Jawapan:

Kod ini kini mempunyai baris-baris yang memutar keadaan awal lalai 0|0\rangle, turun dari paksi zz pada sudut berparameter θ\theta dan kemudian juga mengelilingi paksi zz pada sudut π/4,\pi/4, yang memutar vektor keadaan sebahagian jalan ke arah paksi yy.

qc.ry(theta,0)

qc.rz(pi/4,0)

Kita boleh menukar putaran sekitar zz dari π/4\pi/4 kepada π/2\pi/2, memutar sepenuhnya ke eigenkeadaan YY:

qc.ry(theta,0)

qc.rz(pi/2,0)

Tiada perubahan lain yang diperlukan.

Ubah kod atau salin kod tersebut dan laksanakan pemeriksaan hubungan ketakpastian dengan nilai jangkaan Y yang dimaksimumkan. Adakah hubungan ketakpastian masih berlaku?

Jawapan:

Kita akan menggunakan kod dari contoh di atas, dengan

qc.rz(pi/2,0)

digantikan untuk menggantikan

qc.rz(pi/4,0).

Rajah yang terhasil seharusnya kelihatan seperti yang di bawah, dan ya, prinsip ketakpastian masih harus sah.

A plot comparing uncertainty to the maximum expectation value of the Y operator.

Ubah suai kod di atas untuk membuat gambar yang serupa, menunjukkan bahawa dari pengukuran pada komputer kuantum, hasil darab ΔXΔY\Delta X \Delta Y berkelakuan sebagaimana mestinya. Pilih mana-mana set keadaan yang anda suka.

Jawapan:

Kita akan menggunakan kod dari contoh di atas, dan sebenarnya kita boleh menggunakan keputusan yang sama dari atas, hanya menggunakan nilai jangkaan untuk mengira ketakpastian yang berbeza. Sebagai contoh, kita boleh menggunakan

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)

dan kita boleh plot

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

Cabaran: Tulis kod untuk mengimbas pelbagai nilai ϕ\phi, sama seperti kita mengimbas pelbagai nilai θ\theta, dan buat plot 3-D yang menunjukkan bahawa hubungan ketakpastian tidak pernah dilanggar. Pilih mana-mana pemerhati yang anda suka.

Soalan

Pengajar boleh meminta versi buku nota ini dengan kunci jawapan dan panduan penempatan dalam kurikulum biasa dengan mengisi tinjauan ringkas ini tentang cara buku nota digunakan.

Konsep utama:

  • Terdapat hubungan ketakpastian antara banyak set pemboleh ukur fizikal, termasuk kedudukan & momentum linear, dan komponen spin.
  • Matriks Pauli tidak bertukar tertib. Ini adalah cerminan matematik daripada hakikat bahawa tidak semua komponen spin boleh diketahui/ditentukan secara serentak.
  • Pengkomputeran kuantum banyak menggunakan pengendali/matriks Pauli, jadi adalah berguna untuk mengetahui hubungan ketakpastian bagi pengendali Pauli, serta pengendali spin yang berkait rapat dengannya.
  • Formula umum untuk ketakpastian dua pengendali AA dan BB ialah ΔAΔB12[A,B].\Delta A \Delta B \geq \frac{1}{2}|\langle [A,B] \rangle|.
  • Keadaan eigen a|a\rangle bagi sesuatu pengendali AA menghasilkan ketakpastian sifar dalam pemboleh ukur fizikal yang berkaitan dengan pengendali tersebut. Walaupun secara eksperimen, aAa0.\langle a|A|a\rangle \approx 0.
  • Keadaan eigen a|a\rangle bagi sesuatu pengendali AA akan menghasilkan ketakpastian yang lebih besar bagi pengendali BB yang tidak bertukar tertib dengan AA.
  • Keputusan eksperimen menggunakan komputer kuantum sebenar mengesahkan intuisi yang kita perolehi daripada perwakilan matriks pengendali fizikal.

Soalan B/S:

  1. B/S Seseorang boleh mengukur XX dan YY secara serentak, tetapi bukan ZZ.
  2. B/S Seseorang boleh mengukur XX dan ZZ secara serentak, tetapi bukan YY.
  3. B/S Pengendali kedudukan linear dan momentum linear tidak bertukar tertib.
  4. B/S Komputer kuantum IBM mengukur sepanjang ZZ secara lalai, jadi putaran mesti dilakukan untuk mengukur sepanjang arah lain.
  5. B/S Litar di bawah secara berkesan mengukur ZZ kemudian XX.

Gambar rajah litar yang menunjukkan pengukuran, Gate Hadamard, kemudian pengukuran lain.

Soalan Aneka Pilihan:

  1. Rajah di bawah menunjukkan hubungan ketakpastian yang mana antara berikut?

    • 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. Tiada yang di atas

Plot yang membandingkan ketakpastian dengan nilai jangkaan maksimum bagi pengendali Y.

  1. Yang manakah antara berikut merupakan urutan standard untuk melakukan pengukuran sepanjang xx?

    • a. Hanya qc.measure()
    • b. qc.h() kemudian qc.measure()
    • c. qc.h(), qc.h() kemudian qc.measure()
    • d. qc.h(), qc.s, qc.h() kemudian qc.measure()
    • e. qc.sdg(), qc.h(), qc.s kemudian qc.measure()
    • f. qc.sdg(), qc.h(), qc.s, qc.h() kemudian qc.measure()
  2. Yang manakah antara keadaan berikut menghasilkan nilai jangkaan terbesar X\langle X \rangle?

    • a. +x|+\rangle_x
    • b. x|-\rangle_x
    • c. +y|+\rangle_y juga dikenali sebagai +i|+i\rangle
    • d. y|-\rangle_y juga dikenali sebagai i|-i\rangle
    • e. 0|0\rangle juga dikenali sebagai |\uparrow\rangle
    • f. 1|1\rangle juga dikenali sebagai |\downarrow\rangle
  3. Yang manakah antara keadaan berikut menghasilkan ketakpastian terbesar ΔX\Delta X?

    • a. +x|+\rangle_x
    • b. +y|+\rangle_y juga dikenali sebagai +i|+i\rangle
    • c. 0|0\rangle juga dikenali sebagai |\uparrow\rangle
    • d. a dan b seri
    • e. b dan c seri
    • f. a, b, dan c seri

Soalan Perbincangan:

  1. Adakah konsep ketakpastian ini bercanggah dengan tanggapan spin sebagai anak panah vektor dalam ruang Cartesian? Bagaimana pula pada sfera Bloch?

  2. Andaikan kamu mengarahkan alat pengukuran ke arah yang berada di pertengahan antara paksi xx dan yy. Apa yang berlaku? Bolehkah kamu membuat pengukuran ke arah ini? Bagaimana ini berkaitan dengan ketakpastian dalam XX dan YY?

  3. Apakah eksperimen tambahan yang ingin kamu lakukan untuk meyakinkan diri kamu tentang keputusan yang diperolehi di sini?

Source: IBM Quantum docs — updated 27 Apr 2026
English version on doQumentation — updated 7 Mei 2026
This translation based on the English version of approx. 27 Mac 2026