Skip to main content
IBM Quantum Platform

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:

  • qiskit v2.1.0 o più recente
  • qiskit-ibm-runtime v0.40.1 o più recente
  • qiskit-aer v0.17.0 o più recente
  • qiskit.visualization
  • numpy
  • pylatexenc

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.

Diagramma del modello di Bohr-Sommerfeld. Il punto centrale rappresenta il nucleo di un atomo. I cerchi o le ellissi attorno a questo punto rappresentano gli orbitali atomici, molto simili alle orbite planetarie attorno al sole. Le orbite a più alta energia sono più lontane dal nucleo.

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 qq, massa mm e momento angolare L\vec{L} abbia un momento magnetico μ\mu dato da

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

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 gg. Quando si combinano diversi tipi di momento angolare, o si generalizza a un tipo arbitrario, spesso si usa J\vec{J} invece di L\vec{L}, quindi si scrive:

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

Per gli oggetti classici g=1g=1. Per gli elettroni, g2g\approx 2, 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:

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

E sperimenterà una forza in un campo magnetico con un gradiente non nullo:

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

Spesso considereremo l'espressione di cui sopra una componente alla volta, quindi può essere conveniente pensare alla sua componente zz :

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

Combinando le espressioni, si ottiene

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

Stern e Gerlach non conoscevano il fattore gg, 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.

Atomi d'argento che attraversano 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.

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

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:

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

Quindi, se un momento magnetico dovesse ruotare nel campo magnetico esterno, si avrebbe una variazione di energia data da:

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

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:

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

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.

    Diagramma di un fascio di particelle che passa attraverso un magnete. Vengono deviati in misura variabile lungo la direzione del campo magnetico. Così, quando colpiscono uno schermo distante, formano una linea.

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 zz o esattamente all'opposto di zz, ma non avesse nessun'altra componente lungo zz? E se poi, quando viene misurato lungo una direzione diversa, il vettore potesse puntare solo interamente lungo xx o interamente all'opposto di xx, 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.

    Diagramma di un fascio di particelle che viene deviato verso l'alto o verso il basso, colpendo uno dei due punti su uno schermo, senza particelle tra questi due massimi

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:

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

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 zz. Quindi questo primo esperimento sarà molto simile all'esperimento di Stern-Gerlach con il gradiente di campo magnetico lungo zz. 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 |\uparrow\rangle e |\downarrow\rangle o equivalentemente di 0|0\rangle e 1|1\rangle. 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:

Output of the previous code cell

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

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:

Output of the previous code cell

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 θ\theta e ϕ\phi. 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:

Output of the previous code cell

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:

Output of the previous code cell

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 0|0\rangle e 1|1\rangle, quindi abbiamo bisogno di qualcosa per ruotare lo stato iniziale del qubit lontano dallo stato predefinito 0|0\rangle. In questo caso, utilizzeremo una porta di hadamard HH, poiché H0=12(0+1)H|0\rangle = \frac{1}{\sqrt{2}}(|0\rangle+|1\rangle). Si noti che, per impostazione predefinita, entrambe le misure saranno lungo 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)

Output:

{'00': 497, '11': 498, '01': 3, '10': 2}
# Step 4: Post-process
plot_histogram(counts)

Output:

Output of the previous code cell

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 0|0\rangle, mentre "01" significa che la prima misurazione ha prodotto 1|1\rangle e la seconda 0|0\rangle. La stragrande maggioranza dei qubit è stata misurata in 0|0\rangle due volte, oppure in 1|1\rangle 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 OO che lasci inalterato un qualche insieme speciale di stati quantomeccanici ψ|\psi\rangle fino a forse una costante: Oψ=cψO|\psi\rangle = c|\psi \rangle, poiché misurando due volte lungo zz 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 MM e il vettore v|v\rangle dove

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

e

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

Notare che

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.

Ma per altri vettori, ad esempio v=(12)|v'\rangle = \begin{pmatrix} 1\\2\end{pmatrix}, abbiamo

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.

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 A|A\rangle, la probabilità che una successiva misurazione trovi la particella nello stato B|B\rangle è PABAB2P_{AB}\equiv |\langle A| B \rangle|^2.

Questo ci dà una grande libertà nello sviluppo delle nostre prime matrici. Ad esempio, potremmo ingenuamente provare

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

Qui 0|0\rangle \sim |\uparrow\rangle 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

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.

Cioè, se una particella si trova già nello stato 0|0\rangle, la probabilità che una successiva misurazione produca anche 0|0\rangle è 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é è

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

una scelta migliore rispetto, ad esempio, a,

0=(20)?|0\rangle = \begin{pmatrix} 2 \\0 \end{pmatrix}?
  • 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è, vv2=1|\langle v|v\rangle|^2 = 1 per tutti i v|v\rangle, poiché la probabilità che una cosa nello stato v|v\rangle si trovi nello stato v|v\rangle è del 100%. Questa è nota come "condizione di normalizzazione".

Perché è

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

una scelta migliore rispetto, ad esempio, a,

0=(01)?|0\rangle = \begin{pmatrix} 0 \\1 \end{pmatrix}?
  • Non lo è. Non c'è alcun motivo per cui si debba scegliere inizialmente 0=(10)|0\rangle = \begin{pmatrix} 1 \\0 \end{pmatrix}. 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 0|0\rangle rimane in quello stato alla successiva misurazione. Lo stesso vale per 1|1\rangle. Ciò significa che un qubit che si trova in 0|0\rangle ha probabilità zero di essere misurato nello stato 1|1\rangle (a meno di effetti di rumore). La connessione richiesta tra i prodotti interni e le probabilità delle misure ci dice allora che

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

Senza perdita di generalità, possiamo scrivere il vettore di stato 1=(ab)|1\rangle = \begin{pmatrix} a \\ b \end{pmatrix}. Allora possiamo scrivere

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.

Il requisito che P11=1P_{11} = 1, la cosiddetta "condizione di normalizzazione", ci dice che b2=1|b|^2=1. Questo di per sé ci limita a b=eiϕb=e^{i\phi} per ϕR\phi \in \mathbb{R}. Si scopre che ci sono altre ragioni per scegliere b=1b=1 che vanno oltre questa introduzione all'argomento. Per ora, è sufficiente che b=1b=1 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 zz, vorremmo un operatore che descriva esattamente questo: SzS_z. 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 zz 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 ±/2\pm \hbar/2.

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 Sz=(s11s12s21s22)S_z = \begin{pmatrix} s_{11} & s_{12} \\ s_{21} & s_{22}\end{pmatrix}, e possiamo richiedere:

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

Combinando ed estraendo il fattore complessivo di /2\hbar/2, abbiamo

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

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 /2\hbar/2, nel qual caso si tratta dell'operatore "Pauli-z", tipicamente indicato con σz\sigma_z :

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

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 zz 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 0|0\rangle e 1|1\rangle. Abbiamo inizializzato gli stati in centinaia di orientamenti casuali e le misurazioni hanno sempre prodotto o 0|0\rangle o 1|1\rangle. 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

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

(a) Cosa si ottiene agendo con l'operatore SzS_z su questo vettore di stato? (b) Che cosa si ottiene effettuando una singola misura della componente zz dello spin di questa particella? (c) Cosa si ottiene preparando molte particelle identiche a questo stato ed effettuando migliaia di misure della componente zz dello spin?

  • (a) Si ottiene

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

    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 /2\hbar/2.

    (b) Si otterrà |\uparrow\rangle o |\downarrow\rangle. Ciò corrisponde all'osservazione di una proiezione dello spin sull'asse zz di /2\hbar/2 o /2-\hbar/2, rispettivamente. Possiamo anche determinare la probabilità di ogni risultato, poiché

    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}

    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:

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

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 xx e cercheremmo le deviazioni lungo xx sullo schermo. IBM i computer quantistici, tuttavia, sono progettati per effettuare misure lungo un solo asse ( zz ). Per misurare uno stato lungo xx dobbiamo effettuare un "cambio di base". Ciò significa che dobbiamo eseguire un'operazione che porti gli stati lungo xx nella sfera di Bloch a zz, e viceversa. Esistono diversi modi per implementare questo sistema, ma quello preferito è un cancello di Hadamard:

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

Verifica la tua comprensione

Dimostrare che H0=+xH|0\rangle = |+\rangle_x e che H+x=0H|+\rangle_x = |0\rangle

  • 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

Dimostrare che H1=xH|1\rangle = |-\rangle_x e che Hx=1H|-\rangle_x = |1\rangle

  • 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:

Output of the previous code cell

Questo circuito fa ruotare il nostro sistema in modo che le misurazioni (lungo zz ) ci diano informazioni sulle caratteristiche di xx prima della rotazione. Sappiamo già che il computer quantistico inizializza gli stati in 0|0\rangle che corrisponde a |\uparrow\rangle. Vediamo cosa succede quando misuriamo la proiezione dello spin lungo xx per uno stato inizialmente in |\uparrow\rangle. 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 0|0\rangle (o, equivalentemente, uno spin in |\uparrow\rangle ) la probabilità di misurare una proiezione lungo +x+x o x-x è 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 ±x\pm x. Potremmo aspettarci che lo stesso sia vero se partiamo dallo stato 1|1\rangle (o |\downarrow\rangle ). 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:

Output of the previous code cell
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 ±x\pm x. In analogia con le misure lungo zz, potremmo anche sospettare che una particella che collassa in uno stato sicuramente lungo +x+x possa avere probabilità zero di essere successivamente misurata lungo x-x. 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:

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

Output:

{'00': 504, '11': 520}
Output of the previous code cell

Come ci si aspettava, si ottengono risultati in cui la proiezione avviene lungo +x+x e poi di nuovo lungo +x+x, e si hanno risultati in cui la proiezione avviene inizialmente lungo x-x e poi di nuovo lungo x-x. Non ci sono casi in cui la proiezione passa da +x+x a x-x 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 +z+z o z-z hanno il 50% di probabilità di avere una proiezione lungo +x+x e il 50% di avere una proiezione lungo x-x.
  • Gli Stati con una proiezione definita lungo +x+x hanno zero possibilità di scoprire in seguito di avere una proiezione lungo x-x, e viceversa.

Possiamo usare questi risultati per costruire gli stati con una proiezione definita e positiva lungo xx (che chiamiamo +x|+x\rangle ) e quelli con una proiezione definita e negativa lungo xx (che chiamiamo x|-x\rangle ). A partire da questi stati, possiamo costruire la matrice corrispondente a SxS_x, esattamente come abbiamo fatto per SzS_z. Lasciamo questi esercizi all'allievo. Allo stesso modo, si possono costruire esperimenti che effettuano misure lungo l'asse yy, determinare i vettori per +y|+y\rangle e y|-y\rangle, e infine ottenere un'espressione per SyS_y.

Raccogliendo tutti questi vettori e matrici, si ha

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

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 0|0\rangle e 1|1\rangle.
  • 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:

  1. T/F Partendo da osservazioni sperimentali, l'unica scelta valida per un vettore per rappresentare |\uparrow\rangle è (10)\begin{pmatrix}1 \\ 0\end{pmatrix}
  2. T/F Se =(10)|\uparrow\rangle = \begin{pmatrix}1 \\ 0\end{pmatrix}, l'unica scelta per |\downarrow\rangle è (01)\begin{pmatrix}0 \\ 1\end{pmatrix} (fino a una fase globale).
  3. T/F Una particella misurata nello stato 0|0\rangle continuerà a trovarsi nello stato 0|0\rangle nelle successive misurazioni lungo zz.
  4. T/F Una particella misurata nello stato 0|0\rangle continuerà a trovarsi nello stato 0|0\rangle nelle successive misurazioni lungo xx.
  5. T/F Una particella misurata nello stato 0|0\rangle si troverà sempre nello stato +x|+\rangle_x a seguito di successive misurazioni lungo xx.

Domande del moderatore:

  1. Una particella inizialmente in |\uparrow\rangle ha quale probabilità di essere misurata nello stato +x|+x\rangle?

    • a. 0%
    • b. 25%
    • c. Il 50%
    • d. 71%
    • e. 100%
  2. Una particella inizialmente in |\uparrow\rangle ha quale probabilità di essere misurata nello stato |\downarrow\rangle?

    • a. 0%
    • b. 25%
    • c. Il 50%
    • d. 71%
    • e. 100%
  3. Lo stato |\uparrow\rangle di una particella spin-1/2 è più comunemente associato a quale stato di calcolo quantistico?

    • a. +|+\rangle
    • b. |-\rangle
    • c. 0|0\rangle
    • d. 1|1\rangle
    • e. Nessuna delle precedenti

Domande di discussione:

  1. Tre amici discutono di misure e operatori quantistici. L'amico A dice: "Effettuare una misura lungo zz e agire con l'operatore σz\sigma_z 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:

  1. Date le osservazioni sperimentali e la sintassi proposta:

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}

dimostrano che fino ad una fase globale

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

Scegliere α=0\alpha = 0 per ottenere il risultato standard.

  1. Date le osservazioni sperimentali e la sintassi proposta:

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}

E utilizzando il risultato del problema 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

dimostrano che fino ad una fase globale

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

Riconoscimenti

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

Questa pagina è stata utile?
Segnala un bug, un errore di battitura o richiedi contenuti su GitHub.