L'esperimento di Stern-Gerlach con i computer quantistici
Per questo modulo Qiskit in Classrooms, gli studenti devono avere un ambiente Python funzionante con i seguenti pacchetti installati:
qiskitv2.1.0 o più recenteqiskit-ibm-runtimev0.40.1 o più recenteqiskit-aerv0.17.0 o più recenteqiskit.visualizationnumpypylatexenc
Per configurare e installare i pacchetti di cui sopra, consultare la guida Installare Qiskit. Per poter eseguire lavori su veri computer quantistici, gli studenti dovranno creare un account con IBM Quantum® seguendo i passaggi della guida Set up your IBM Cloud account.
Questo modulo è stato testato e ha utilizzato 2 secondi di tempo della QPU. Si tratta solo di una stima. L'utilizzo effettivo può variare.
# 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'Guardate la presentazione del modulo da parte della dottoressa Katie McCormick qui sotto, oppure fate clic qui per guardarla su YouTube.
Sfondo
All'inizio del 1900, le prove di un comportamento quantizzato su scala atomica stavano aumentando. Molte interpretazioni di successo dei dati, come la spiegazione di Max Planck della catastrofe ultravioletta, ed esperimenti come quello di Otto Stern e Walther Gerlach sono stati fondamentali per convincere il mondo che un sistema di meccanica quantistica era necessario e che alcuni fenomeni fisici sono quantizzati. Nel caso dell'esperimento Stern-Gerlach (ideato da Stern nel 1921 e realizzato da Stern e Gerlach nel 1922), l'obiettivo era verificare la quantizzazione del momento angolare negli atomi.
Nello stesso periodo un modello prevalente per l'atomo era il modello di Bohr-Sommerfeld, che era un'estensione del modello di Bohr e, come quest'ultimo, prevedeva che gli elettroni esistessero in certe orbite quantizzate simili a quelle dei pianeti che orbitano intorno al sole.
Anche se alla fine questa trattazione si sarebbe rivelata insufficiente a spiegare il comportamento quantomeccanico dell'atomo, a grandi linee, ha previsto molti fenomeni osservati, come le linee spettrali discrete degli atomi. Le orbite quantizzate degli elettroni con energie specifiche corrispondono a valori quantizzati del momento angolare. È questo momento angolare orbitale che Stern e Gerlach hanno cercato di osservare nel loro esperimento, anche se l'esperimento si applica a qualsiasi tipo di momento angolare quantizzato, compreso lo spin. Si sente spesso parlare dell'esperimento di Stern-Gerlach applicato alle rotazioni. L'esperimento originale si concentrava sul momento angolare orbitale semplicemente perché George Uhlenbeck e Samuel Goudsmit avrebbero teorizzato l'esistenza dello spin solo nel 1925.
Indipendentemente dal tipo di momento angolare, una carica con momento angolare ha un momento magnetico. Nella trattazione classica del moto orbitale, ci si aspetterebbe che una particella di carica , massa e momento angolare abbia un momento magnetico dato da
Si scopre che quasi la stessa formula vale per il momento angolare della meccanica quantistica, con l'avvertenza di aggiungere un rapporto numerico legato al tipo di momento angolare, chiamato fattore g . Quando si combinano diversi tipi di momento angolare, o si generalizza a un tipo arbitrario, spesso si usa invece di , quindi si scrive:
Per gli oggetti classici . Per gli elettroni, , e ci sono molti valori per vari nuclei e particelle subatomiche. Il punto principale è che un momento angolare quantizzato significa un momento magnetico quantizzato!
Questo momento magnetico subirà una coppia in un campo magnetico:
E sperimenterà una forza in un campo magnetico con un gradiente non nullo:
Spesso considereremo l'espressione di cui sopra una componente alla volta, quindi può essere conveniente pensare alla sua componente :
Combinando le espressioni, si ottiene
Stern e Gerlach non conoscevano il fattore , ma anche con esso nell'espressione, abbiamo una forza pari a diverse costanti note o misurabili per un momento angolare. Quindi, utilizzando un campo magnetico con un gradiente noto e misurando la deflessione di una particella che passa attraverso il campo, dovremmo ottenere informazioni sul momento angolare. Questo è il punto cruciale dell'esperimento Stern-Gerlach.
Fig. Esperimento di Stern-Gerlach [1] : Atomi d'argento che viaggiano attraverso un campo magnetico disomogeneo e vengono deviati verso l'alto o verso il basso a seconda del loro spin. Classicamente, ci aspetteremmo una distribuzione continua sullo schermo, ma nell'esperimento vediamo due punti distinti.
Gli atomi d'argento neutri sono stati riscaldati in un forno. Quando un fascio di atomi d'argento è uscito dal forno, sono stati utilizzati collimatori di fascio per selezionare solo gli atomi che viaggiavano vicino al centro del campo magnetico disomogeneo. Naturalmente, alcuni atomi deviano un po' a sinistra o a destra e sperimentano un gradiente più debole nel campo, o non lo sperimentano affatto. Pertanto, non ci preoccupiamo eccessivamente del comportamento degli atomi che si trovano a sinistra o a destra. Siamo interessati a ciò che accade agli atomi che viaggiano verso il centro del canale, dove il gradiente del campo magnetico produrrà una forza che devia gli atomi solo nella direzione .
Cosa dovremmo aspettarci, in linea di massima?
Come si comporterebbero questi atomi se fossero esattamente come ingombranti magneti classici? Potete fare l'esperimento. Immaginate di far passare dei piccoli magneti al neodimio davanti a un grande e potente magnete. L'orientamento dei piccoli magneti è casuale. Ma quando passano davanti al magnete grande, si riorientano rapidamente per allinearsi al campo e vengono attratti dal magnete grande. La maggior parte dei piccoli magneti viene deviata verso il magnete grande. Un osservatore molto astuto potrebbe chiedersi: "E il risparmio energetico?"
Infatti, un momento magnetico in un campo magnetico esterno ha un'energia potenziale associata:
Quindi, se un momento magnetico dovesse ruotare nel campo magnetico esterno, si avrebbe una variazione di energia data da:
Nel caso particolare di un piccolo magnete perfettamente non allineato con il campo esterno che si capovolge e si allinea con esso, ciò corrisponderebbe a una diminuzione dell'energia potenziale:
Dove va a finire questa energia? Un magnete classico, come un piccolo magnete da frigorifero al neodimio, ha molte particelle e può dissipare quasi ogni quantità di energia come calore. Gli angoli iniziali e finali tra il momento magnetico e il campo magnetico esterno potrebbero essere qualsiasi, e almeno l'orientamento iniziale sarebbe casuale. Quindi ogni piccolo magnete dissipa una quantità diversa di energia sotto forma di calore. Ma classicamente questo non è un problema, poiché un insieme di particelle classiche può dissipare qualsiasi quantità di energia sotto forma di calore.
Cosa dovremmo aspettarci applicando il pensiero classico alle scale atomiche?
Per lo meno questo non è lo stesso per i magneti su scala atomica, perché ci sono meno particelle in gioco, meno gradi di libertà attraverso i quali l'energia può essere dissipata. Le proposte della prima meccanica quantistica suggerivano inoltre che l'energia che può essere assorbita da una singola particella, come l'elettrone, sarebbe stata quantizzata, il che significa che un elettrone poteva assorbire solo alcune quantità specifiche di energia. Poiché gli orientamenti iniziali casuali richiederebbero la dissipazione di quantità casuali di energia, ciò non dovrebbe essere possibile per un sistema con livelli energetici quantizzati. L'energia in eccesso non poteva essere dissipata come calore. Cosa accadrebbe invece?
Verifica la tua comprensione
Spiegate cosa pensate che accadrebbe in una situazione come quella descritta sopra. In altre parole, si ha un magnete atomicamente piccolo che non può dissipare energia sotto forma di calore. Quindi, l'energia potenziale magnetica iniziale deve rimanere nel sistema. Tuttavia, viene applicata una coppia da un campo magnetico esterno, che cerca di far ruotare il piccolo magnete per allinearlo al campo esterno. Cosa succede?
Il piccolo momento magnetico ruoterebbe per allinearsi al campo esterno. Ma quando si allinea momentaneamente, ha un'energia cinetica rotazionale che la fa ruotare oltre il campo e torna fuori allineamento. Questo comportamento può essere osservato anche nei grandi magneti classici. Ma in questi sistemi classici, l'oscillazione del piccolo momento magnetico alla fine cessa perché l'energia viene dissipata in calore. Ma in un sistema privo di tale meccanismo dissipativo, l'oscillazione dovrebbe continuare indefinitamente.
Dato il comportamento previsto nella risposta precedente, quale distribuzione delle particelle magnetiche vi aspettereste di vedere sullo schermo?
Una distribuzione omogenea che va da una deflessione massima verso il lato più forte del campo magnetico (le particelle che sono partite allineate con il campo esterno) a una deflessione massima verso il lato più debole del campo (le particelle che sono partite non allineate con il campo esterno), e ogni deflessione intermedia, corrispondente a ogni orientamento iniziale tra questi estremi.

Cosa prevederebbe la meccanica quantistica?
Forse la più strana di tutte le possibilità sarebbe la seguente: Cosa succederebbe se il momento angolare dell'elettrone fosse quantizzato, ma anche la sua proiezione su qualche asse fosse quantizzata? La quantizzazione del momento angolare come grandezza è interessante, ma si potrebbe tentare di argomentare utilizzando l'intuizione classica, il modo in cui le orbite planetarie si stabilizzano in percorsi fissi che non si incrociano, avendo solo determinati momenti angolari consentiti. Ma cosa succederebbe se quel vettore di momento angolare potesse puntare solo esattamente lungo o esattamente all'opposto di , ma non avesse nessun'altra componente lungo ? E se poi, quando viene misurato lungo una direzione diversa, il vettore potesse puntare solo interamente lungo o interamente all'opposto di , e niente in mezzo? Sarebbe strano in un modo che confonde tutte le intuizioni classiche.
Verifica la tua comprensione
Che tipo di distribuzione delle particelle su uno schermo ci si aspetterebbe di trovare in quest'ultimo caso, in cui la proiezione del momento angolare lungo la direzione del campo è quantizzata? Si può decidere di considerare solo le particelle che passano perfettamente attraverso il centro del dispositivo, oppure di includere quelle che si allontanano leggermente dal centro, dove il gradiente è più debole. Basta essere espliciti.
Le particelle al centro del dispositivo sperimenterebbero un unico campo disomogeneo e si misurerebbe che tutte hanno uno dei due orientamenti dei loro momenti magnetici. Quindi, sarebbero deviati al massimo con il gradiente o al massimo contro il gradiente, e niente in mezzo. Ovviamente, ai lati, dove la pendenza è più debole, la deviazione sarebbe minore. In posizioni laterali molto ampie, esse possono trovarsi completamente al di fuori del gradiente e potrebbe esserci un'unica regione di particelle non riflesse.

In che modo i qubit ci aiuteranno a testarlo?
La maggior parte dei computer quantistici utilizza i "qubit", gli analoghi quantistici dei bit classici. In particolare, sono stati progettati per essere sistemi a due livelli, analoghi agli stati "on" e "off" dei bit classici. Esistono paradigmi di calcolo quantistico che fanno uso di sistemi a tre livelli (i cosiddetti "qutrit") o a molti livelli (i cosiddetti "qudit"). Ma la maggior parte del lavoro si concentra sui qubit. In particolare, i computer quantistici IBM® utilizzano i cosiddetti qubit transmon a frequenza fissa. Questi sono molto diversi dal momento angolare orbitale o di spin degli atomi. Ma come lo spin di un elettrone, i qubit di IBM® sono sistemi meccanici quantistici che possono interagire con la luce e sui quali è possibile effettuare misurazioni. In effetti, si trovano spesso analogie tra gli stati di spin della meccanica quantistica e gli stati computazionali di un qubit. Ad esempio, spesso si vede lo stato "spin-up" associato allo stato 0 computazionale e "spin-down" associato allo stato 1 computazionale:
Possiamo usare queste somiglianze per osservare un comportamento quantomeccanico nei computer quantistici IBM che imita il comportamento quantomeccanico del momento angolare degli orbitali o degli spin negli atomi. Faremo osservazioni simili utilizzando combinazioni lineari di questi stati che ci permettono di estendere la discussione al momento angolare lungo qualsiasi direzione.
Primo esperimento: una singola misurazione
In questo primo esperimento e in tutto il modulo, utilizzeremo un framework per il calcolo quantistico noto come "Qiskit patterns", che suddivide i flussi di lavoro nelle seguenti fasi:
- Fase 1: mappare gli input classici in un problema quantistico
- Fase 2: Ottimizzazione del problema per l'esecuzione quantistica
- Fase 3: Esecuzione tramite le primitive " IBM Quantum "
- Fase 4: post-elaborazione e analisi classica
In genere seguiamo questi passaggi, anche se non sempre li indichiamo esplicitamente.
Fase 1: mappare gli input classici su un problema quantistico
In questo caso, gli input classici sono le orientazioni di uno spin prima della misurazione in un dispositivo Stern-Gerlach. Non preoccupatevi troppo dell'esatta natura dello stato quantistico prima della misurazione. Questo è l'argomento di un altro modulo di Qiskit Classrooms, sul teorema di Bell.
Si noti che i computer quantistici IBM misurano gli stati lungo l'asse . Quindi questo primo esperimento sarà molto simile all'esperimento di Stern-Gerlach con il gradiente di campo magnetico lungo . Vedremo in seguito come modificare il sistema per misurare lungo diverse direzioni.
Cominciamo col realizzare l'analogo di uno stato di spin, cioè una qualche miscela di e o equivalentemente di e . Abbiamo proposto alcuni valori iniziali. Ma sentitevi liberi di giocare con altri valori o anche con valori casuali.
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)Output:
0.7032089086145691 0.7109832845047109
Ora utilizzeremo gli angoli di cui sopra come parametri di un circuito quantistico. Consideriamo una sola particella alla volta, quindi utilizzeremo un solo qubit nel nostro circuito e avremo bisogno di un solo registro classico.
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:
Fase 2: Ottimizzazione del problema per l'esecuzione quantistica
Per eseguire il nostro esperimento su un vero computer quantistico, dobbiamo caricare un Compute Service d IBM Quantum e e selezionare un computer quantistico (o un "backend"). Di seguito, ci limitiamo a selezionare il computer quantistico meno carico tra quelli a nostra disposizione.
Di seguito è riportato un codice per salvare le credenziali al primo utilizzo. Assicurarsi di eliminare queste informazioni dal blocco note dopo averlo salvato nel proprio ambiente, in modo che le credenziali non vengano accidentalmente condivise quando si condivide il blocco note. Per ulteriori informazioni, vedere Configurazione dell'account IBM Cloud e Inizializzazione del servizio in un ambiente non attendibile.
# Load IBM Quantum Compute Service
from qiskit_ibm_runtime import QiskitRuntimeService
# Syntax for first saving your token. Delete these lines after saving your credentials.
# QiskitRuntimeService.save_account(channel='ibm_quantum_platform',
# instance = '<YOUR_IBM_INSTANCE_CRN>', token='<YOUR-API_KEY>', overwrite=True, set_as_default=True)
# service = QiskitRuntimeService(channel='ibm_quantum_platform')
# 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)Output:
ibm_sherbrooke
Ora dobbiamo trasporre il circuito, cioè dobbiamo mappare il nostro circuito sulle porte di base disponibili nel computer quantistico scelto e vogliamo ottimizzare il nostro circuito per farlo funzionare su quel computer quantistico.
# 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)Fase 3: Esecuzione tramite le primitive " IBM Quantum "
Ora vogliamo eseguire questa operazione su un vero computer quantistico. Tutta la sintassi necessaria è contenuta nel blocco di codice sottostante. Se avete esaurito il tempo a vostra disposizione sui computer quantistici reali, o se non avete una connessione a Internet, potete decommentare il blocco di codice successivo, che eseguirà il codice su un simulatore locale.
# 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()Utilizzate il codice sottostante se non riuscite a eseguire l'esperimento su un vero computer quantistico.
# 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()Fase 4: Post-elaborazione e analisi classica
Per questo esperimento molto semplice, l'analisi classica consiste semplicemente nel visualizzare il risultato sperimentale.
from qiskit.visualization import plot_histogram
print("counts = ", counts)
plot_histogram(counts)Output:
counts = {'0': 1}
Abbiamo effettuato una misurazione e abbiamo ottenuto "0". Non è una sorpresa per noi. Sappiamo di utilizzare un computer quantistico composto da qubit e siamo molto abituati ai bit classici che restituiscono uno 0 o un 1. Ma ricordate: questo è l'analogo dell'informatica quantistica degli esperimenti condotti con particelle dotate di momenti magnetici. Se ci fossimo aspettati una diffusione uniforme tra 0 e +1, avremmo potuto essere sorpresi dal fatto di aver ottenuto un estremo alla prima misurazione. È questa sorprendente quantizzazione dei risultati dell'esperimento di Stern-Gerlach che ci ha portato a una migliore comprensione della natura e che a sua volta ci ha aiutato a costruire i computer quantistici.
Vediamo cosa succede quando effettuiamo un insieme di misurazioni.
Secondo esperimento: misurazione di molte particelle
Per raccogliere statistiche su molte misurazioni di questo tipo, non è necessario ripetere i passaggi 1 e 2. Possiamo semplicemente aumentare il numero di scatti nel nostro esperimento. Sentitevi liberi di giocare con il numero di colpi nel caso del passo 3 qui sotto.
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()Come in precedenza, se non si è in grado di eseguire l'esperimento su un vero computer quantistico, non commentare il blocco precedente del primo esperimento e cambiare semplicemente num_shots = 1 in num_shots = 100 o più.
plot_histogram(counts)Output:
Vediamo che a volte misuriamo 0 e altre volte 1. Si noti che non misuriamo mai nient'altro! Si può cambiare il numero di colpi e notare che la probabilità di misurare 0 o 1 sembra essere abbastanza coerente tra le diverse esecuzioni con un numero diverso di colpi. Quindi, qualcosa che riguarda la preparazione dello stato sembra determinare la probabilità dei risultati delle misurazioni, anche se una qualsiasi misurazione può dare come risultato 0 o 1.
Terzo esperimento: rotazioni casuali in un forno
Nell'esperimento di Stern-Gerlach, i ricercatori non hanno potuto specificare l'angolo in cui un vettore di momento angolare sarebbe emerso dal forno. Gli orientamenti erano casuali (o qualcosa di ancora più misterioso! Si veda il modulo di Qiskit Classroom sul teorema di Bell). Un'analogia ragionevole di questo esperimento consisterebbe nell'inizializzare in modo casuale gli stati del nostro qubit e nell'effettuare molte misure.
Fase 1: mappare gli input classici su un problema quantistico
Il circuito che vogliamo costruire è lo stesso di prima. L'unica differenza è che questa volta costruiremo il circuito utilizzando porte con parametri liberi e . I valori numerici di questi parametri saranno poi assegnati per ogni nuova esecuzione.
# 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:
Eseguire un circuito quantistico per un solo colpo e farlo per molte configurazioni casuali è un flusso di lavoro insolito per un computer quantistico. Si può certamente fare, ma per semplicità utilizzeremo un simulatore locale.
# 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:
Vediamo quindi che lo stato iniziale casuale dei qubit (corrispondente a orientamenti casuali del momento angolare in un esperimento di Stern-Gerlach) produce un numero simile di stati 0 e 1 (come un numero simile di stati di spin up e spin down). Questo è esattamente ciò che ha dimostrato l'esperimento originale di Stern-Gerlach.
Quarto esperimento: misurazioni ripetute
Quando un qubit inizia in uno stato casuale, vediamo che c'è una probabilità di circa 50-50 di misurare un estremo rispetto all'altro. Ma cosa succede allo stato del qubit (o al momento angolare della particella) dopo la misurazione? Per rispondere a questa domanda, dovremo definire un circuito che ci permetta di effettuare misure multiple degli stessi qubit. Definiamo un circuito che possiamo utilizzare per studiare questo aspetto. Vogliamo consentire la possibilità di misurare entrambi gli stati e , quindi abbiamo bisogno di qualcosa per ruotare lo stato iniziale del qubit lontano dallo stato predefinito . In questo caso, utilizzeremo una porta di hadamard , poiché . Si noti che, per impostazione predefinita, entrambe le misure saranno lungo .
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)Output:
{'00': 497, '11': 498, '01': 3, '10': 2}
# Step 4: Post-process
plot_histogram(counts)Output:
Nella figura qui sopra, i bins sono etichettati come "00", "01" e così via. Questi numeri si riferiscono al "2° risultato, 1° risultato". Quindi "00" significa che entrambe le misurazioni hanno prodotto lo stato , mentre "01" significa che la prima misurazione ha prodotto e la seconda . La stragrande maggioranza dei qubit è stata misurata in due volte, oppure in due volte. Era molto raro che i qubit venissero misurati in uno stato e poi misurati in un altro stato, e i pochi casi in cui ciò è accaduto (´1%) sono dovuti al rumore. In questo caso il rumore è stato simulato in base al comportamento del sistema quantistico reale. Questa correlazione osservata tra misure successive si osserva anche nelle misure di tipo Stern-Gerlach di particelle con momento angolare di spin. Se una particella viene misurata come "spin-up", una misura successiva, poco dopo, darà nuovamente come risultato "spin-up" (con una piccola variazione dovuta al rumore).
Questo può sembrare banale. Dopo tutto, se un qubit viene misurato in uno stato e poi lo misuro di nuovo, rapidamente, perché non dovrebbe essere ancora in quello stato? Ma se riusciamo a cogliere questa sottigliezza, può aiutarci a selezionare alcuni strumenti matematici per descrivere questo fenomeno.
Analisi degli esperimenti condotti finora
Raccogliamo alcune osservazioni sugli esperimenti condotti finora:
- La misurazione di un sistema meccanico quantistico produrrà solo uno di una serie di "valori consentiti". Per i sistemi a due livelli, come i qubit o le particelle di spin-1/2, una misurazione darà solo uno dei risultati binari.
- Quando inizializziamo casualmente lo stato del nostro sistema binario (come le particelle di spin-1/2 che emergono da un forno), è possibile uno dei due risultati della misurazione binaria.
- Una volta effettuata una misurazione e conosciuto lo stato del sistema, ripetere la misurazione della stessa osservabile fisica non cambia lo stato! Cioè, se otteniamo lo stato 0 una volta, quando misuriamo di nuovo è ancora nello stato 0 (fino a qualche piccolo rumore nel sistema ~0.1 % - 1%).
Si noti esplicitamente che non abbiamo ancora affrontato la natura probabilistica della meccanica quantistica, né abbiamo parlato di "collasso" dello stato a un autostato. Utilizzando solo le osservazioni precedenti, si potrebbe essere tentati di cercare un'operazione matematica che lasci inalterato un qualche insieme speciale di stati quantomeccanici fino a forse una costante: , poiché misurando due volte lungo si ottiene lo stesso risultato. In definitiva, questa ricerca non riuscirà a descrivere tutti i comportamenti che vedremo. Ma può descrivere alcune cose, quindi lo seguiremo ancora un po'.
Esiste un'operazione di questo tipo. Le operazioni matriciali su alcuni vettori modificano i vettori, mentre le operazioni matriciali su altri vettori (autovalori) lasciano il vettore invariato fino a una costante. Si prenda ad esempio la matrice e il vettore dove
e
Notare che
Ma per altri vettori, ad esempio , abbiamo
Potremmo cercare di descrivere lo spin di una particella usando una matrice e potremmo cercare di descrivere gli stati delle particelle dopo la misurazione usando un vettore, chiamato "vettore di stato". Non è affatto ovvio quali valori debbano entrare in una matrice o in un vettore di stato di questo tipo, ma l'unica proprietà che abbiamo dalle misurazioni effettuate finora e che potremmo usare per etichettare gli stati sarebbe la probabilità di misurare 0 o 1 ("spin-up" o "spin-down" nel contesto delle particelle di spin-1/2 ). Dobbiamo considerare che le voci dei vettori di stato devono essere correlate a questa probabilità (esattamente la probabilità, "l'ampiezza della probabilità" - cioè elevare al quadrato la voce per ottenere la probabilità, e così via). Ma a questo punto non sappiamo se le voci di queste matrici debbano essere strettamente reali, complesse o altro. Per sicurezza, cerchiamo di sviluppare un quadro in cui i vettori e le matrici soddisfino quanto segue:
- Gli operatori di matrice sono collegati alla sperimentazione il più possibile. Ad esempio, potremmo associare gli autovalori di una matrice di spin alle proiezioni di spin osservate sperimentalmente.
- I vettori di stato devono essere collegati alla probabilità nel modo seguente: Se una particella si trova nel vettore di stato , la probabilità che una successiva misurazione trovi la particella nello stato è .
Questo ci dà una grande libertà nello sviluppo delle nostre prime matrici. Ad esempio, potremmo ingenuamente provare
Qui significa che nei computer quantistici e nei sistemi spin-1/2 esistono stati molto simili e spesso mappati l'uno sull'altro. Ovviamente non sono esattamente la stessa cosa, poiché si riferiscono a sistemi diversi. Ma l'algebra che descrive questi sistemi a due stati potrebbe essere conforme alle stesse regole (attenzione: lo è!). Si noti che questa scelta casuale ha già un bell'attributo. Notare che
Cioè, se una particella si trova già nello stato , la probabilità che una successiva misurazione produca anche è pari a 1 (a meno di effetti dovuti al rumore). Questo è eccellente, perché abbiamo già visto che una volta che uno stato si trova nello stato 0 o "spin-up", vi rimane alla successiva misurazione. La probabilità di cui sopra dovrebbe essere effettivamente del 100%.
Verifica la tua comprensione
Perché è
una scelta migliore rispetto, ad esempio, a,
Il nostro tentativo di associare la probabilità di una misura al prodotto interno al quadrato significa che la grandezza di ciascun vettore deve essere 1. Cioè, per tutti i , poiché la probabilità che una cosa nello stato si trovi nello stato è del 100%. Questa è nota come "condizione di normalizzazione".
Perché è
una scelta migliore rispetto, ad esempio, a,
Non lo è. Non c'è alcun motivo per cui si debba scegliere inizialmente . Si tratta piuttosto di una convenzione. Tuttavia, una volta fatta questa scelta, essa impone alcuni vincoli alle scelte successive. Vedere sotto.
Ricordiamo che negli esperimenti precedenti abbiamo riscontrato che un qubit inizialmente in uno stato rimane in quello stato alla successiva misurazione. Lo stesso vale per . Ciò significa che un qubit che si trova in ha probabilità zero di essere misurato nello stato (a meno di effetti di rumore). La connessione richiesta tra i prodotti interni e le probabilità delle misure ci dice allora che
Senza perdita di generalità, possiamo scrivere il vettore di stato . Allora possiamo scrivere
Il requisito che , la cosiddetta "condizione di normalizzazione", ci dice che . Questo di per sé ci limita a per . Si scopre che ci sono altre ragioni per scegliere che vanno oltre questa introduzione all'argomento. Per ora, è sufficiente che sia una soluzione accettabile.
Abbiamo fatto molta strada nella nostra analisi. La scelta di una forma per i nostri vettori di stato ci permette di costruire una matrice che descrive qualcosa dei fenomeni fisici in gioco. In particolare, poiché l'esperimento originale di Stern-Gerlach ha misurato una divisione delle traiettorie basata sulle componenti del momento angolare dello spin lungo l'asse , vorremmo un operatore che descriva esattamente questo: . Un'altra connessione chiave con l'esperimento è che dall'entità della deflessione, dal tempo di percorrenza e dall'intensità del campo magnetico noto, possiamo determinare la grandezza della componente dello spin. Sebbene questo richieda molte ipotesi sulla precisione del setup sperimentale, qui ci limiteremo a ribadire che le componenti z misurate del momento angolare dello spin sono .
Quindi cerchiamo una matrice con autovalori reali (soddisfatti da matrici hermitiane) con autovalori corrispondenti a queste componenti di spin osservate sperimentalmente. Senza perdita di generalità, possiamo scrivere , e possiamo richiedere:
Combinando ed estraendo il fattore complessivo di , abbiamo
Si tratta del ben noto operatore di spin-z, presente in tutti i libri di testo di meccanica quantistica. Spesso lo si vede con l'eliminazione di , nel qual caso si tratta dell'operatore "Pauli-z", tipicamente indicato con :
Ciò è utile, poiché questo operatore di Pauli (e le matrici correlate) può descrivere molti sistemi fisici che coinvolgono due livelli o due possibili risultati della misurazione, compresi gli stati dei qubit transmon in un computer quantistico.
Prima di passare ad altri operatori e stati correlati a questo, dobbiamo affrontare un fatto che molte persone sbagliano. L'azione dell'operatore non equivale alla misurazione. In un certo senso, si potrebbe dire: "Certo che no! Una avviene sulla carta come parte di un calcolo matematico, l'altra avviene in laboratorio su sistemi fisici" Sì, è vero, ma c'è di più. Effettuando una misura della componente dello spin si otterrà sempre uno stato di "spin-up" o "spin-down", indipendentemente dallo stato iniziale del sistema. Lo abbiamo visto con gli analoghi dell'informatica quantistica e . Abbiamo inizializzato gli stati in centinaia di orientamenti casuali e le misurazioni hanno sempre prodotto o o . Questo è noto come "collasso dello stato" ad un autostato. Questo non accade quando si applica una matrice a uno stato. Provate le domande che seguono per esplorare questo aspetto.
Verifica la tua comprensione
Supponiamo di iniziare con una particella in uno stato di spin
(a) Cosa si ottiene agendo con l'operatore su questo vettore di stato? (b) Che cosa si ottiene effettuando una singola misura della componente dello spin di questa particella? (c) Cosa si ottiene preparando molte particelle identiche a questo stato ed effettuando migliaia di misure della componente dello spin?
(a) Si ottiene
Questo è tutto. Non esiste un risultato sperimentale. Basta applicare la matrice al vettore per ottenere un vettore leggermente diverso, che ora ha un nuovo segno "-" e non ha più una magnitudine di 1, poiché ha un prefattore .
(b) Si otterrà o . Ciò corrisponde all'osservazione di una proiezione dello spin sull'asse di o , rispettivamente. Possiamo anche determinare la probabilità di ogni risultato, poiché
Quindi, anche se lo stato di spin-up è più probabile del 20%, entrambi i risultati sono possibili e otterremo solo uno di questi due stati.
(c) Circa il 60% delle misurazioni produrrà particelle spin-up e circa il 40% delle misurazioni produrrà particelle spin-down, secondo le probabilità di misurazione calcolate nella parte (b).
Verificate le risposte alle parti (b) e (c) della domanda precedente utilizzando l'analogia tra gli stati di spin-up di un atomo e gli stati dei qubit:
Codificare i circuiti quantistici per creare lo stato iniziale desiderato, quindi utilizzare un hardware reale o un simulatore per verificare i risultati di una singola misurazione e di un insieme di centinaia o addirittura migliaia di misurazioni.
#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.
Quinto esperimento: misurazione di diversi osservabili
Finora abbiamo effettuato solo misurazioni lungo l'asse z. In un esperimento di Stern-Gerlach, se volessimo misurare, ad esempio, lungo l'asse x, orienteremmo semplicemente il campo magnetico disomogeneo in modo che punti lungo l'asse e cercheremmo le deviazioni lungo sullo schermo. IBM i computer quantistici, tuttavia, sono progettati per effettuare misure lungo un solo asse ( ). Per misurare uno stato lungo dobbiamo effettuare un "cambio di base". Ciò significa che dobbiamo eseguire un'operazione che porti gli stati lungo nella sfera di Bloch a , e viceversa. Esistono diversi modi per implementare questo sistema, ma quello preferito è un cancello di Hadamard:
Verifica la tua comprensione
Dimostrare che e che
Dimostrare che e che
# 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:
Questo circuito fa ruotare il nostro sistema in modo che le misurazioni (lungo ) ci diano informazioni sulle caratteristiche di prima della rotazione. Sappiamo già che il computer quantistico inizializza gli stati in che corrisponde a . Vediamo cosa succede quando misuriamo la proiezione dello spin lungo per uno stato inizialmente in . Mostriamo questo passaggio su un simulatore per incoraggiarvi a esplorare le statistiche di altri circuiti con inizializzazioni diverse.
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())Output:
{'1': 4977, '0': 5023}
Questo ci mostra che per un qubit inizialmente in (o, equivalentemente, uno spin in ) la probabilità di misurare una proiezione lungo o è di circa 50-50. Per certi versi, questo ha perfettamente senso. Dopo tutto, se qualcosa puntasse lungo la direzione z, non avrebbe una particolare preferenza per . Potremmo aspettarci che lo stesso sia vero se partiamo dallo stato (o ). Verifichiamo:
# 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:
job = sampler_sv.run([qc], shots=10000)
print(job.result()[0].data.c.get_counts())Output:
{'0': 4935, '1': 5065}
Sì! Anche in questo caso, troviamo una probabilità del 50-50 di misurare una proiezione lungo . In analogia con le misure lungo , potremmo anche sospettare che una particella che collassa in uno stato sicuramente lungo possa avere probabilità zero di essere successivamente misurata lungo . Verifichiamo:
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:
job = sampler_sv.run([qc])
print(job.result()[0].data.c.get_counts())
plot_histogram(job.result()[0].data.c.get_counts())Output:
{'00': 504, '11': 520}
Come ci si aspettava, si ottengono risultati in cui la proiezione avviene lungo e poi di nuovo lungo , e si hanno risultati in cui la proiezione avviene inizialmente lungo e poi di nuovo lungo . Non ci sono casi in cui la proiezione passa da a o viceversa. Possiamo raccogliere le nostre osservazioni e utilizzarle per sviluppare ulteriori operatori in forma di matrice e ulteriori vettori di stato.
Lo sappiamo:
- Gli Stati con proiezioni definite lungo o hanno il 50% di probabilità di avere una proiezione lungo e il 50% di avere una proiezione lungo .
- Gli Stati con una proiezione definita lungo hanno zero possibilità di scoprire in seguito di avere una proiezione lungo , e viceversa.
Possiamo usare questi risultati per costruire gli stati con una proiezione definita e positiva lungo (che chiamiamo ) e quelli con una proiezione definita e negativa lungo (che chiamiamo ). A partire da questi stati, possiamo costruire la matrice corrispondente a , esattamente come abbiamo fatto per . Lasciamo questi esercizi all'allievo. Allo stesso modo, si possono costruire esperimenti che effettuano misure lungo l'asse , determinare i vettori per e , e infine ottenere un'espressione per .
Raccogliendo tutti questi vettori e matrici, si ha
Domande
Gli insegnanti possono richiedere le versioni di questi quaderni con le chiavi di risposta e le indicazioni per l'inserimento nei curricula comuni compilando questo rapido sondaggio sull'utilizzo dei quaderni.
Concetti fondamentali:
- Per la particella spin-1/2, la misura della proiezione dello spin su un asse può dare solo uno dei due risultati, spesso chiamati "up" e "down".
- I Qubit possono essere misurati solo in uno dei due stati, spesso indicati come e .
- Possiamo modellare l'esperimento di Stern-Gerlach sulle particelle di spin-1/2 utilizzando i qubit di un computer quantistico.
- Misure ripetute della stessa osservabile fisica della stessa particella/qubit daranno lo stesso risultato (a meno che il sistema non sia perturbato dal rumore).
- Possiamo utilizzare i risultati dell'esperimento di Stern-Gerlach o di esperimenti analoghi con i computer quantistici per ricavare un sistema di vettori di stato e di operatori matriciali che descrivono lo spin meccanico quantistico.
Domande vero/falso:
- T/F Partendo da osservazioni sperimentali, l'unica scelta valida per un vettore per rappresentare è
- T/F Se , l'unica scelta per è (fino a una fase globale).
- T/F Una particella misurata nello stato continuerà a trovarsi nello stato nelle successive misurazioni lungo .
- T/F Una particella misurata nello stato continuerà a trovarsi nello stato nelle successive misurazioni lungo .
- T/F Una particella misurata nello stato si troverà sempre nello stato a seguito di successive misurazioni lungo .
Domande del moderatore:
-
Una particella inizialmente in ha quale probabilità di essere misurata nello stato ?
- a. 0%
- b. 25%
- c. Il 50%
- d. 71%
- e. 100%
-
Una particella inizialmente in ha quale probabilità di essere misurata nello stato ?
- a. 0%
- b. 25%
- c. Il 50%
- d. 71%
- e. 100%
-
Lo stato di una particella spin-1/2 è più comunemente associato a quale stato di calcolo quantistico?
- a.
- b.
- c.
- d.
- e. Nessuna delle precedenti
Domande di discussione:
- Tre amici discutono di misure e operatori quantistici. L'amico A dice: "Effettuare una misura lungo e agire con l'operatore sono la stessa cosa" L'amico B dice: "Beh, sono procedure diverse, ma hanno lo stesso risultato" L'amico C dice: "Sono completamente diversi; hanno persino effetti diversi sulla maggior parte degli Stati" Con chi siete d'accordo e perché?
Problemi a risposta libera:
- Date le osservazioni sperimentali e la sintassi proposta:
dimostrano che fino ad una fase globale
Scegliere per ottenere il risultato standard.
- Date le osservazioni sperimentali e la sintassi proposta:
E utilizzando il risultato del problema 3:
dimostrano che fino ad una fase globale
Riconoscimenti
[1] Da Tatoute - Lavoro proprio, CC BY-SA 4.0, https://commons.wikimedia.org/w/index.php?curid=34095239