Sari la conținutul principal

Experimentul Stern-Gerlach folosind calculatoare cuantice

Pentru acest modul Qiskit în săli de clasă, studenții trebuie să aibă un mediu Python funcțional cu următoarele pachete instalate:

  • qiskit v2.1.0 sau mai nou
  • qiskit-ibm-runtime v0.40.1 sau mai nou
  • qiskit-aer v0.17.0 sau mai nou
  • qiskit.visualization
  • numpy
  • pylatexenc

Pentru a configura și instala pachetele de mai sus, consultă ghidul Instalare Qiskit. Pentru a rula joburi pe calculatoare cuantice reale, studenții vor trebui să creeze un cont la IBM Quantum® urmând pașii din ghidul Configurarea contului IBM Cloud.

Acest modul a fost testat și a folosit 2 secunde de timp QPU. Aceasta este doar o estimare. Utilizarea ta efectivă poate varia.

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

Urmărește prezentarea modulului de Dr. Katie McCormick mai jos sau dă clic aici pentru a o urmări pe YouTube.


Fundal

La începutul anilor 1900, dovezile comportamentului cuantizat la scări atomice se acumulau. Multe interpretări de succes ale datelor, precum explicația lui Max Planck privind catastrofa ultravioletă, și experimente precum cel realizat de Otto Stern și Walther Gerlach au fost esențiale pentru a convinge lumea că un sistem de mecanică cuantică este necesar și că anumite fenomene fizice sunt cuantizate. În cazul experimentului Stern-Gerlach (conceput de Stern în 1921 și realizat de Stern și Gerlach în 1922), scopul era să verifice cuantizarea momentului cinetic în atomi.

În acea perioadă, modelul prevalent pentru atom era modelul Bohr-Sommerfeld, o extensie a modelului Bohr care, la fel ca acesta, prezice că electronii există pe anumite orbite cuantizate, similare planetelor care orbitează în jurul soarelui.

Diagramă a modelului Bohr-Sommerfeld. Un punct central reprezintă nucleul unui atom. Cercuri sau elipse în jurul acestui punct reprezintă orbitale atomice, asemănătoare foarte mult cu orbitele planetare în jurul soarelui. Orbitele cu energie mai mare sunt mai departe de nucleu.

Deși, în cele din urmă, acest tratament s-a dovedit insuficient pentru a explica comportamentul mecano-cuantic al atomului, el a prezis, în linii mari, multe fenomene observate, cum ar fi liniile spectrale discrete ale atomilor. Orbitele cuantizate ale electronilor cu energii specifice corespund valorilor cuantizate ale momentului cinetic. Tocmai acest moment cinetic orbital l-au căutat Stern și Gerlach să îl observe în experimentul lor, deși experimentul se aplică oricărui tip de moment cinetic cuantizat, inclusiv spinului. Adesea poți auzi că experimentul Stern-Gerlach este aplicat spinurilor. Focusul experimentului original era pe momentul cinetic orbital pur și simplu pentru că George Uhlenbeck și Samuel Goudsmit nu aveau să teoretizeze existența spinului decât în 1925.

Indiferent de tipul de moment cinetic, o sarcină electrică cu moment cinetic are un moment magnetic. În tratamentul clasic al mișcării orbitale, ne-am aștepta ca o particulă cu sarcina qq, masa mm și momentul cinetic L\vec{L} să aibă un moment magnetic μ\mu dat de

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

Se dovedește că aproape aceeași formulă este valabilă și pentru momentul cinetic mecano-cuantic, cu precizarea adăugării unui raport numeric legat de tipul de moment cinetic, numit factorul g gg. Când se combină diferite tipuri de moment cinetic sau se generalizează la un tip arbitrar, se folosește adesea J\vec{J} în loc de L\vec{L}, deci scriem:

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

Pentru obiectele clasice g=1g=1. Pentru electroni, g2g\approx 2, și există multe valori pentru diverși nuclei și particule subatomice. Ideea principală este că momentul cinetic cuantizat înseamnă un moment magnetic cuantizat!

Acest moment magnetic va experimenta un cuplu într-un câmp magnetic:

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

Și va experimenta o forță într-un câmp magnetic cu un gradient nenul:

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

Adesea vom considera expresia de mai sus componentă cu componentă, deci poate fi util să ne gândim la componenta sa zz:

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

Combinând expresiile, putem obține

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

Stern și Gerlach nu știau despre factorul gg, dar chiar și cu acesta în expresie, avem o forță egală cu mai multe constante cunoscute sau măsurabile înmulțite cu un moment cinetic. Deci, folosind un câmp magnetic cu un gradient cunoscut și măsurând deflexia unei particule pe măsură ce trece prin câmp, ar trebui să obținem informații despre momentul cinetic. Aceasta este esența experimentului Stern-Gerlach.

Atomi de argint călătorind printr-un câmp magnetic neomogen și fiind deflectați în sus sau în jos în funcție de spinul lor. În mod clasic, ne-am aștepta la o distribuție continuă pe ecran, dar în experiment vedem două puncte distincte.

Fig. Experimentul Stern–Gerlach[1]: Atomi de argint călătorind printr-un câmp magnetic neomogen și fiind deflectați în sus sau în jos în funcție de spinul lor. În mod clasic, ne-am aștepta la o distribuție continuă pe ecran, dar în experiment vedem două puncte distincte.

Atomi neutri de argint au fost încălziți într-un cuptor. Pe măsură ce un fascicul de atomi de argint ieșea din cuptor, colimatoarele de fascicul erau folosite pentru a selecta numai atomii care călătoreau aproape de centrul câmpului magnetic neomogen. Desigur, unii atomi se abat puțin spre stânga sau dreapta și experimentează un gradient mai slab al câmpului sau niciun gradient. Deci, nu ne preocupă prea mult comportamentul atomilor care se află departe spre stânga sau dreapta. Suntem interesați de ce se întâmplă cu atomii care călătoresc pe centrul canalului, unde gradientul câmpului magnetic va produce o forță care deflectează atomii doar în direcția zz.

Ce ar trebui să ne așteptăm, din punct de vedere clasic?

Cum s-ar comporta acești atomi dacă ar fi exact ca niște magneți clasici, voluminoși? Poți face experimentul. Imaginează-ți că lansezi mici magneți de neodim pe lângă un magnet mare și puternic. Orientarea magneților mici este aleatorie. Dar pe măsură ce trec pe lângă magnetul mare, aceștia se reorientează rapid pentru a se alinia cu câmpul și sunt atrași de magnetul mare. Marea majoritate a magneților mici sunt deviați spre magnetul mare. Observatorul foarte perspicace ar putea întreba: „Dar conservarea energiei?"

Într-adevăr, un moment magnetic într-un câmp magnetic extern are o energie potențială asociată cu el:

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

Deci, dacă un moment magnetic s-ar roti în câmpul magnetic extern, ar exista o variație de energie dată de:

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

În cazul special al unui magnet mic perfect anti-aliniat cu câmpul extern care se răstoarnă și se aliniază cu acesta, aceasta ar corespunde unei scăderi a energiei potențiale:

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

Deci unde se duce acea energie? Un magnet clasic, precum un mic magnet de frigider din neodim, are mulți particule și poate disipa aproape orice cantitate de energie sub formă de căldură. Unghiurile inițiale și finale dintre momentul magnetic și câmpul magnetic extern pot fi orice, iar cel puțin orientarea inițială ar fi aleatorie. Deci o cantitate diferită de energie ar fi disipată ca căldură pentru fiecare magnet mic. Dar clasic, aceasta nu este o problemă, deoarece un ansamblu de particule clasice poate disipa orice cantitate de energie ca căldură.

Ce ar trebui să ne așteptăm aplicând gândirea clasică la scară atomică?

Cel puțin, acest lucru nu este la fel pentru magneții la scară atomică, deoarece există mai puține particule implicate, mai puține grade de libertate prin care energia poate fi disipată. Propunerile timpurii ale mecanicii cuantice sugerau în plus că energia care poate fi absorbită de o particulă individuală, cum ar fi electronul, ar fi cuantizată, adică un electron ar putea absorbi doar câteva cantități specifice de energie. Deoarece orientările inițiale aleatoare ar necesita disiparea unor cantități aleatoare de energie, aceasta nu ar trebui să fie posibilă pentru un sistem cu nivele de energie cuantizate. Energia în exces nu poate fi disipată ca căldură. Deci ce s-ar întâmpla în schimb?

Verifică-ți înțelegerea

Citește întrebările de mai jos, gândește-te la răspunsuri, apoi apasă pe triunghiuri pentru a dezvălui soluțiile.

Explică ce crezi că s-ar întâmpla într-o situație ca cea descrisă mai sus. Adică, ai un magnet extrem de mic care nu poate disipa energie ca căldură. Deci, orice energie potențială magnetică inițială trebuie să rămână în sistem. Cu toate acestea, câmpul magnetic extern aplică un moment de torsiune, care încearcă să rotească magnetul mic pentru a se alinia cu câmpul extern. Ce se întâmplă?

Răspuns:

Micul moment magnetic s-ar roti spre alinierea cu câmpul extern. Dar când se aliniază momentan, ar avea energie cinetică de rotație care l-ar menține în rotație dincolo de câmp și din nou în afara alinierii. Acest comportament poate fi observat chiar și în magneți clasici mari. Dar în acele sisteme clasice, oscilația micului moment magnetic se oprește în cele din urmă, pe măsură ce energia este disipată ca căldură. Dar într-un sistem fără un astfel de mecanism disipativ, oscilația ar trebui să continue pe termen nelimitat.

Ținând cont de comportamentul așteptat în răspunsul de mai sus, ce distribuție de particule magnetice te-ai aștepta să vezi pe ecran?

Răspuns:

O distribuție continuă de la o deviație maximă spre latura mai puternică a câmpului magnetic (acele particule care s-au nimerit să înceapă aliniate cu câmpul extern) până la o deviație maximă spre latura mai slabă a câmpului (acele particule care au început anti-aliniate cu câmpul extern), și orice deviație intermediară, corespunzând fiecărei orientări inițiale dintre acele extreme.

Diagram of a beam of particles passing through a magnet. They are deflected to varying degrees along the direction of the magnetic field. So when they strike a distant screen they form a line.

Ce ar prezice mecanica cuantică?

Poate cea mai ciudată dintre toate posibilitățile ar fi următoarea: Ce-ar fi dacă momentul cinetic al electronului ar fi cuantizat, dar și proiecția sa pe o anumită axă ar fi cuantizată? Cuantizarea momentului cinetic ca magnitudine este interesantă, dar cineva ar putea încerca să o justifice folosind intuiția clasică, în modul în care orbitele planetare s-au stabilizat în traiectorii fixe care nu se intersectează, având doar anumite momente cinetice permise. Dar ce-ar fi dacă acel vector al momentului cinetic ar putea indica doar exact de-a lungul zz sau exact opus zz, fără a avea nicio altă componentă de-a lungul zz? Ce-ar fi dacă atunci când este măsurat de-a lungul unei direcții diferite, vectorul ar putea indica doar în întregime de-a lungul xx sau în întregime opus xx, și nimic între ele? Asta ar fi ciudat într-un mod care zădărnicește toată intuiția clasică.

Verifică-ți înțelegerea

Citește întrebarea de mai jos, gândește-te la răspuns, apoi apasă pe triunghi pentru a dezvălui soluția.

Ce fel de distribuție de particule pe un ecran te-ai aștepta să găsești în acest ultim caz, în care proiecția momentului cinetic de-a lungul direcției câmpului este cuantizată? Poți lua în considerare doar particulele care trec perfect prin centrul dispozitivului sau le poți include și pe cele care se abat ușor de la centru, acolo unde gradientul este mai slab. Fii explicit.

Răspuns:

Particulele din centrul dispozitivului ar experimenta un singur câmp neomogen și toate ar fi măsurate ca având una dintre cele două orientări ale momentelor lor magnetice. Deci, ar fi deviate fie maxim în direcția gradientului, fie maxim împotriva gradientului, și nimic între ele. Desigur, în lateral, acolo unde gradientul este mai slab, deviația ar fi mai mică. La poziții laterale foarte mari, acestea ar putea fi complet în afara gradientului, și ar putea exista o singură regiune de particule nedeviate.

Diagram of a beam of particles being deflected either up or down, striking one of two dots on a screen, with no particles in between these two maxima

Cum ne vor ajuta qubiții să testăm acest lucru?

Majoritatea calculatoarelor cuantice folosesc „qubiți" - analogii cuantici ai biților clasici. Mai specific, aceștia sunt proiectați să fie sisteme cu două nivele, analogi stărilor „pornit"/„oprit" ale biților clasici. Există paradigme de calcul cuantic care utilizează sisteme cu trei nivele (numite „qutrits") sau sisteme cu mai multe nivele (numite „qudits"). Dar cea mai mare parte a activității este concentrată pe qubiți. În special, calculatoarele cuantice IBM® folosesc ceea ce se numesc qubiți transmon cu frecvență fixă. Aceștia sunt destul de diferiți de momentul cinetic orbital sau de spin al atomilor. Dar la fel ca spinul unui electron, qubiții IBM® sunt sisteme mecanico-cuantice care pot interacționa cu lumina și pe care se pot efectua măsurători. De fapt, se găsesc adesea analogii între stările de spin mecanico-cuantic și stările computaționale ale unui qubit. De exemplu, se vede adesea starea „spin-up" asociată cu starea computațională 0, și „spin-down" asociată cu starea computațională 1:

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

Putem folosi aceste similarități pentru a observa comportamentul mecanico-cuantic în calculatoarele cuantice IBM, care imită comportamentul mecanico-cuantic al momentului cinetic orbital sau de spin în atomi. Vom face observații similare folosind combinații liniare ale acestor stări, care ne permit să extindem discuția la momentul cinetic de-a lungul oricărei direcții.

Primul experiment: O singură măsurătoare

În acest prim experiment și pe tot parcursul modulului, vom folosi un cadru pentru calculul cuantic cunoscut sub numele de „Qiskit patterns", care împarte fluxurile de lucru în următorii pași:

  • Pasul 1: Maparea intrărilor clasice la o problemă cuantică
  • Pasul 2: Optimizarea problemei pentru execuție cuantică
  • Pasul 3: Execuția folosind Qiskit Runtime Primitives
  • Pasul 4: Post-procesare și analiză clasică

În general, vom urma acești pași, deși nu îi vom eticheta întotdeauna explicit.

Pasul 1: Maparea intrărilor clasice la o problemă cuantică

Aici, intrările clasice sunt orientările unui spin înainte de măsurătoare într-un dispozitiv Stern-Gerlach. Nu te îngrijora prea mult de natura exactă a stării cuantice înainte de măsurătoare. Aceasta este subiectul unui alt modul Qiskit Classrooms, dedicat teoremei lui Bell.

Rețineți că calculatoarele cuantice IBM măsoară stările de-a lungul axei zz. Prin urmare, acest prim experiment va fi foarte asemănător cu experimentul Stern-Gerlach cu gradientul câmpului magnetic de-a lungul zz. Vom vedea mai târziu cum să modificăm sistemul pentru a măsura de-a lungul altor direcții.

Să începem prin a construi analogul unei stări de spin, adică un amestec oarecare de |\uparrow\rangle și |\downarrow\rangle sau, echivalent, de 0|0\rangle și 1|1\rangle. Am propus câteva valori inițiale. Dar ești liber să experimentezi cu alte valori sau chiar cu valori aleatorii.

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

Acum vom folosi unghiurile de mai sus ca parametri într-un circuit cuantic. Avem în vedere un singur particle la un moment dat, astfel că vom folosi un singur qubit în circuitul nostru și vom avea nevoie de un singur registru clasic.

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

Rezultatul celulei de cod anterioare

Pasul 2: Optimizează problema pentru execuție cuantică

Pentru a rula experimentul nostru pe un calculator cuantic real, trebuie să încărcăm Qiskit Runtime Service și să selectăm un calculator cuantic (sau un „backend"). Mai jos, selectăm pur și simplu cel mai puțin ocupat calculator cuantic disponibil.

Mai jos există cod pentru salvarea credențialelor la prima utilizare. Asigură-te că ștergi aceste informații din notebook după ce le-ai salvat în mediul tău, pentru ca datele de autentificare să nu fie partajate accidental atunci când distribui notebook-ul. Consultă Configurează-ți contul IBM Cloud și Inițializează serviciul într-un mediu neîncredibil pentru mai multe îndrumări.

# 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

Acum trebuie să transpilăm circuitul, adică să mapăm circuitul nostru pe porțile de bază disponibile pe calculatorul cuantic ales și să optimizăm circuitul pentru rularea pe acel calculator cuantic.

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

Pasul 3: Execută folosind Qiskit Runtime Primitives

Acum vrem să rulăm acest experiment pe un calculator cuantic real. Toată sintaxa necesară pentru aceasta se află în blocul de cod de mai jos. Dacă ai epuizat timpul alocat pe calculatoarele cuantice reale sau dacă nu ai conexiune la internet, poți decomenta următorul bloc de cod, care va rula codul pe un simulator local.

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

Folosește codul de mai jos dacă nu poți rula experimentul pe un calculator cuantic real.

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

Pasul 4: Post-procesare și analiză clasică

Pentru acest experiment foarte simplu, analiza clasică constă doar în vizualizarea rezultatului experimental.

from qiskit.visualization import plot_histogram

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

Rezultatul celulei de cod anterioare

Am efectuat o singură măsurătoare și am obținut „0". Acest lucru nu ne surprinde. Știm că folosim un calculator cuantic format din qubiți și suntem foarte obișnuiți cu biți clasici care returnează 0 sau 1. Dar reține: acesta este analogul de calculul cuantic al experimentelor realizate cu particule care au momente magnetice. Dacă ne-am fi așteptat la o distribuție uniformă între 0 și +1, ar fi putut să ne surprindă că am obținut un extrem la prima măsurătoare. Tocmai această cuantizare surprinzătoare a rezultatelor în experimentul Stern-Gerlach ne-a condus la o înțelegere mai bună a naturii, care la rândul ei ne-a ajutat să construim în cele din urmă calculatoare cuantice.

Să vedem ce se întâmplă când realizăm un ansamblu de măsurători.

Al doilea experiment: Măsurarea multor particule

Pentru a aduna statistici despre multe astfel de măsurători, nu trebuie să repetăm pașii 1 și 2. Putem pur și simplu să creștem numărul de iterații din experimentul nostru. Simte-te liber să modifici numărul de iterații în instanța pasului 3 de mai jos.

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

Ca înainte, dacă nu poți rula pe un calculator cuantic real, decomentează blocul de mai sus din primul experiment și schimbă pur și simplu num_shots = 1 în num_shots = 100 sau mai mult.

plot_histogram(counts)

Rezultatul celulei de cod anterioare

Vedem că uneori măsurăm 0 și uneori măsurăm 1. Observă că nu măsurăm niciodată altceva! Poți modifica numărul de iterații și vei observa că probabilitatea de a măsura 0 sau 1 pare a fi destul de consistentă între diferite rulări cu numere diferite de iterații. Deci, ceva legat de pregătirea stării pare să determine probabilitatea rezultatelor măsurătorii, chiar dacă orice măsurătoare individuală poate produce fie 0, fie 1.

Al treilea experiment: Spinuri aleatorii într-un cuptor

În experimentul Stern-Gerlach, cercetătorii nu aveau posibilitatea să specifice un unghi la care un vector de moment unghiular ar ieși din cuptor. Orientările erau aleatorii (sau ceva și mai misterios! Vezi modulul Qiskit Classroom despre teorema lui Bell). Un analog rezonabil al acelui experiment ar fi să inițializăm aleatoriu stările qubitului nostru și să efectuăm măsurători de mai multe ori.

Pasul 1: Mapează intrările clasice la o problemă cuantică

Circuitul pe care vrem să îl construim este același ca înainte. Singura diferență este că, de această dată, vom construi circuitul folosind porți cu parametri liberi θ\theta și ϕ\phi. Valorile numerice ale acestor parametri vor fi apoi atribuite pentru fiecare rulare nouă.

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

Rezultatul celulei de cod anterioare

Rularea unui Circuit cuantic pentru un singur shot și repetarea acestui proces pentru multe configurații aleatoare este un flux de lucru neobișnuit pentru un calculator cuantic. Acest lucru este cu siguranță posibil, dar pentru simplitate, vom folosi aici un simulator local.

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

Rezultatul celulei de cod anterioare

Astfel, observăm că starea inițială aleatoare a qubiților (corespunzând orientărilor aleatoare ale momentului cinetic unghiular într-un experiment Stern-Gerlach) produce numere similare de stări 0 și 1 (similar cu numere similare de stări spin sus și spin jos). Acesta este exact ceea ce a demonstrat experimentul original Stern-Gerlach.

Al patrulea experiment: Măsurători repetate

Când un qubit pornește dintr-o stare aleatorie, observăm că există o șansă de aproximativ 50-50 de a măsura un extrem față de celălalt. Dar ce se întâmplă cu starea qubitului (sau cu momentul unghiular al particulei) după măsurătoare? Pentru a răspunde la aceasta, va trebui să definim un circuit care să ne permită să facem măsurători multiple ale acelorași qubiți. Să definim un circuit pe care îl putem folosi pentru a investiga acest lucru. Vom dori să permitem posibilitatea de a măsura ambele stări 0|0\rangle și 1|1\rangle, deci avem nevoie de ceva care să rotească starea inițială a qubitului față de starea implicită 0|0\rangle. În acest caz, vom folosi un gate Hadamard HH, deoarece H0=12(0+1)H|0\rangle = \frac{1}{\sqrt{2}}(|0\rangle+|1\rangle). Rețineți că, implicit, ambele măsurători vor fi de-a lungul axei 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)

Rezultatul celulei de cod anterioare

În figura de mai sus, intervalele sunt etichetate „00", „01" și așa mai departe. Aici, aceste numere se referă la „al 2-lea rezultat, primul rezultat". Astfel, „00" înseamnă că ambele măsurători au produs starea 0|0\rangle, iar „01" înseamnă că prima măsurătoare a produs 1|1\rangle, iar a doua a produs 0|0\rangle. Marea majoritate a qubiților au fost măsurați fie în starea 0|0\rangle de două ori, fie în starea 1|1\rangle de două ori. A fost foarte rar ca qubiții să fie măsurați într-o stare și apoi măsurați în altă stare, iar puținele cazuri în care s-a întâmplat acest lucru (~1%) se datorează zgomotului. În acest caz, zgomotul a fost simulat pentru a corespunde comportamentului sistemului cuantic real. Această corelație observată între măsurători succesive este observată și în măsurătorile de tip Stern-Gerlach ale particulelor cu moment unghiular de spin. Dacă o particulă este măsurată ca „spin-up", o măsurătoare ulterioară, imediat după aceea, va produce din nou „spin-up" (cu excepția unor mici variații datorate zgomotului).

Acest lucru poate părea trivial. La urma urmei, dacă un qubit este măsurat ca fiind într-o stare, și îl măsor din nou, rapid, de ce nu ar rămâne în acea stare? Dar dacă ne concentrăm cu adevărat pe această subtilitate, ne poate ajuta să selectăm niște instrumente matematice pentru a descrie acest fenomen.

Analiza experimentelor de până acum

Să adunăm câteva observații din experimentele noastre de până acum:

  • Măsurătoarea unui sistem mecanic cuantic va produce doar una dintr-un set de „valori permise". Pentru sistemele cu două niveluri, cum ar fi qubiții sau particulele cu spin-1/2, o măsurătoare va produce doar unul dintre cele două rezultate binare.
  • Când inițializăm aleatoriu starea sistemului nostru binar (cum ar fi particulele cu spin-1/2 care ies dintr-un cuptor), oricare dintre cele două rezultate de măsurătoare este posibil.
  • Odată ce o măsurătoare este efectuată și starea sistemului este cunoscută, repetarea măsurătorii aceleiași observabile fizice nu schimbă starea! Adică, dacă obținem starea 0 o dată, când măsurăm din nou aceasta este tot în starea 0 (cu excepția unui zgomot minor în sistem de ~0.1% până la 1%).

Să observăm explicit că nu am abordat încă natura probabilistică a mecanicii cuantice, nici nu am spus nimic despre „colapsarea" stării la o stare proprie. Folosind doar observațiile de mai sus, ar putea fi tentant să căutăm o operație matematică OO care lasă un set special de stări cuantice ψ|\psi\rangle neschimbate, poate până la o constantă: Oψ=cψO|\psi\rangle = c|\psi \rangle, deoarece măsurarea de-a lungul axei zz de două ori produce același rezultat. În cele din urmă, această căutare va eșua în a descrie toate comportamentele pe care le vom vedea. Dar poate descrie unele lucruri, deci o vom urmări puțin mai mult.

Există o astfel de operație. Operația matriceală pe unii vectori schimbă vectorii, iar operația matriceală pe alți vectori (vectori proprii) lasă vectorul neschimbat până la o constantă. Luați, de exemplu, matricea MM și vectorul v|v\rangle unde

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

și

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

Observați că

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.

Dar pentru alți vectori, să zicem v=(12)|v'\rangle = \begin{pmatrix} 1\\2\end{pmatrix}, avem

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.

Am putea încerca să descriem spinul unei particule folosind o matrice, și am putea încerca să descriem stările particulelor după măsurătoare folosind un vector, numit „vector de stare". Nu este deloc evident ce valori ar trebui să intre în o astfel de matrice sau vector de stare, dar singura proprietate pe care o avem din măsurătorile de până acum pe care am putea-o folosi pentru a eticheta stările ar fi probabilitatea de a măsura 0 sau 1 („spin-up" sau „spin-down" în contextul particulelor cu spin-1/2). Ar trebui să luăm în considerare că intrările în vectorii de stare ar trebui să fie legate de această probabilitate (exact probabilitatea, „amplitudine de probabilitate" — adică ridicăm la pătrat intrarea pentru a obține probabilitatea, și așa mai departe). Dar în acest moment, nu suntem siguri dacă intrările în aceste matrice ar trebui să fie strict reale, complexe sau altceva. Ca să fim în siguranță, să încercăm să dezvoltăm un cadru în care vectorii și matricele satisfac următoarele:

  • Operatorii matriceali sunt conectați la experiment cât mai mult posibil. De exemplu, am putea asocia valorile proprii ale unei matrice de spin cu proiecțiile de spin observate experimental.
  • Vectorii de stare ar trebui să fie conectați la probabilitate în felul următor: Dacă o particulă se află în vectorul de stare A|A\rangle, probabilitatea că o măsurătoare ulterioară va găsi particula în starea B|B\rangle este PABAB2P_{AB}\equiv |\langle A| B \rangle|^2.

Aceasta ne oferă o libertate enormă în dezvoltarea primelor noastre matrice. De exemplu, am putea încerca naiv

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

Aici 0|0\rangle \sim |\uparrow\rangle înseamnă că există stări în calculatoarele cuantice și în sistemele cu spin-1/2 care sunt foarte similare și sunt adesea mapate una la cealaltă. Ele nu sunt evident exact aceleași, deoarece se referă la sisteme diferite. Dar algebra care descrie aceste sisteme cu două stări ar putea respecta aceleași reguli (spoiler: chiar o fac!). Rețineți că această alegere aleatorie are deja un atribut plăcut. Observați că

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.

Adică, dacă o particulă se află deja în starea 0|0\rangle, probabilitatea că o măsurătoare ulterioară va produce tot 0|0\rangle este 1 (fără a lua în considerare efectele zgomotului). Acest lucru este excelent, deoarece am văzut deja că odată ce o stare se află în starea 0 sau „spin-up", rămâne acolo la măsurătorile ulterioare. Probabilitatea de mai sus ar trebui într-adevăr să fie 100%.

Verifică-ți înțelegerea

Citește întrebările de mai jos, gândește-te la răspunsuri, apoi apasă pe triunghiuri pentru a dezvălui soluțiile.

De ce este

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

o alegere mai bună decât, să zicem,

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

Răspuns:

Încercarea noastră de a asocia probabilitatea unei măsurători cu pătratul produsului intern înseamnă că avem nevoie ca magnitudinea fiecărui vector să fie 1. Adică, vv2=1|\langle v|v\rangle|^2 = 1 pentru orice v|v\rangle, deoarece probabilitatea ca un sistem aflat în starea v|v\rangle să fie măsurat în starea v|v\rangle este 100%. Aceasta este cunoscută drept „condiția de normalizare".

De ce este

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

o alegere mai bună decât, să zicem,

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

Răspuns:

Nu este. Nu există niciun motiv pentru care trebuie să alegem inițial 0=(10)|0\rangle = \begin{pmatrix} 1 \\0 \end{pmatrix}. Mai degrabă, este o convenție. Totuși, odată ce facem această alegere, ea impune anumite constrângeri asupra alegerilor ulterioare. Vezi mai jos.

Reamintește-ți că în experimentele de mai sus am descoperit că un qubit aflat inițial în starea 0|0\rangle a rămas în acea stare la măsurătorile ulterioare. Același lucru este valabil și pentru 1|1\rangle. Aceasta înseamnă că un qubit aflat în 0|0\rangle are probabilitate zero de a fi măsurat în starea 1|1\rangle (fără efectele zgomotului). Conexiunea necesară între produsele interne și probabilitățile măsurătorilor ne spune atunci că

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

Fără a pierde generalitatea, putem scrie vectorul de stare 1=(ab)|1\rangle = \begin{pmatrix} a \\ b \end{pmatrix}. Atunci putem scrie

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.

Cerința că P11=1P_{11} = 1, așa-numita „condiție de normalizare", ne spune că b2=1|b|^2=1. Aceasta prin ea însăși ne limitează doar la b=eiϕb=e^{i\phi} pentru ϕR\phi \in \mathbb{R}. Se dovedește că există alte motive pentru alegerea b=1b=1 care depășesc această introducere în subiect. Deocamdată, este suficient să spunem că b=1b=1 este o soluție acceptabilă.

Am progresat destul de mult în analiza noastră. Alegând o formă pentru vectorii noștri de stare ne permite să construim o matrice care descrie ceva despre fenomenele fizice în joc aici. În particular, deoarece experimentul original Stern-Gerlach a măsurat o separare a traiectoriilor bazată pe componentele momentului cinetic de spin de-a lungul axei zz, am dori un operator care să descrie exact asta: SzS_z. O altă conexiune cheie cu experimentul este că din cantitatea de deflecție, timpul de parcurs și intensitatea câmpului magnetic cunoscut, putem determina magnitudinea componentei zz a spinului. Deși acest lucru necesită multe presupuneri despre precizia configurației experimentale, aici vom reitera pur și simplu că componentele zz măsurate ale momentului cinetic de spin sunt ±/2\pm \hbar/2.

Atunci căutăm o matrice cu valori proprii reale (satisfăcute de matricele hermitice) ale cărei valori proprii să corespundă acestor componente de spin observate experimental. Fără a pierde generalitatea, putem scrie Sz=(s11s12s21s22)S_z = \begin{pmatrix} s_{11} & s_{12} \\ s_{21} & s_{22}\end{pmatrix}, și putem impune:

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

Combinând și scoțând factorul global /2\hbar/2, avem

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

Acesta este binecunoscutul operator spin-z regăsit în toate manualele de mecanică cuantică. De multe ori se întâlnește acesta fără /2\hbar/2, caz în care este operatorul „Pauli-z", notat de obicei σz\sigma_z:

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

Acest lucru este util, deoarece acest operator Pauli (și matricele înrudite) pot descrie multe sisteme fizice ce implică două niveluri sau două rezultate posibile ale unei măsurători, inclusiv stările qubiților transmon dintr-un calculator cuantic.

Înainte de a trece la alți operatori și stări legate de acesta, trebuie să abordăm un fapt pe care mulți oameni îl înțeleg greșit. Acțiunea unui operator nu este același lucru cu măsurătoarea. Într-un sens, ai putea spune: „Bineînțeles că nu! Unul se întâmplă pe hârtie ca parte a unui calcul matematic, iar celălalt se întâmplă într-un laborator pe sisteme fizice." Da, este adevărat, dar este mai mult decât atât. Efectuarea unei măsurători a componentei zz a spinului va produce întotdeauna o stare „spin-up" sau „spin-down", indiferent de starea inițială a sistemului. Am văzut acest lucru cu analogii din calculul cuantic 0|0\rangle și 1|1\rangle. Am inițializat stările în sute de orientări aleatoare, iar măsurătorile au produs întotdeauna fie 0|0\rangle, fie 1|1\rangle. Aceasta este cunoscută drept „colapsul stării" la o stare proprie prin măsurătoare. Acest lucru nu se întâmplă când aplici o matrice la o stare. Încearcă întrebările de mai jos pentru a explora acest aspect.

Verifică-ți înțelegerea

Citește întrebările de mai jos, gândește-te la răspuns, apoi apasă pe triunghi pentru a dezvălui soluția.

Presupune că începi cu o particulă în starea de spin

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

(a) Ce obții dacă aplici operatorul SzS_z pe acest vector de stare? (b) Ce obții dacă efectuezi o singură măsurătoare a componentei zz a spinului acestei particule? (c) Ce obții dacă pregătești multe particule identice în această stare și efectuezi mii de măsurători ale componentei zz a spinului?

Răspunsuri:

(a) Obții

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

Atât. Nu există niciun rezultat experimental. Pur și simplu aplici matricea pe vector și obții un vector ușor diferit, care acum are un semn „-" nou și nu mai are magnitudinea 1, deoarece are un factor /2\hbar/2.

(b) Vei obține fie |\uparrow\rangle, fie |\downarrow\rangle. Aceasta corespunde observării unei proiecții a spinului pe axa zz de fie /2\hbar/2, fie /2-\hbar/2, respectiv. Putem determina și probabilitatea fiecărui rezultat, deoarece

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}

Deci, deși starea cu spin în sus este cu 20% mai probabilă, oricare dintre rezultate este posibil, și vom obține doar una dintre aceste două stări.

(c) Aproximativ 60% din măsurători vor produce particule cu spin în sus, iar aproximativ 40% vor produce particule cu spin în jos, conform probabilităților de măsurare calculate la punctul (b).

Verifică răspunsurile de la punctele (b) și (c) ale întrebării anterioare folosind analogia dintre stările cu spin în sus ale unui atom și stările qubit:

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

Codifică circuite cuantice pentru a crea starea inițială dorită, apoi folosește fie hardware real, fie un simulator pentru a verifica rezultatele unei singure măsurători și dintr-un ansamblu de sute sau chiar mii de măsurători.

Răspuns:

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

Al cincilea experiment: Măsurarea unor observabile diferite

Până acum am efectuat măsurători doar de-a lungul axei z. Într-un experiment Stern-Gerlach, dacă am vrea să măsurăm de-a lungul, să zicem, axei x, am orienta pur și simplu câmpul magnetic neomogen astfel încât să indice de-a lungul axei xx și am căuta deflexii de-a lungul xx pe ecran. Calculatoarele cuantice IBM sunt însă proiectate să efectueze măsurători de-a lungul unei singure axe (zz). Pentru a măsura o stare de-a lungul axei xx, trebuie să efectuăm o „schimbare de bază". Aceasta înseamnă că trebuie să efectuăm o operație care transformă stările de-a lungul axei xx din sfera Bloch în stări de-a lungul axei zz, și invers. Există câteva moduri de a implementa aceasta, dar modul preferat este un Gate Hadamard:

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

Verifică-ți înțelegerea

Citește întrebările de mai jos, gândește-te la răspuns, apoi apasă pe triunghi pentru a dezvălui soluția.

Arată că H0=+xH|0\rangle = |+\rangle_x și că H+x=0H|+\rangle_x = |0\rangle

Răspuns:

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

Arată că H1=xH|1\rangle = |-\rangle_x și că Hx=1H|-\rangle_x = |1\rangle

Răspuns:

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

Acest Circuit rotește sistemul nostru astfel încât măsurătorile (de-a lungul axei zz) să ne ofere informații despre caracteristicile de-a lungul axei xx dinaintea rotației. Știm deja că calculatorul cuantic inițializează stările în 0|0\rangle, care corespunde lui |\uparrow\rangle. Să vedem ce se întâmplă când măsurăm proiecția spinului de-a lungul axei xx pentru o stare inițiată în |\uparrow\rangle. Arătăm acest pas pe un simulator pentru a te încuraja să explorezi statisticile altor circuite cu inițializări diferite.

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}

Aceasta ne arată că pentru un qubit inițializat în 0|0\rangle (sau echivalent, un spin în |\uparrow\rangle), probabilitatea de a măsura o proiecție de-a lungul +x+x sau x-x este de aproximativ 50-50. Într-un sens, acest lucru este perfect logic. La urma urmei, dacă ceva ar fi orientat de-a lungul axei zz, nu ar avea nicio preferință specială pentru ±x\pm x. Ne-am putea aștepta ca același lucru să fie valabil dacă pornim cu starea 1|1\rangle (sau |\downarrow\rangle). Să verificăm:

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

Da! Din nou, obținem o probabilitate de 50-50 de a măsura o proiecție de-a lungul ±x\pm x. Prin analogie cu măsurătorile de-a lungul axei zz, am putea bănui în continuare că o particulă care se prăbușește într-o stare definitiv de-a lungul +x+x ar putea avea probabilitate zero de a fi ulterior măsurată de-a lungul x-x. Să verificăm:

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

Conform așteptărilor, obținem rezultate în care proiecția este de-a lungul +x+x și apoi din nou de-a lungul +x+x, și rezultate în care proiecția este inițial de-a lungul x-x și ulterior tot de-a lungul x-x. Nu vedem cazuri în care proiecția se schimbă de la +x+x la x-x sau invers. Putem colecta aceste observații și le putem folosi pentru a dezvolta în continuare operatori în formă matriceală și vectori de stare suplimentari.

Știm:

  • Stările cu proiecții definite de-a lungul +z+z sau z-z au o probabilitate de 50% de a fi găsite cu o proiecție de-a lungul +x+x și 50% de a avea o proiecție de-a lungul x-x.
  • Stările cu o proiecție definită de-a lungul +x+x au probabilitate zero de a fi ulterior găsite cu o proiecție de-a lungul x-x, și invers.

Putem folosi aceste rezultate pentru a construi stări cu o proiecție definită, pozitivă de-a lungul axei xx (pe care o numim +x|+x\rangle), și cele cu proiecție definită, negativă de-a lungul axei xx (pe care o numim x|-x\rangle). Din acele stări, putem construi matricea corespunzătoare lui SxS_x, exact cum am făcut pentru SzS_z. Lăsăm acestea ca exerciții pentru cursant. De asemenea, se pot construi experimente cu măsurători de-a lungul axei yy, se pot determina vectori pentru +y|+y\rangle și y|-y\rangle, și în final se poate obține o expresie pentru SyS_y.

Adunând toți acești vectori și matrice, avem

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

Întrebări

Instructorii pot solicita versiuni ale acestor notebook-uri cu răspunsuri și îndrumări privind plasarea în curricule comune, completând acest scurt sondaj despre modul în care notebook-urile sunt utilizate.

Concepte esențiale:

  • Pentru o particulă cu spin-1/2, o măsurătoare a proiecției spinului pe o anumită axă poate produce doar unul din două rezultate, adesea numite „sus" și „jos".
  • Qubiții pot fi măsurați doar în una din două stări, adesea denumite 0|0\rangle și 1|1\rangle.
  • Putem modela experimentul Stern-Gerlach pe particule cu spin-1/2 folosind qubiți într-un calculator cuantic.
  • Măsurătorile repetate ale aceleiași observabile fizice a aceleiași particule/qubit vor produce același rezultat (cu excepția cazului în care sistemul este perturbat de zgomot).
  • Putem utiliza rezultatele din experimentul Stern-Gerlach sau din experimentele analogice cu calculatoare cuantice pentru a deriva un sistem de vectori de stare și operatori matriciali care descriu spinul mecanic cuantic.

Întrebări A/F:

  1. A/F Pornind de la observații experimentale, singura alegere validă pentru un vector care să reprezinte |\uparrow\rangle este (10)\begin{pmatrix}1 \\ 0\end{pmatrix}
  2. A/F Dacă =(10)|\uparrow\rangle = \begin{pmatrix}1 \\ 0\end{pmatrix}, singura alegere pentru |\downarrow\rangle este (01)\begin{pmatrix}0 \\ 1\end{pmatrix} (până la o fază globală).
  3. A/F O particulă măsurată ca fiind în starea 0|0\rangle va continua să fie găsită în starea 0|0\rangle la măsurătorile ulterioare de-a lungul axei zz.
  4. A/F O particulă măsurată ca fiind în starea 0|0\rangle va continua să fie găsită în starea 0|0\rangle la măsurătorile ulterioare de-a lungul axei xx.
  5. A/F O particulă măsurată ca fiind în starea 0|0\rangle va fi întotdeauna găsită în starea +x|+\rangle_x la măsurătorile ulterioare de-a lungul axei xx.

Întrebări cu variante multiple:

  1. O particulă inițial în |\uparrow\rangle are ce probabilitate de a fi măsurată în starea +x|+x\rangle?

    • a. 0%
    • b. 25%
    • c. 50%
    • d. 71%
    • e. 100%
  2. O particulă inițial în |\uparrow\rangle are ce probabilitate de a fi măsurată în starea |\downarrow\rangle?

    • a. 0%
    • b. 25%
    • c. 50%
    • d. 71%
    • e. 100%
  3. Starea |\uparrow\rangle a unei particule cu spin-1/2 este cel mai frecvent asociată cu ce stare de calcul cuantic?

    • a. +|+\rangle
    • b. |-\rangle
    • c. 0|0\rangle
    • d. 1|1\rangle
    • e. Niciuna dintre cele de mai sus

Întrebări de discuție:

  1. Trei prieteni discută despre măsurători și operatori cuantici. Prietenul A spune: „A face o măsurătoare de-a lungul axei zz și a acționa cu operatorul σz\sigma_z sunt același lucru." Prietenul B spune: „Ei bine, sunt proceduri diferite, dar au același rezultat." Prietenul C spune: „Sunt complet diferite; au chiar efecte diferite asupra majorității stărilor." Cu cine ești de acord și de ce?

Probleme cu răspuns liber:

  1. Pornind de la observațiile experimentale și sintaxa propusă:

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}

arată că până la o fază globală

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

Alege α=0\alpha = 0 pentru a obține rezultatul standard.

  1. Pornind de la observațiile experimentale și sintaxa propusă:

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}

Și folosind rezultatul din problema de provocare 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

arată că până la o fază globală

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

Mulțumiri

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