Přeskočit na hlavní obsah

Experiment Stern-Gerlach na kvantových počítačích

Pro tento modul Qiskit ve třídě musí mít studenti funkční prostředí Python s nainstalovanými následujícími balíčky:

  • qiskit v2.1.0 nebo novější
  • qiskit-ibm-runtime v0.40.1 nebo novější
  • qiskit-aer v0.17.0 nebo novější
  • qiskit.visualization
  • numpy
  • pylatexenc

Pokud chceš nainstalovat výše uvedené balíčky, podívej se do průvodce Instalace Qiskit. Abys mohl(a) spouštět úlohy na skutečných kvantových počítačích, budeš si muset vytvořit účet u IBM Quantum® podle kroků v průvodci Nastavení účtu IBM Cloud.

Tento modul byl testován a spotřeboval 2 sekundy QPU času. Jedná se pouze o odhad. Tvoje skutečné využití se může lišit.

# Added by doQumentation — required packages for this notebook
!pip install -q 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'

Níže si můžeš prohlédnout průvodce modulem od Dr. Katie McCormick, nebo ho sledovat na YouTube kliknutím zde.


Pozadí

Na počátku 20. století přibývalo důkazů kvantovaného chování na atomárních škálách. Mnohé úspěšné interpretace dat, jako třeba vysvětlení ultrafialové katastrofy Maxem Planckem, a experimenty jako ten Otty Sterna a Walthera Gerlacha byly klíčové pro přesvědčení světa, že systém kvantové mechaniky je nezbytný a že určité fyzikální jevy jsou kvantovány. V případě experimentu Stern-Gerlach (navrženého Sternem v roce 1921 a provedeného Sternem a Gerlachem v roce 1922) bylo cílem ověřit kvantování momentu hybnosti v atomech.

Přibližně ve stejné době byl převládajícím modelem atomu Bohr-Sommerfeldův model, který byl rozšířením Bohrova modelu. Stejně jako Bohrův model předpovídal, že elektrony existují v určitých kvantovaných drahách podobných planetám obíhajícím kolem Slunce.

Diagram Bohr-Sommerfeldova modelu. Centrální bod představuje jádro atomu. Kružnice nebo elipsy kolem tohoto bodu znázorňují atomové orbitaly, které velmi připomínají planetární dráhy kolem Slunce. Orbitaly s vyšší energií jsou dál od jádra.

Ačkoli tento přístup se nakonec ukázal jako nedostačující pro vysvětlení kvantově mechanického chování atomu, v širším měřítku předpovídal mnoho pozorovaných jevů, například diskrétní spektrální čáry atomů. Kvantované dráhy elektronů se specifickými energiemi odpovídají kvantovaným hodnotám momentu hybnosti. Právě tento orbitální moment hybnosti se Stern a Gerlach snažili pozorovat ve svém experimentu, ačkoli experiment se vztahuje na jakýkoli typ kvantovaného momentu hybnosti, včetně spinu. Experiment Stern-Gerlach se často zmiňuje v souvislosti se spiny. Zaměření původního experimentu bylo na orbitální moment hybnosti prostě proto, že George Uhlenbeck a Samuel Goudsmit by existenci spinu nepostulovali až do roku 1925.

Bez ohledu na typ momentu hybnosti má náboj s momentem hybnosti magnetický moment. V klasickém pojetí orbitálního pohybu bychom očekávali, že částice s nábojem qq, hmotností mm a momentem hybnosti L\vec{L} bude mít magnetický moment μ\mu daný vztahem

μ=q2mL\vec{\mu} = \frac{q}{2m}\vec{L}

Ukazuje se, že téměř stejný vzorec platí pro kvantově mechanický moment hybnosti, s tím rozdílem, že se přidává číselný poměr relacionovaný s typem momentu hybnosti, tzv. g-faktor gg. Při kombinování různých typů momentu hybnosti nebo zobecnění na libovolný typ se místo L\vec{L} často používá J\vec{J}, takže píšeme:

μ=gq2mJ\vec{\mu} = \frac{gq}{2m}\vec{J}

Pro klasická tělesa platí g=1g=1. Pro elektrony platí g2g\approx 2 a pro různá jádra a subatomární částice existuje mnoho dalších hodnot. Hlavní myšlenka je, že kvantovaný moment hybnosti znamená kvantovaný magnetický moment!

Tento magnetický moment bude v magnetickém poli zažívat točivý moment:

τ=μ×B\vec{\tau}=\vec{\mu}\times \vec{B}

A v magnetickém poli s nenulovým gradientem bude zažívat sílu:

F=(μB)\vec{F} = \nabla(\vec{\mu}\cdot\vec{B})

Výše uvedený výraz budeme často uvažovat po složkách, takže může být pohodlné uvažovat jeho zz-složku:

Fz=μzdBzdzF_z = \mu_z \frac{dB_z}{dz}

Kombinací výrazů dostaneme

Fz=gq2mdBzdzJzF_z = \frac{gq}{2m} \frac{dB_z}{dz} J_z

Stern a Gerlach o gg-faktoru nevěděli, ale i s ním ve výrazu máme sílu rovnou součinu několika známých nebo měřitelných konstant a momentu hybnosti. Takže pomocí magnetického pole se známým gradientem a měřením vychýlení částice při průchodu polem bychom měli získat informaci o momentu hybnosti. To je podstata experimentu Stern-Gerlach.

Atomy stříbra procházející nehomogenním magnetickým polem a vychylované nahoru nebo dolů v závislosti na jejich spinu. Klasicky bychom očekávali spojité rozložení na stínítku, ale v experimentu vidíme dva odlišné body.

Obr. Experiment Stern-Gerlach[1]: Atomy stříbra procházející nehomogenním magnetickým polem a vychylované nahoru nebo dolů v závislosti na jejich spinu. Klasicky bychom očekávali spojité rozložení na stínítku, ale v experimentu vidíme dva odlišné body.

Neutrální atomy stříbra byly zahřívány v peci. Jak proud atomů stříbra vytékal z pece, byly použity kolimátory svazku k výběru pouze atomů cestujících blízko středu nehomogenního magnetického pole. Samozřejmě, některé atomy se trochu odchýlí doleva nebo doprava a zažívají slabší gradient pole nebo žádný gradient. Takže chování atomů daleko vlevo nebo vpravo nás příliš nezajímá. Zajímá nás, co se děje s atomy, které putují středem kanálu, kde gradient magnetického pole způsobí sílu vychylující atomy pouze ve směru zz.

Co bychom měli klasicky očekávat?

Jak by se tyto atomy chovaly, kdyby byly přesně jako masivní klasické magnety? Můžeš provést tento experiment. Představ si, že střílíš malé neodymové magnety kolem velkého, silného magnetu. Orientace malých magnetů je náhodná. Ale jak procházejí kolem velkého magnetu, rychle se přeorientovávají tak, aby se zarovnaly s polem, a jsou k velkému magnetu přitahovány. Naprostá většina malých magnetů je vychýlena směrem k velkému magnetu. Velmi pozorný pozorovatel by se mohl zeptat: „A co zachování energie?"

Skutečně, magnetický moment v externím magnetickém poli má s ním spojenou potenciální energii:

U=μB=μBcos(θ)U = -\vec{\mu}\cdot \vec{B} = -\mu B \cos(\theta)

Takže kdyby se magnetický moment v externím magnetickém poli otočil, nastala by změna energie daná vztahem:

ΔU=UfUi=μB(cos(θf)cos(θi)).\Delta U = U_f - U_i = -\mu B (\cos(\theta_f) - \cos(\theta_i)).

Ve zvláštním případě malého magnetu dokonale anti-zarovnaného s externím polem, který se překlopí a zarovná se s ním, by to odpovídalo poklesu potenciální energie:

ΔU=UfUi=μB(cos(0)cos(π))=2μB.\Delta U = U_f - U_i = -\mu B (\cos(0) - \cos(\pi)) = -2\mu B.

Kam tedy ta energie jde? Klasický magnet, jako třeba malý neodymový magnet na ledničku, má mnoho částic a může rozptýlit téměř libovolné množství energie jako teplo. Počáteční a konečný úhel mezi magnetickým momentem a externím magnetickým polem může být libovolný a alespoň počáteční orientace by byla náhodná. Každý malý magnet by tedy rozptýlil jiné množství energie jako teplo. Klasicky to však není problém, protože soubor klasických částic může rozptýlit libovolné množství energie jako teplo.

Co bychom měli očekávat při aplikaci klasického myšlení na atomární škály?

Přinejmenším to není stejné pro magnety na atomární škále, protože v hře je méně částic a méně stupňů volnosti, skrze které by mohla být energie rozptýlena. Návrhy rané kvantové mechaniky navíc navrhovaly, že energie, kterou může absorbovat jednotlivá částice, například elektron, by byla kvantována, to znamená, že elektron by mohl absorbovat pouze několik specifických množství energie. Protože náhodné počáteční orientace by vyžadovaly rozptyl náhodných množství energie, nebylo by to možné pro systém s kvantovanými energetickými hladinami. Přebytečná energie by nemohla být rozptýlena jako teplo. Co by se tedy stalo místo toho?

Ověř si porozumění

Přečti si níže uvedené otázky, zamysli se nad odpověďmi a klikni na trojúhelníky pro zobrazení řešení.

Vysvětli, co si myslíš, že by se stalo v situaci popsané výše. To znamená: máš atomárně malý magnet, který nemůže rozptýlit žádnou energii jako teplo. Takže veškerá počáteční magnetická potenciální energie musí zůstat v systému. Přesto je externím magnetickým polem aplikován točivý moment, který se snaží malý magnet otočit tak, aby se zarovnal s externím polem. Co se stane?

Odpověď:

Malý magnetický moment by se otáčel směrem k zarovnání s externím polem. Ale v momentě, kdy se dočasně zarovná, by měl rotační kinetickou energii, která by ho udržela v otáčení za pole a zpět mimo zarovnání. Toto chování lze pozorovat i u velkých klasických magnetů. Ale v těchto klasických systémech oscilace malého magnetického momentu nakonec ustane, protože energie se rozptýlí do tepla. V systému bez takového disipačního mechanismu by však oscilace měla pokračovat donekonečna.

Jaké rozložení magnetických částic bys očekával(a) na stínítku s ohledem na chování popsané ve výše uvedené odpovědi?

Odpověď:

Plynulé rozložení od určitého maximálního vychýlení směrem k silnější straně magnetického pole (ty částice, které začaly zarovnané s externím polem) k určitému maximálnímu vychýlení směrem ke slabší straně pole (ty částice, které začaly anti-zarovnané s externím polem), a každé vychýlení mezi nimi, odpovídající každé počáteční orientaci mezi těmito extrémy.

Diagram svazku částic procházejícího magnetem. Jsou vychylovány v různé míře podél směru magnetického pole. Takže když dopadají na vzdálené stínítko, tvoří čáru.

Co by předpovídala kvantová mechanika?

Snad nejpodivnější ze všech možností by bylo následující: Co kdyby byl moment hybnosti elektronu kvantován, ale také jeho průmět na nějakou osu byl rovněž kvantován? Kvantování momentu hybnosti jako velikosti je zajímavé, ale někdo by se mohl pokusit to vysvětlit pomocí klasické intuice, podobně jako planetární dráhy ustálily do pevných cest, které se nekříží, přičemž mají pouze určité povolené momenty hybnosti. Ale co kdyby tento vektor momentu hybnosti mohl ukazovat pouze přesně podél zz nebo přesně opačně podél zz, ale nemohl mít žádnou jinou složku podél zz? Co kdyby pak při měření podél jiného směru mohl vektor ukazovat pouze celý podél xx nebo celý opačně podél xx, a nic mezi tím? To by bylo podivné způsobem, který mate veškerou klasickou intuici.

Ověř si porozumění

Přečti si níže uvedenou otázku, zamysli se nad odpovědí a klikni na trojúhelník pro zobrazení řešení.

Jaké rozložení částic na stínítku bys očekával(a) v tomto posledním případě, kdy je průmět momentu hybnosti podél směru pole kvantován? Klidně uvaž pouze částice, které procházejí přesně středem zařízení, nebo i ty, které se mírně odchýlí na stranu, kde je gradient slabší. Jen buď explicitní.

Odpověď:

Částice ve středu zařízení by zažívaly jediné nehomogenní pole a u všech by bylo naměřeno, že mají jednu ze dvou orientací jejich magnetických momentů. Takže by byly vychýleny buď maximálně ve směru gradientu, nebo maximálně proti gradientu, a nic mezi tím. Na obou stranách, kde je gradient slabší, by bylo vychýlení menší. Na velmi velkých bočních pozicích mohou být zcela mimo gradient a mohla by tam být jen jedna oblast nevychýlených částic.

Diagram svazku částic vychylovaných buď nahoru nebo dolů, dopadajících na jeden ze dvou bodů na stínítku, přičemž mezi těmito dvěma maximy nejsou žádné částice

Jak nám Qubit pomůže toto otestovat?

Většina kvantových počítačů používá „qubity" – kvantové analogy klasických bitů. Konkrétněji jsou navrženy jako dvouúrovňové systémy, analogické stavům „zapnuto"/"vypnuto" klasických bitů. Existují kvantové výpočetní paradigmata, která využívají tříúrovňové systémy (tzv. „qutrits") nebo víceúrovňové systémy (tzv. „qudits"). Většina práce se však soustředí na qubity. Zejména kvantové počítače IBM® používají tzv. transmonové qubity s pevnou frekvencí. Ty se poměrně liší od orbitálního nebo spinového momentu hybnosti atomů. Ale stejně jako spin elektronu jsou qubity IBM® kvantově mechanické systémy, které mohou interagovat se světlem a na nichž lze provádět měření. Ve skutečnosti se často nacházejí analogie mezi stavy kvantově mechanického spinu a výpočetními stavy qubitu. Například se stav „spin nahoru" často asociuje s výpočetním stavem 0 a „spin dolů" se stavem 1:

0|\uparrow\rangle \sim |0\rangle 1|\downarrow \rangle \sim |1\rangle

Tyto podobnosti můžeme využít k pozorování kvantově mechanického chování na kvantových počítačích IBM, které napodobuje kvantově mechanické chování orbitálního nebo spinového momentu hybnosti v atomech. Budeme provádět podobná pozorování pomocí lineárních kombinací těchto stavů, které nám umožní rozšířit diskusi na moment hybnosti podél libovolného směru.

První experiment: Jediné měření

V tomto prvním experimentu a v celém modulu budeme používat framework pro kvantové výpočty známý jako „Qiskit patterns", který rozděluje pracovní postupy do následujících kroků:

  • Krok 1: Mapování klasických vstupů na kvantový problém
  • Krok 2: Optimalizace problému pro kvantové spuštění
  • Krok 3: Spuštění pomocí Qiskit Runtime Primitives
  • Krok 4: Post-processing a klasická analýza

Tyto kroky budeme obecně dodržovat, i když je ne vždy explicitně označíme.

Krok 1: Mapování klasických vstupů na kvantový problém

Klasickými vstupy jsou zde orientace spinu před měřením v Stern-Gerlachově zařízení. Nemusíš se příliš starat o přesnou povahu kvantového stavu před měřením. To je námětem jiného modulu Qiskit Classrooms, věnovaného Bellově větě.

Upozorňujeme, že kvantové počítače IBM měří stavy podél osy zz. Tento první experiment tedy bude velmi podobný Stern-Gerlachově experimentu s gradientem magnetického pole podél zz. Uvidíme, jak změnit systém tak, aby měřil podél různých směrů, později.

Začněme vytvořením analogu spinového stavu, tedy jakési směsi |\uparrow\rangle a |\downarrow\rangle, nebo ekvivalentně 0|0\rangle a 1|1\rangle. Navrhli jsme některé počáteční hodnoty. Neboj se ale experimentovat s jinými hodnotami nebo dokonce s náhodnými.

import random
from numpy import pi
import numpy as np

# Use these lines to choose your own arbitrary state vector and normalize it.
# a = 2
# b = (1+1j)
# norm = np.sqrt(a*np.conjugate(a)+b*np.conjugate(b))
# a = a/norm
# b = b/norm
# print(a,b)

# Use these lines if you would rather look at at random spin orientations.
a = random.random()
b = random.random()
norm = np.sqrt(a * np.conjugate(a) + b * np.conjugate(b))
a = a / norm
b = b / norm
print(a, b)
0.7032089086145691 0.7109832845047109

Nyní použijeme výše uvedené úhly jako parametry kvantového Circuit. Uvažujeme vždy jen jednu částici, takže v našem Circuit použijeme pouze jeden Qubit a budeme potřebovat pouze jeden klasický registr.

from qiskit.circuit import QuantumRegister, ClassicalRegister, QuantumCircuit, Parameter

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

# Initialize the quantum state
qc.initialize([a, b])
qc.measure(0, 0)
qc.draw("mpl")

Output of the previous code cell

Krok 2: Optimalizace problému pro kvantové spuštění

Abychom mohli náš experiment spustit na reálném kvantovém počítači, musíme načíst Qiskit Runtime Service a vybrat kvantový počítač (neboli „Backend"). Níže jednoduše vybereme nejméně vytížený kvantový počítač, který máme k dispozici.

Níže je kód pro uložení přihlašovacích údajů při prvním použití. Nezapomeň tyto informace z notebooku odstranit poté, co je uložíš do svého prostředí, aby se přihlašovací údaje nechtěně nesdílely spolu s notebookem. Více informací najdeš v článcích Set up your IBM Cloud account a Initialize the service in an untrusted environment.

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

# Syntax for specifying a channel and instance (if you need to change from the default set above)
# service = QiskitRuntimeService(channel='<channel name here>', instance="<your instance name here>")

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

# Use the least busy backend, specify options as needed
# backend = service.least_busy(operational=True, simulator=False, min_num_qubits = 127)
backend = service.least_busy()
print(backend.name)
ibm_sherbrooke

Nyní musíme Circuit transpilovat — to znamená, že musíme náš Circuit namapovat na základní Gate dostupné ve zvoleném kvantovém počítači, a chceme Circuit optimalizovat pro spuštění na tomto kvantovém počítači.

# Transpile the circuit and optimize for running on the quantum computer selected
from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager

pm = generate_preset_pass_manager(optimization_level=3, backend=backend)
qc_ibm = pm.run(qc)

Krok 3: Spuštění pomocí Qiskit Runtime Primitives

Nyní chceme spustit experiment na reálném kvantovém počítači. Veškerá potřebná syntaxe je v níže uvedeném bloku kódu. Pokud jsi vyčerpal/a svůj přidělený čas na reálných kvantových počítačích, nebo pokud nemáš přístup k internetu, můžeš odkomentovat následující blok kódu, který spustí kód na lokálním simulátoru.

# Specify that we want to use only a single shot, to represent a single measurement of a spin in a SG device.
num_shots = 1

# Evaluate the problem using a QPU via Qiskit IBM Runtime
# The best practice is to use a session as shown below. This is available to Premium Plan, Flex Plan, and On-Prem (IBM Quantum Platform API) Plan users.
with Session(backend=backend) as session:
sampler = Sampler(mode=session)
dist = sampler.run([qc_ibm], shots=num_shots).result()
session.close()
counts = dist[0].data.c.get_counts()

# Open users can still carry out this experiment, but without making use of a session, meaning repeated queuing is possible.
# from qiskit_ibm_runtime import Batch,
# batch = Batch(backend=backend)
# sampler = Sampler(mode=batch)
# dist = sampler.run([qc_ibm], shots=num_shots).result()
# Close the batch because no context manager was used.
# batch.close()
# counts = dist[0].data.c.get_counts()

Pokud nemůžeš experiment spustit na reálném kvantovém počítači, použij níže uvedený kód.

# This uses a local simulator
# from qiskit_aer import AerSimulator

# This generates a simulator that mimics the real quantum system
# backend_sim = AerSimulator.from_backend(backend)

# Import an estimator, this time from qiskit (we import from Runtime for real hardware)
# from qiskit.primitives import BackendSamplerV2
# sampler = BackendSamplerV2(backend = backend_sim)

# num_shots = 1

# This runs the job
# dist = sampler.run([qc_ibm], shots = num_shots).result()

# This selects measurement counts for the 0th circuit, which in this case is the only circuit
# counts=dist[0].data.c.get_counts()

Krok 4: Post-processing a klasická analýza

V tomto velmi jednoduchém experimentu spočívá klasická analýza pouze ve vizualizaci výsledku experimentu.

from qiskit.visualization import plot_histogram

print("counts = ", counts)
plot_histogram(counts)
counts =  {'0': 1}

Output of the previous code cell

Provedli jsme jedno měření a získali jsme hodnotu „0". To nás nijak nepřekvapuje. Víme, že pracujeme s kvantovým počítačem složeným z Qubitů a jsme zvyklí na to, že klasické bity vracejí 0 nebo 1. Ale mějme na paměti: toto je kvantový analogický pendant experimentů prováděných s částicemi s magnetickými momenty. Kdybychom očekávali rovnoměrné rozložení mezi 0 a +1, mohlo by nás skutečně překvapit, že jsme při prvním měření získali jedno krajní hodnoty. Právě tato překvapivá kvantizace výsledků ve Stern-Gerlachově experimentu nás přivedla k hlubšímu pochopení přírody a nakonec nám pomohla sestavit kvantové počítače.

Podívejme se, co se stane, když provedeme soubor měření.

Druhý experiment: Měření mnoha částic

Abychom získali statistiku z mnoha takových měření, nemusíme opakovat kroky 1 a 2. Stačí jednoduše zvýšit počet shotů v našem experimentu. Klidně si pohraj s počtem shotů v níže uvedené instanci kroku 3.

from qiskit_ibm_runtime import Session, SamplerV2 as Sampler

num_shots = 100

# Evaluate the problem using a QPU via Qiskit IBM Runtime
# The best practice is to use a session as shown below. This is available to Premium Plan, Flex Plan, and On-Prem (IBM Quantum Platform API) Plan users.
with Session(backend=backend) as session:
sampler = Sampler(mode=session)
dist = sampler.run([qc_ibm], shots=num_shots).result()
session.close()
counts = dist[0].data.c.get_counts()

# Open users can still carry out this experiment, but without making use of a session, meaning repeated queuing is possible.
# batch = Batch(backend=backend)
# sampler = Sampler(mode=batch)
# dist = sampler.run([qc_ibm], shots=num_shots).result()
# Close the batch because no context manager was used.
# batch.close()
# counts = dist[0].data.c.get_counts()

Stejně jako dříve, pokud nemůžeš spustit experiment na skutečném kvantovém počítači, odkomentuj blok z prvního experimentu uvedený výše a jednoduše změň num_shots = 1 na num_shots = 100 nebo více.

plot_histogram(counts)

Output of the previous code cell

Vidíme, že někdy naměříme 0 a někdy 1. Všimni si, že nikdy nenaměříme nic jiného! Můžeš změnit počet shotů a zpozorovat, že pravděpodobnost naměření 0 nebo 1 se zdá být poměrně konzistentní mezi různými spuštěními s různým počtem shotů. Zdá se tedy, že něco v přípravě stavu určuje pravděpodobnost výsledků měření, přestože každé jednotlivé měření může přinést výsledek 0 nebo 1.

Třetí experiment: Náhodné spiny v peci

V Stern-Gerlachově experimentu výzkumníci nemohli určit úhel, pod kterým by vektor momentu hybnosti vystupoval z pece. Orientace byly náhodné (nebo ještě záhadnější! Viz modul Qiskit Classroom o Bellově větě). Přiměřenou analogií tohoto experimentu by bylo náhodné inicializování stavů našeho Qubitu a opakované měření.

Krok 1: Mapování klasických vstupů na kvantový problém

Circuit, který chceme sestavit, je stejný jako dříve. Jediný rozdíl je v tom, že tentokrát sestavíme Circuit pomocí Gate s volnými parametry θ\theta a ϕ\phi. Číselné hodnoty těchto parametrů pak budou přiřazeny pro každý nový průběh.

# from qiskit.circuit import QuantumCircuit, Parameter

theta = Parameter("θ")
phi = Parameter("$\phi$")

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

# Add rotation gates for rotating the state of qubit 0 to random orientations
qc.rx(theta, 0)
qc.rz(phi, 0)
qc.measure(0, 0)

qc.draw("mpl")

Output of the previous code cell

Spuštění kvantového Circuit pro jediný shot a opakování pro mnoho náhodných konfigurací je neobvyklý pracovní postup pro kvantový počítač. Jistě to lze provést, ale pro jednoduchost zde použijeme lokální simulátor.

# This uses a local simulator
from qiskit_aer import AerSimulator

# Import an estimator, this time from qiskit (we import from Runtime for real hardware)
from qiskit.primitives import BackendSamplerV2

# This generates a simulator that mimics the real quantum system
backend_sim = AerSimulator.from_backend(backend)
sampler_sim = BackendSamplerV2(backend=backend_sim)

# from qiskit.primitives import BackendSamplerV2
# sampler = BackendSamplerV2(backend=backend)
# A list to store the accumulated probabilities of the two possible measurement outcomes.
probslist = {"0": 0.0, "1": 0.0}

# Choose how many "particles"/measurements
measurements = 100
num_shots = 1

for i in range(measurements):
# Assign a random orientation for each measurement
phi = random.random() * 2 * pi
theta = random.random() * 2 * pi

angles = [phi, theta]
circuit = qc.assign_parameters(angles)
qc_ibm = pm.run(circuit)

# Run the circuit
# job = sampler.run([circuit],num_shots = 1)
dist = sampler_sim.run([qc_ibm], shots=num_shots).result()

# Update the list of probabilities
zeroterm = dist[0].data.c.get_counts().get("0") or 0
oneterm = dist[0].data.c.get_counts().get("1") or 0
probslist.update({"0": probslist.get("0") + zeroterm})
probslist.update({"1": probslist.get("1") + oneterm})

probslist.update({"0": probslist.get("0") / measurements})
probslist.update({"1": probslist.get("1") / measurements})
# print(probslist)
plot_histogram(probslist)

Output of the previous code cell

Vidíme tedy, že náhodný počáteční stav Qubitů (odpovídající náhodným orientacím momentu hybnosti v Stern-Gerlachově experimentu) vede k podobnému počtu stavů 0 a 1 (podobně jako k podobnému počtu stavů spin nahoru a spin dolů). Přesně to ukázal původní Stern-Gerlachův experiment.

Čtvrtý experiment: Opakovaná měření

Když Qubit začíná v náhodném stavu, vidíme, že existuje přibližně 50% šance naměřit jeden extrém oproti druhému. Co se ale stane se stavem Qubitu (nebo momentem hybnosti částice) po měření? Abychom to zjistili, budeme muset definovat Circuit, který nám umožní provést více měření stejných Qubitů. Definujme Circuit, který k tomu můžeme využít. Budeme chtít umožnit možnost naměření obou stavů 0|0\rangle a 1|1\rangle, takže potřebujeme něco, čím otočíme počáteční stav Qubitu ze výchozího stavu 0|0\rangle. V tomto případě použijeme Hadamardův Gate HH, protože H0=12(0+1)H|0\rangle = \frac{1}{\sqrt{2}}(|0\rangle+|1\rangle). Všimni si, že ve výchozím nastavení budou obě tato měření probíhat podél osy zz.

from qiskit import QuantumCircuit

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

# Initialize the qubit to be a mixture of 0 and 1 states.
qc.h(0)

# Add a first measurement
qc.measure(0, 0)
qc.barrier()

# Add a second measurement
qc.measure(0, 1)

qc.draw("mpl")

qc_ibm = pm.run(qc)
# Step 3: Run the job

num_shots = 1000
dist = sampler.run([qc_ibm], shots=num_shots).result()
# To run on a simulator, uncomment the line below and comment out the line above.
# dist = sampler_sim.run([qc_ibm], shots=num_shots).result()
counts = dist[0].data.c.get_counts()
print(counts)
{'00': 497, '11': 498, '01': 3, '10': 2}
# Step 4: Post-process
plot_histogram(counts)

Output of the previous code cell

V obrázku výše jsou přihrádky označeny „00", „01" a tak dále. Tato čísla zde odkazují na „2. výsledek, 1. výsledek". „00" tedy znamená, že obě měření přinesla stav 0|0\rangle, a „01" znamená, že první měření přineslo 1|1\rangle a druhé 0|0\rangle. Naprostá většina Qubitů byla naměřena buď dvakrát ve stavu 0|0\rangle, nebo dvakrát ve stavu 1|1\rangle. Bylo velmi vzácné, aby byl Qubit naměřen v jednom stavu a pak ve stavu jiném; několik málo případů, kdy k tomu došlo (~1 %), je způsobeno šumem. V tomto případě byl tento šum simulován v souladu s chováním skutečného kvantového systému. Tato pozorovaná korelace mezi po sobě jdoucími měřeními je patrná i při Stern-Gerlachových měřeních částic se spinovým momentem hybnosti. Pokud je u částice naměřen stav „spin nahoru", krátce poté provedené následné měření opět přinese výsledek „spin nahoru" (s výjimkou drobné odchylky způsobené šumem).

To se může zdát triviální. Koneckonců, pokud je Qubit naměřen v určitém stavu a pak ho hned znovu změřím, proč by v tom stavu nebyl stále? Pokud se však opravdu zaměříme na tuto jemnost, může nám to pomoci vybrat matematické nástroje pro popis tohoto jevu.

Analýza dosavadních experimentů

Shrňme několik pozorování z našich dosavadních experimentů:

  • Měření kvantově mechanického systému vždy dá jen jednu z přípustných hodnot. U dvoustavových systémů, jako jsou Qubity nebo spin-1/2 částice, měření vždy dá jeden ze dvou binárních výsledků.
  • Pokud náhodně inicializujeme stav binárního systému (např. spin-1/2 částice vycházející z pece), je možný kterýkoli ze dvou binárních výsledků měření.
  • Jakmile je měření provedeno a stav systému je znám, opakování měření téže fyzikální veličiny stav nezmění! Tedy pokud jednou dostaneme stav 0, při dalším měření bude stále ve stavu 0 (s výjimkou drobného šumu v systému ~0,1 % až 1 %).

Všimni si, že jsme se dosud nezabývali probabilistickou povahou kvantové mechaniky, ani jsme nic neřekli o „kolapsu" stavu na vlastní stav. Pouze na základě výše uvedených pozorování by bylo lákavé hledat matematickou operaci OO, která ponechá určitou zvláštní množinu kvantově mechanických stavů ψ|\psi\rangle beze změny, až na možnou konstantu: Oψ=cψO|\psi\rangle = c|\psi \rangle, protože měření podél zz dvakrát po sobě dá stejný výsledek. Nakonec se ukáže, že tento přístup nedokáže popsat veškeré chování, které uvidíme. Ale něco popsat dokáže, takže ho ještě chvíli sledujme.

Taková operace skutečně existuje. Maticová operace na některých vektorech vektory změní, ale na jiných vektorech (vlastních vektorech) je ponechá beze změny, až na konstantu. Vezměme například matici MM a vektor v|v\rangle, kde

M=(1221)M= \begin{pmatrix} 1 & 2 \\ 2 & 1\end{pmatrix}

a

v=(11)|v\rangle = \begin{pmatrix} 1\\1 \end{pmatrix}

Platí

Mv=(1221)(11)=(11+2121+11)=(33)=3v.M|v\rangle= \begin{pmatrix} 1 & 2 \\ 2 & 1\end{pmatrix}\begin{pmatrix} 1\\1 \end{pmatrix} = \begin{pmatrix} 1*1+2*1\\2*1+1*1 \end{pmatrix} = \begin{pmatrix} 3\\3 \end{pmatrix} = 3|v\rangle.

Ale pro jiné vektory, např. v=(12)|v'\rangle = \begin{pmatrix} 1\\2\end{pmatrix}, dostaneme

Mv=(1221)(12)=(11+2221+12)=(54)cv.M|v'\rangle= \begin{pmatrix} 1 & 2 \\ 2 & 1\end{pmatrix}\begin{pmatrix} 1\\2 \end{pmatrix} = \begin{pmatrix} 1*1+2*2\\2*1+1*2 \end{pmatrix} = \begin{pmatrix} 5\\4 \end{pmatrix} \neq c|v'\rangle.

Mohli bychom se pokusit popsat spin částice pomocí matice a stavy částic po měření pomocí vektoru zvaného „stavový vektor". Vůbec není zřejmé, jaké hodnoty do takové matice nebo stavového vektoru dát, ale jediná vlastnost, kterou zatím z měření máme a pomocí níž bychom mohli stavy pojmenovat, je pravděpodobnost naměření 0 nebo 1 (v kontextu spin-1/2 částic „spin nahoru" nebo „spin dolů"). Měli bychom uvažovat, že složky stavových vektorů by měly být svázány s touto pravděpodobností (přesně s pravděpodobností, „amplitudou pravděpodobnosti" — tedy umocníme složku a dostaneme pravděpodobnost, a podobně). V tuto chvíli ale nevíme, zda by složky těchto matic měly být čistě reálné, komplexní, nebo jiné. Pro jistotu se pokusíme vyvinout formální rámec, v němž vektory a matice splňují toto:

  • Maticové operátory jsou co nejvíce svázány s experimenty. Například vlastní hodnoty spinové matice bychom mohli ztotožnit s experimentálně pozorovanými projekcemi spinu.
  • Stavové vektory by měly být svázány s pravděpodobností takto: Pokud je částice ve stavovém vektoru A|A\rangle, pravděpodobnost, že následné měření zjistí, že je částice ve stavu B|B\rangle, je PABAB2P_{AB}\equiv |\langle A| B \rangle|^2.

To nám dává velkou svobodu při sestavování prvních matic. Naivně bychom mohli zkusit například

0(10).|0\rangle \sim |\uparrow\rangle \sim \begin{pmatrix} 1 \\0 \end{pmatrix}.

Zápis 0|0\rangle \sim |\uparrow\rangle znamená, že ve kvantových počítačích i v systémech spin-1/2 existují stavy, které jsou si velmi podobné a jsou na sebe často mapovány. Samozřejmě nejsou totožné, protože se vztahují k různým systémům. Ale algebra popisující tyto dvoustavové systémy se může řídit stejnými pravidly (prozradíme: řídit se jimi!). Všimni si, že tento náhodný výběr má již jednu příjemnou vlastnost. Platí totiž

P00=002=(10)(10)2=12=1.P_{00} = |\langle 0| 0 \rangle|^2 = \vert \begin{pmatrix} 1 & 0\end{pmatrix} \begin{pmatrix} 1 \\ 0\end{pmatrix}\vert ^2 = |1|^2 = 1.

Tedy pokud je částice již ve stavu 0|0\rangle, pravděpodobnost, že i následné měření dá 0|0\rangle, je 1 (bez vlivu šumu). To je skvělé, protože jsme již viděli, že jakmile je stav ve stavu 0 nebo „spin nahoru", při dalším měření tam zůstane. Výše uvedená pravděpodobnost by tedy skutečně měla být 100 %.

Check your understanding

Read the questions below, think about your answers, then click the triangles to reveal the solutions.

Why is

0=(10)|0\rangle = \begin{pmatrix} 1 \\0 \end{pmatrix}

a better choice than, say,

0=(20)?|0\rangle = \begin{pmatrix} 2 \\0 \end{pmatrix}?

Answer:

Our attempt to associate the probability of a measurement with the inner product squared means we need the magnitude of each vector to be 1. That is, vv2=1|\langle v|v\rangle|^2 = 1 for all v|v\rangle, since the probability of a thing in state v|v\rangle being in state v|v\rangle is 100%. This is known as the "normalization condition".

Why is

0=(10)|0\rangle = \begin{pmatrix} 1 \\0 \end{pmatrix}

a better choice than, say,

0=(01)?|0\rangle = \begin{pmatrix} 0 \\1 \end{pmatrix}?

Answer:

It is not. There is no reason why we need to initially choose 0=(10)|0\rangle = \begin{pmatrix} 1 \\0 \end{pmatrix}. Rather, it is a convention. However, once we make that choice, it does impose certain constraints on subsequent choices. See below.

Vzpomeň si, že v experimentech výše jsme zjistili, že Qubit inicializovaný ve stavu 0|0\rangle v tomto stavu zůstal i při dalším měření. Totéž platí pro 1|1\rangle. To znamená, že Qubit ve stavu 0|0\rangle má nulovou pravděpodobnost být naměřen ve stavu 1|1\rangle (bez vlivu šumu). Požadovaná vazba mezi skalárními součiny a pravděpodobnostmi měření nám pak říká, že

P01=P10=0.P_{01} = P_{10}=0.

Bez újmy na obecnosti můžeme psát stavový vektor 1=(ab)|1\rangle = \begin{pmatrix} a \\ b \end{pmatrix}. Potom

P01=012=(10)(ab)2=a2=0.P_{01} = |\langle 0| 1 \rangle|^2 = \vert \begin{pmatrix} 1 & 0\end{pmatrix} \begin{pmatrix} a \\ b\end{pmatrix}\vert ^2 = |a|^2 = 0.

Požadavek P11=1P_{11} = 1, tzv. „podmínka normalizace", nám říká, že b2=1|b|^2=1. To samo o sobě omezuje bb pouze na b=eiϕb=e^{i\phi} pro ϕR\phi \in \mathbb{R}. Ukazuje se, že pro volbu b=1b=1 existují i jiné důvody, které přesahují rámec tohoto úvodu. Prozatím nám postačí, že b=1b=1 je jedno přijatelné řešení.

Naše analýza dospěla poměrně daleko. Zvolená forma stavových vektorů nám umožňuje sestavit matici, která popisuje něco o fyzikálních jevech, které zde zkoumáme. Původní Stern-Gerlachův experiment konkrétně měřil rozštěpení trajektorií podle komponent spinového momentu hybnosti podél osy zz, takže chceme operátor popisující právě to: SzS_z. Dalším klíčovým propojením s experimentem je, že z množství vychýlení, doby průletu a známé intenzity magnetického pole lze určit velikost zz-složky spinu. Ačkoli to vyžaduje mnoho předpokladů o přesnosti experimentálního uspořádání, zde pouze zopakujeme, že naměřené zz-složky spinového momentu hybnosti jsou ±/2\pm \hbar/2.

Hledáme tedy matici s reálnými vlastními hodnotami (splněno pro hermitovské matice), jejichž vlastní hodnoty odpovídají experimentálně pozorovaným spinovým složkám. Bez újmy na obecnosti můžeme psát Sz=(s11s12s21s22)S_z = \begin{pmatrix} s_{11} & s_{12} \\ s_{21} & s_{22}\end{pmatrix} a požadovat:

Sz=(s11s12s21s22)(10)=(s11s21)=!2(10)s11=/2,s21=0S_z |\uparrow\rangle = \begin{pmatrix} s_{11} & s_{12} \\ s_{21} & s_{22}\end{pmatrix}\begin{pmatrix}1 \\0\end{pmatrix} = \begin{pmatrix} s_{11} \\ s_{21} \end{pmatrix} \overset{!}{=} \frac{\hbar}{2} \begin{pmatrix}1 \\0\end{pmatrix} \rightarrow s_{11} = \hbar/2,s_{21}=0 Sz=(s11s12s21s22)(01)=(s12s22)=!2(01)s12=0,s22=/2S_z |\downarrow\rangle = \begin{pmatrix} s_{11} & s_{12} \\ s_{21} & s_{22}\end{pmatrix}\begin{pmatrix}0 \\1\end{pmatrix} = \begin{pmatrix} s_{12} \\ s_{22} \end{pmatrix} \overset{!}{=} -\frac{\hbar}{2} \begin{pmatrix}0 \\1\end{pmatrix} \rightarrow s_{12} = 0, s_{22}=-\hbar/2

Sloučením a vytknutím společného faktoru /2\hbar/2 dostaneme

Sz=2(1001).S_z = \frac{\hbar}{2} \begin{pmatrix} 1 & 0 \\ 0 & -1\end{pmatrix}.

Jde o dobře známý operátor spinu-z, který najdeme ve všech učebnicích kvantové mechaniky. Často se uvádí bez faktoru /2\hbar/2; v tom případě jde o operátor „Pauli-z", obvykle označovaný σz\sigma_z:

σz=(1001).\sigma_z = \begin{pmatrix} 1 & 0 \\ 0 & -1\end{pmatrix}.

To je užitečné, protože tento Pauliho operátor (a příbuzné matice) dokáže popisovat mnoho fyzikálních systémů se dvěma hladinami nebo dvěma možnými výsledky měření, včetně stavů transmonových Qubitů v kvantovém počítači.

Než přejdeme k dalším operátorům a stavům s tímto svázaným, musíme zdůraznit jednu skutečnost, kterou mnoho lidí chápe špatně. Působení operátoru není totéž co měření. V jistém smyslu by ses mohl/a říct: „Samozřejmě ne! Jedno probíhá na papíře jako součást matematického výpočtu a druhé v laboratoři na fyzikálních systémech." Ano, to je pravda, ale je toho víc. Měření zz-složky spinu vždy dá stav „spin nahoru" nebo „spin dolů", bez ohledu na počáteční stav systému. Viděli jsme to na kvantově počítačových analozích 0|0\rangle a 1|1\rangle. Inicializovali jsme stavy do stovek náhodných orientací a měření vždy dala 0|0\rangle nebo 1|1\rangle. Tento jev se nazývá „kolaps stavu" měřením na vlastní stav. To se nestane, když na stav aplikuješ matici. Prozkoumej to pomocí otázek níže.

Ověř si porozumění

Přečti si otázky níže, zamysli se nad odpovědí a pak klikni na trojúhelník, abys odhalil řešení.

Předpokládejme, že začínáš s částicí ve spinovém stavu

ψ=(3/52/5).|\psi\rangle = \begin{pmatrix}\sqrt{3/5} \\ \sqrt{2/5}\end{pmatrix}.

(a) Co získáš, když na tento stavový vektor aplikuješ operátor SzS_z? (b) Co obdržíš, pokud provedeš jediné měření zz složky spinu této částice? (c) Co získáš, pokud připravíš mnoho částic v tomto identickém stavu a provedeš tisíce měření zz složky spinu?

Odpovědi:

(a) Získáš

Szψ=2(1001)(3/52/5)S_z |\psi\rangle = \frac{\hbar}{2} \begin{pmatrix} 1 & 0 \\ 0 & -1\end{pmatrix} \begin{pmatrix}\sqrt{3/5} \\ \sqrt{2/5}\end{pmatrix}=2(3/52/5).= \frac{\hbar}{2} \begin{pmatrix}\sqrt{3/5} \\ -\sqrt{2/5}\end{pmatrix}.

To je vše. Neexistuje žádný experimentální výsledek. Jednoduše aplikuješ matici na vektor a získáš mírně odlišný vektor, který nyní nese nové znaménko „−" a již nemá velikost 1, protože obsahuje předfaktor /2\hbar/2.

(b) Obdržíš buď |\uparrow\rangle, nebo |\downarrow\rangle. To odpovídá pozorování projekce spinu na osu zz ve výši buď /2\hbar/2, nebo /2-\hbar/2. Můžeme také určit pravděpodobnost každého výsledku, protože

Pψ=ψ2=(10)(3/52/5)2=3/52=35P_{\uparrow\psi}=|\langle \uparrow|\psi\rangle|^2 = \vert \begin{pmatrix}1 & 0\end{pmatrix} \begin{pmatrix}\sqrt{3/5} \\ \sqrt{2/5}\end{pmatrix}\vert^2 = |\sqrt{3/5}|^2 = \frac{3}{5}Pψ=ψ2=(01)(3/52/5)2=2/52=25P_{\downarrow\psi}=|\langle \downarrow|\psi\rangle|^2 = \vert \begin{pmatrix}0 & 1\end{pmatrix} \begin{pmatrix}\sqrt{3/5} \\ \sqrt{2/5}\end{pmatrix}\vert^2 = |\sqrt{2/5}|^2 = \frac{2}{5}

Ačkoli je stav se spinem nahoru o 20 % pravděpodobnější, oba výsledky jsou možné a obdržíme vždy právě jeden z těchto dvou stavů.

(c) Přibližně 60 % měření přinese částice se spinem nahoru a přibližně 40 % měření přinese částice se spinem dolů, v souladu s pravděpodobnostmi měření vypočtenými v části (b).

Ověř odpovědi k částem (b) a (c) předchozí otázky pomocí analogie mezi stavy se spinem nahoru atomu a stavy Qubitu:

0.|\uparrow\rangle\sim|0\rangle.

Zakóduj kvantové Circuit tak, aby vytvořily požadovaný počáteční stav, a pak pomocí skutečného hardwaru nebo simulátoru ověř výsledky jediného měření a výsledky z celého souboru stovek či tisíců měření.

Odpověď:

#Use the backend sampler for part (b) because it allows us to use a single shot.
from qiskit_aer import AerSimulator
backend_sim = AerSimulator.from_backend(backend)
from qiskit.primitives import BackendSampler
sampler = BackendSampler(backend = backend_sim)

#Create a quantum circuit to initialize the state.
import math
psi = [math.sqrt(3/5),math.sqrt(2/5)]
qc = QuantumCircuit(1,1)
qc.initialize(psi, [0])

#Add measurement to the circuit
qc.measure(0,0)
qc.draw('mpl')

#Set num_shots =1 for part (b) and num_shots = 1000 or more for part (c).
num_shots = 1000

#Run the job and print the result. You should obtain only 0 or 1 in part (b) for a single shot.
#You should obtain a probability distribution with approximately 60% 0 and 40% 1 in part (c)

dist = sampler.run([qc_ibm], shots = num_shots).result()
counts=dist[0].data.c.get_counts()
print(counts)

#You should obtain {0: 599, 1: 401} or something equivalently close to the 60%-40% distribution predicted.

Pátý experiment: Měření různých pozorovatelných veličin

Dosud jsme prováděli měření pouze podél osy z. Kdybychom v Stern-Gerlachově experimentu chtěli měřit podél osy x, jednoduše bychom orientovali nehomogenní magnetické pole ve směru osy xx a sledovali odchylky podél xx na stínítku. Kvantové počítače IBM jsou však navrženy tak, aby prováděly měření pouze podél jedné osy (zz). Abychom mohli měřit stav podél osy xx, musíme provést „změnu báze". To znamená, že musíme provést operaci, která převede stavy podél xx na Blochově sféře na stavy podél zz, a naopak. Existuje několik způsobů, jak toho dosáhnout, ale upřednostňovaným způsobem je Hadamardova Gate:

H=12(1111)H=\frac{1}{\sqrt{2}}\begin{pmatrix}1 & 1 \\ 1 & -1\end{pmatrix}

Ověř si porozumění

Přečti si níže uvedené otázky, zamysli se nad odpovědí, a pak klikni na trojúhelník, aby se zobrazilo řešení.

Ukaz, že H0=+xH|0\rangle = |+\rangle_x a že H+x=0H|+\rangle_x = |0\rangle

Odpověď:

H0=12(1111)(10)=12(11)=+xH|0\rangle = \frac{1}{\sqrt{2}}\begin{pmatrix}1 & 1 \\ 1 & -1\end{pmatrix}\begin{pmatrix}1 \\ 0\end{pmatrix} = \frac{1}{\sqrt{2}}\begin{pmatrix}1 \\ 1\end{pmatrix} = |+\rangle_xH+x=1(2)(1111)12(11)=12(20)=(10)=0H|+\rangle_x = \frac{1}{\sqrt(2)}\begin{pmatrix}1 & 1 \\ 1 & -1\end{pmatrix}\frac{1}{\sqrt{2}}\begin{pmatrix}1 \\ 1\end{pmatrix} = \frac{1}{2}\begin{pmatrix}2 \\ 0\end{pmatrix} = \begin{pmatrix}1 \\ 0\end{pmatrix} = |0\rangle

Ukaz, že H1=xH|1\rangle = |-\rangle_x a že Hx=1H|-\rangle_x = |1\rangle

Odpověď:

H1=12(1111)(01)=12(11)=xH|1\rangle = \frac{1}{\sqrt{2}}\begin{pmatrix}1 & 1 \\ 1 & -1\end{pmatrix}\begin{pmatrix}0 \\ 1\end{pmatrix} = \frac{1}{\sqrt{2}}\begin{pmatrix}1 \\ -1\end{pmatrix} = |-\rangle_xHx=1(2)(1111)12(11)=12(02)=(01)=1H|-\rangle_x = \frac{1}{\sqrt(2)}\begin{pmatrix}1 & 1 \\ 1 & -1\end{pmatrix}\frac{1}{\sqrt{2}}\begin{pmatrix}1 \\ -1\end{pmatrix} = \frac{1}{2}\begin{pmatrix}0 \\ 2\end{pmatrix} = \begin{pmatrix}0 \\ 1\end{pmatrix} = |1\rangle
# Define registers
qr = QuantumRegister(1, "q")
cr = ClassicalRegister(1, "c")
qc = QuantumCircuit(qr, cr)

# Add a hadamard gate to rotate into the x-basis
qc.h(0)
qc.measure(0, 0)

qc.draw("mpl")

Output of the previous code cell

Tento Circuit otočí náš systém tak, aby měření (podél osy zz) podávala informace o vlastnostech podél xx před touto rotací. Již víme, že kvantový počítač inicializuje stavy do 0|0\rangle, což odpovídá |\uparrow\rangle. Podívejme se, co se stane, když změříme projekci spinu podél osy xx pro stav, který je zpočátku ve stavu |\uparrow\rangle. Tento krok ukazujeme na simulátoru, abychom tě motivoval(a) zkoumat statistiky jiných Circuit s různými inicializacemi.

from qiskit.primitives import StatevectorSampler as Sampler

sampler_sv = Sampler()

job = sampler_sv.run([qc], shots=10000)
print(job.result()[0].data.c.get_counts())
{'1': 4977, '0': 5023}

To nám ukazuje, že pro Qubit zpočátku ve stavu 0|0\rangle (nebo ekvivalentně spin ve stavu |\uparrow\rangle) je pravděpodobnost naměření projekce podél +x+x nebo x-x přibližně 50:50. V jistém smyslu to dává dokonalý smysl. Pokud by něco směřovalo podél osy zz, nemělo by žádnou zvláštní preferenci pro ±x\pm x. Mohli bychom očekávat totéž, pokud začneme se stavem 1|1\rangle (nebo |\downarrow\rangle). Pojďme to ověřit:

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

# Add a NOT gate and hadamard gate. Measure.
qc.x(0)
qc.h(0)
qc.measure(0, 0)

qc.draw("mpl")

Output of the previous code cell

job = sampler_sv.run([qc], shots=10000)
print(job.result()[0].data.c.get_counts())
{'0': 4935, '1': 5065}

Ano! I zde nacházíme pravděpodobnost 50:50 pro naměření projekce podél ±x\pm x. Po analogii s měřeními podél osy zz bychom mohli dále předpokládat, že částice, která zkolabuje do stavu s definitivní projekcí podél +x+x, má nulovou pravděpodobnost, že bude následně naměřena podél x-x. Pojďme to ověřit:

from qiskit import QuantumCircuit

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

# Rotate into x-basis using a Hadamard gate, then make two measurements in succession
qc.h(0)
qc.measure(0, 0)
qc.barrier()
qc.measure(0, 1)

qc.draw("mpl")

Output of the previous code cell

job = sampler_sv.run([qc])
print(job.result()[0].data.c.get_counts())
plot_histogram(job.result()[0].data.c.get_counts())
{'00': 504, '11': 520}

Output of the previous code cell

Jak bylo očekáváno, dostáváme výsledky, kde je projekce podél +x+x a poté znovu podél +x+x, a výsledky, kde je projekce zpočátku podél x-x a znovu podél x-x. Nevidíme případy, kdy by se projekce přepínala z +x+x na x-x nebo naopak. Můžeme shromáždit naše pozorování a použít je k dalšímu rozvoji operátorů v maticové formě a dalších stavových vektorů.

Víme:

  • Stavy s definitivními projekcemi podél +z+z nebo z-z mají 50% šanci, že budou naměřeny s projekcí podél +x+x, a 50% šanci s projekcí podél x-x.
  • Stavy s definitivní projekcí podél +x+x mají nulovou šanci, že budou následně naměřeny s projekcí podél x-x, a naopak.

Tyto výsledky můžeme použít ke konstrukci stavů s definitivní, kladnou projekcí podél xx (které nazýváme +x|+x\rangle) a těch s definitivní, zápornou projekcí podél xx (které nazýváme x|-x\rangle). Z těchto stavů pak můžeme sestavit matici odpovídající SxS_x, přesně tak, jako jsme to udělali pro SzS_z. Toto ponecháváme jako cvičení pro studující. Podobně lze sestavit experimenty provádějící měření podél osy yy, určit vektory pro +y|+y\rangle a y|-y\rangle, a nakonec získat výraz pro SyS_y.

Shromáždíme-li všechny tyto vektory a matice dohromady, dostaneme

+x=12(11)x=12(11)Sx=2(0110)+y=12(1i)y=12(1i)Sy=2(0ii0)+z=(10)z=(01)Sz=2(1001)\begin{aligned} |+x\rangle &= \frac{1}{\sqrt{2}}\begin{pmatrix}1 \\ 1\end{pmatrix} & \: & |-x\rangle &=& \frac{1}{\sqrt{2}}\begin{pmatrix}1 \\ -1\end{pmatrix} & \: &S_x &=& \frac{\hbar}{2} \begin{pmatrix} 0 & 1 \\ 1 & 0\end{pmatrix}\\ |+y\rangle &= \frac{1}{\sqrt{2}}\begin{pmatrix}1 \\ i\end{pmatrix} & \: & |-y\rangle &=& \frac{1}{\sqrt{2}}\begin{pmatrix}1 \\ -i\end{pmatrix} & \: &S_y &=& \frac{\hbar}{2} \begin{pmatrix} 0 & -i \\ i & 0\end{pmatrix}\\ |+z\rangle &= \begin{pmatrix}1 \\ 0\end{pmatrix} & \: &|-z\rangle &=& \begin{pmatrix}0 \\ 1\end{pmatrix} & \: &S_z &=& \frac{\hbar}{2} \begin{pmatrix} 1 & 0 \\ 0 & 1\end{pmatrix}\\ \end{aligned}

Otázky

Instruktoři mohou požádat o verze těchto notebooků s klíči odpovědí a pokyny k zařazení do běžných studijních plánů vyplněním tohoto stručného dotazníku o tom, jak jsou notebooky využívány.

Klíčové pojmy:

  • Pro částici se spinem 1/2 může měření projekce spinu na nějakou osu dát jen jeden ze dvou výsledků, které se často nazývají „nahoru" a „dolů".
  • Qubity lze naměřit pouze v jednom ze dvou stavů, které se obvykle označují jako 0|0\rangle a 1|1\rangle.
  • Stern-Gerlachův experiment na částicích se spinem 1/2 můžeme modelovat pomocí Qubitů v kvantovém počítači.
  • Opakovaná měření téže fyzikální veličiny téže částice/Qubitu dávají stejný výsledek (pokud systém není narušen šumem).
  • Výsledků ze Stern-Gerlachova experimentu nebo z analogických experimentů s kvantovými počítači můžeme využít k odvození soustavy stavových vektorů a maticových operátorů popisujících kvantově mechanický spin.

Otázky pravda/nepravda:

  1. P/N: Vycházeje z experimentálních pozorování, jediná platná volba vektoru pro reprezentaci |\uparrow\rangle je (10)\begin{pmatrix}1 \\ 0\end{pmatrix}
  2. P/N: Pokud =(10)|\uparrow\rangle = \begin{pmatrix}1 \\ 0\end{pmatrix}, jediná volba pro |\downarrow\rangle je (01)\begin{pmatrix}0 \\ 1\end{pmatrix} (až na globální fázi).
  3. P/N: Částice naměřená ve stavu 0|0\rangle bude i při následných měřeních podél zz nacházena ve stavu 0|0\rangle.
  4. P/N: Částice naměřená ve stavu 0|0\rangle bude i při následných měřeních podél xx nacházena ve stavu 0|0\rangle.
  5. P/N: Částice naměřená ve stavu 0|0\rangle bude při následných měřeních podél xx vždy nacházena ve stavu +x|+\rangle_x.

Otázky s výběrem odpovědi:

  1. Jaká je pravděpodobnost, že částice zpočátku ve stavu |\uparrow\rangle bude naměřena ve stavu +x|+x\rangle?

    • a. 0 %
    • b. 25 %
    • c. 50 %
    • d. 71 %
    • e. 100 %
  2. Jaká je pravděpodobnost, že částice zpočátku ve stavu |\uparrow\rangle bude naměřena ve stavu |\downarrow\rangle?

    • a. 0 %
    • b. 25 %
    • c. 50 %
    • d. 71 %
    • e. 100 %
  3. Se kterým stavem kvantového počítání se nejčastěji spojuje stav |\uparrow\rangle částice se spinem 1/2?

    • a. +|+\rangle
    • b. |-\rangle
    • c. 0|0\rangle
    • d. 1|1\rangle
    • e. Žádný z výše uvedených

Diskusní otázky:

  1. Tři přátelé diskutují o kvantových měřeních a operátorech. Přítel A říká: „Provést měření podél zz a působit operátorem σz\sigma_z je totéž." Přítel B říká: „To jsou sice různé postupy, ale mají stejný výsledek." Přítel C říká: „To jsou úplně odlišné věci; dokonce mají různé účinky na většinu stavů." S kým souhlasíš a proč?

Úlohy s volnou odpovědí:

  1. Na základě experimentálních pozorování a navrhované syntaxe:

P+x=(10)(ab)2=a2=12P_{\uparrow+x}=\vert \begin{pmatrix}1 & 0\end{pmatrix}\begin{pmatrix}a \\ b\end{pmatrix}\vert^2 = |a|^2 =\frac{1}{2} P+x=(01)(ab)2=b2=12P_{\downarrow+x}=\vert \begin{pmatrix}0 & 1\end{pmatrix}\begin{pmatrix}a \\ b\end{pmatrix}\vert^2 = |b|^2 =\frac{1}{2}

ukaz, že až na globální fázi

+x=12(1eiα)|+\rangle_x = \frac{1}{\sqrt{2}}\begin{pmatrix}1 \\ e^{i\alpha}\end{pmatrix}

Zvolte α=0\alpha = 0, abys dostal(a) standardní výsledek.

  1. Na základě experimentálních pozorování a navrhované syntaxe:

Px=(10)(ab)2=a2=12P_{\uparrow-x}=\vert \begin{pmatrix}1 & 0\end{pmatrix}\begin{pmatrix}a \\ b\end{pmatrix}\vert^2 = |a|^2 =\frac{1}{2} Px=(01)(ab)2=b2=12P_{\downarrow-x}=\vert \begin{pmatrix}0 & 1\end{pmatrix}\begin{pmatrix}a \\ b\end{pmatrix}\vert^2 = |b|^2 =\frac{1}{2}

A s využitím výsledku z bonusové úlohy 3:

P+xx=12(11)(cd)2=12c+d2=0P_{+x-x}=\vert \frac{1}{\sqrt{2}}\begin{pmatrix}1 & 1\end{pmatrix}\begin{pmatrix}c \\ d\end{pmatrix}\vert^2 = \frac{1}{2}|c+d|^2 =0

ukaz, že až na globální fázi

+x=12(11)|+\rangle_x = \frac{1}{\sqrt{2}}\begin{pmatrix}1 \\ -1\end{pmatrix}

Poděkování

[1] By Tatoute - Own work, CC BY-SA 4.0, https://commons.wikimedia.org/w/index.php?curid=34095239