Das Stern-Gerlach-Experiment mit Quantencomputern
Für dieses Qiskit-in-Classrooms-Modul benötigst du eine funktionierende Python-Umgebung mit den folgenden installierten Paketen:
qiskitv2.1.0 oder neuerqiskit-ibm-runtimev0.40.1 oder neuerqiskit-aerv0.17.0 oder neuerqiskit.visualizationnumpypylatexenc
Hinweise zur Einrichtung und Installation der oben genannten Pakete findest du im Qiskit-Installationshandbuch. Um Jobs auf echten Quantencomputern ausführen zu können, müssen Studierende ein Konto bei IBM Quantum® anlegen. Die Schritte dazu sind im Leitfaden IBM Cloud-Konto einrichten beschrieben.
Dieses Modul wurde getestet und hat 2 Sekunden QPU-Zeit benötigt. Dies ist nur eine Schätzung. Dein tatsächlicher Verbrauch kann abweichen.
# Added by doQumentation — required packages for this notebook
!pip install -q numpy qiskit qiskit-aer qiskit-ibm-runtime
# Uncomment and modify this line as needed to install dependencies
#!pip install 'qiskit>=2.1.0' 'qiskit-ibm-runtime>=0.40.1' 'qiskit-aer>=0.17.0' 'numpy' 'pylatexenc'
Schau dir unten die Modul-Einführung von Dr. Katie McCormick an, oder klicke hier, um sie auf YouTube zu sehen.
Hintergrund
In den frühen 1900er Jahren häuften sich die Belege für quantisiertes Verhalten auf atomarer Skala. Viele erfolgreiche Deutungen von Messdaten – wie Max Plancks Erklärung der Ultraviolettkatastrophe – sowie Experimente wie das von Otto Stern und Walther Gerlach waren entscheidend dafür, die Welt davon zu überzeugen, dass ein Quantenmechanikrahmen notwendig ist und dass bestimmte physikalische Phänomene quantisiert sind. Beim Stern-Gerlach-Experiment (von Stern 1921 konzipiert und 1922 von Stern und Gerlach durchgeführt) bestand das Ziel darin, die Quantisierung des Drehimpulses in Atomen nachzuweisen.
Damals war das Bohr-Sommerfeld-Modell ein verbreitetes Atommodell. Es stellte eine Erweiterung des Bohr-Modells dar und sagte – ähnlich wie dieses – voraus, dass Elektronen in bestimmten quantisierten Bahnen existieren, ähnlich wie Planeten, die die Sonne umkreisen.

Obwohl sich diese Behandlung letztendlich als unzureichend für die Erklärung des quantenmechanischen Verhaltens des Atoms erweisen würde, sagte sie im Großen und Ganzen viele beobachtete Phänomene voraus, wie etwa die diskreten Spektrallinien von Atomen. Die quantisierten Elektronenbahnen mit spezifischen Energien entsprechen quantisierten Drehimpulswerten. Es ist dieser Bahndrehimpuls, den Stern und Gerlach in ihrem Experiment beobachten wollten – wenngleich das Experiment auf jede Art von quantisiertem Drehimpuls, einschließlich Spin, anwendbar ist. Oft wird das Stern-Gerlach-Experiment im Zusammenhang mit Spins erwähnt. Beim ursprünglichen Experiment stand der Bahndrehimpuls im Mittelpunkt, einfach weil George Uhlenbeck und Samuel Goudsmit die Existenz des Spins erst 1925 theoretisch beschreiben sollten.
Unabhängig von der Art des Drehimpulses besitzt eine Ladung mit Drehimpuls ein magnetisches Moment. In der klassischen Behandlung der Kreisbewegung würde man erwarten, dass ein Teilchen mit Ladung , Masse und Drehimpuls ein magnetisches Moment besitzt, das durch folgende Formel beschrieben wird:
Es stellt sich heraus, dass für den quantenmechanischen Drehimpuls nahezu dieselbe Formel gilt, mit dem Vorbehalt, einen numerischen Faktor hinzuzufügen, der mit der Art des Drehimpulses zusammenhängt – den sogenannten g-Faktor . Wenn man verschiedene Drehimpulsarten kombiniert oder auf einen beliebigen Typ verallgemeinert, verwendet man häufig anstelle von , sodass man schreibt:
Für klassische Objekte gilt . Für Elektronen gilt , und es gibt viele verschiedene Werte für unterschiedliche Atomkerne und subatomare Teilchen. Der wesentliche Punkt hier ist: Quantisierter Drehimpuls bedeutet ein quantisiertes magnetisches Moment!
Dieses magnetische Moment erfährt in einem Magnetfeld ein Drehmoment:
Und in einem Magnetfeld mit einem nicht verschwindenden Gradienten erfährt es eine Kraft:
Wir werden den obigen Ausdruck häufig komponentenweise betrachten, daher ist es hilfreich, an seine -Komponente zu denken:
Durch Kombination der Ausdrücke ergibt sich:
Stern und Gerlach kannten den -Faktor noch nicht, aber selbst mit ihm im Ausdruck erhalten wir eine Kraft, die gleich mehreren bekannten oder messbaren Konstanten multipliziert mit einem Drehimpuls ist. Durch Verwendung eines Magnetfelds mit einem bekannten Gradienten und Messung der Ablenkung eines Teilchens beim Durchgang durch das Feld sollten wir also Informationen über den Drehimpuls erhalten. Das ist der Kern des Stern-Gerlach-Experiments.

Abb. Stern-Gerlach-Experiment[1]: Silberatome, die durch ein inhomogenes Magnetfeld fliegen und je nach Spin nach oben oder unten abgelenkt werden. Klassisch würden wir eine kontinuierliche Verteilung auf dem Schirm erwarten, aber im Experiment sehen wir zwei deutlich getrennte Punkte.
Neutrale Silberatome wurden in einem Ofen erhitzt. Als ein Strahl von Silberatomen aus dem Ofen austrat, wurden Strahlblenden verwendet, um nur Atome auszuwählen, die nahe der Mitte des inhomogenen Magnetfelds verlaufen. Natürlich weichen einige Atome etwas nach links oder rechts ab und erfahren einen schwächeren Feldgradienten oder gar keinen. Daher machen wir uns nicht allzu viele Gedanken über das Verhalten von Atomen weit links oder rechts. Wir interessieren uns dafür, was mit den Atomen geschieht, die durch die Mitte des Kanals fliegen, wo der Magnetfeldgradient eine Kraft erzeugt, die die Atome ausschließlich in -Richtung ablenkt.
Was sollten wir klassisch erwarten?
Wie würden sich diese Atome verhalten, wenn sie genau wie massige, klassische Magneten wären? Du kannst das Experiment gedanklich durchführen. Stell dir vor, du schießt winzige Neodym-Magneten an einem großen, starken Magneten vorbei. Die Ausrichtung der winzigen Magneten ist zufällig. Aber während sie am großen Magneten vorbeifliegen, richten sie sich schnell mit dem Feld aus und werden vom großen Magneten angezogen. Die überwiegende Mehrheit der winzigen Magneten wird in Richtung des großen Magneten abgelenkt. Der sehr aufmerksame Beobachter könnte fragen: „Und was ist mit der Energieerhaltung?"
Tatsächlich hat ein magnetisches Moment in einem äußeren Magnetfeld eine damit verbundene potentielle Energie:
Wenn sich also ein magnetisches Moment im äußeren Magnetfeld dreht, gäbe es eine Energieänderung von:
Im Spezialfall eines kleinen Magneten, der genau entgegengesetzt zum äußeren Feld ausgerichtet ist und sich umkehrt, um sich damit auszurichten, entspräche dies einer Abnahme der potentiellen Energie:
Wo geht diese Energie hin? Ein klassischer Magnet wie ein kleiner Neodym-Kühlschrankmagnet hat viele Teilchen und kann nahezu jede Energiemenge als Wärme abgeben. Die anfänglichen und endgültigen Winkel zwischen dem magnetischen Moment und dem äußeren Magnetfeld könnten beliebig sein, und zumindest die anfängliche Ausrichtung wäre zufällig. Daher würde für jeden kleinen Magneten eine unterschiedliche Energiemenge als Wärme abgegeben. Klassisch ist das kein Problem, da ein Ensemble klassischer Teilchen jede Energiemenge als Wärme abgeben kann.
Was sollten wir erwarten, wenn wir klassisches Denken auf atomare Skalen anwenden?
Für Magneten auf atomarer Skala gilt das zumindest nicht in gleicher Weise, da weniger Teilchen im Spiel sind und weniger Freiheitsgrade vorhanden sind, über die Energie abgeführt werden kann. Die frühen Quantenmechaniktheorien schlugen darüber hinaus vor, dass die Energie, die von einem einzelnen Teilchen – wie dem Elektron – absorbiert werden kann, quantisiert wäre, d. h. ein Elektron könnte nur einige wenige spezifische Energiemengen aufnehmen. Da die zufälligen Anfangsausrichtungen die Abgabe zufälliger Energiemengen erfordern würden, sollte dies für ein System mit quantisierten Energieniveaus nicht möglich sein. Die überschüssige Energie könnte nicht als Wärme abgegeben werden. Was würde stattdessen passieren?
Überprüfe dein Verständnis
Lies die folgenden Fragen, denke über deine Antworten nach, und klicke dann auf die Dreiecke, um die Lösungen zu sehen.
Erkläre, was deiner Meinung nach in einer Situation wie der oben beschriebenen passieren würde. Das heißt: Du hast einen atomar kleinen Magneten, der keine Energie als Wärme abführen kann. Daher muss jede anfängliche magnetische potentielle Energie im System verbleiben. Dennoch wird durch ein äußeres Magnetfeld ein Drehmoment angelegt, das versucht, den kleinen Magneten mit dem äußeren Feld auszurichten. Was passiert?
Antwort:
Das winzige magnetische Moment würde sich in Richtung der Ausrichtung mit dem äußeren Feld drehen. Aber sobald es sich kurzzeitig ausrichtet, hätte es kinetische Rotationsenergie, die es über das Feld hinaus und wieder aus der Ausrichtung heraus weiterdrehen würde. Dieses Verhalten ist sogar bei großen klassischen Magneten zu beobachten. In diesen klassischen Systemen hört die Schwingung des kleinen magnetischen Moments jedoch irgendwann auf, da Energie als Wärme dissipiert wird. Aber in einem System ohne einen solchen Dissipationsmechanismus sollte die Schwingung auf unbestimmte Zeit andauern.
Welche Verteilung magnetischer Teilchen würdest du angesichts des in der obigen Antwort erwarteten Verhaltens auf dem Schirm erwarten?
Antwort:
Eine glatte Verteilung von einer maximalen Ablenkung in Richtung der stärkeren Seite des Magnetfelds (jene Teilchen, die zufällig mit dem äußeren Feld ausgerichtet begannen) bis zu einer maximalen Ablenkung in Richtung der schwächeren Seite des Felds (jene Teilchen, die entgegengesetzt zum äußeren Feld ausgerichtet begannen), und jede Ablenkung dazwischen, die jeder anfänglichen Ausrichtung zwischen diesen Extremen entspricht.

Was würde die Quantenmechanik vorhersagen?
Vielleicht das Seltsamste aller Möglichkeiten wäre folgendes: Was wenn der Drehimpuls des Elektrons quantisiert wäre, und auch seine Projektion auf eine Achse quantisiert wäre? Die Quantisierung des Drehimpulses als Betrag ist interessant, aber man könnte versuchen, sie durch klassische Intuition zu erklären – so wie Planetenbahnen in feste Bahnen übergingen, die sich nicht kreuzen, und nur bestimmte erlaubte Drehimpulse haben. Aber was wenn dieser Drehimpulsvektor nur genau entlang oder genau entgegengesetzt zu zeigen könnte, aber keine andere Komponente entlang hätte? Was wenn er dann, gemessen entlang einer anderen Richtung, nur vollständig entlang oder vollständig entgegengesetzt zu zeigen könnte, und nichts dazwischen? Das wäre seltsam auf eine Weise, die jede klassische Intuition verwirrt.
Überprüfe dein Verständnis
Lies die folgende Frage, denke über deine Antwort nach, und klicke dann auf das Dreieck, um die Lösung zu sehen.
Welche Art von Teilchenverteilung auf einem Schirm würdest du in diesem letzten Fall erwarten, in dem die Projektion des Drehimpulses entlang der Feldrichtung quantisiert ist? Betrachte dabei entweder nur Teilchen, die genau durch die Mitte des Geräts verlaufen, oder schließe auch jene ein, die leicht seitlich abweichen, wo der Gradient schwächer ist. Sei dabei explizit.
Antwort:
Die Teilchen in der Mitte des Geräts würden ein einziges inhomogenes Feld erleben und alle so gemessen werden, dass ihre magnetischen Momente eine von zwei Ausrichtungen haben. Sie würden also entweder maximal mit dem Gradienten oder maximal gegen den Gradienten abgelenkt, und nichts dazwischen. Natürlich wäre die Ablenkung auf beiden Seiten, wo der Gradient schwächer ist, kleiner. Bei sehr großen lateralen Positionen könnten sie sich vollständig außerhalb des Gradienten befinden, und es könnte nur einen einzigen Bereich unabgelenkter Teilchen geben.

Wie helfen uns Qubits, dies zu testen?
Die meisten Quantencomputer verwenden „Qubits" – die quantenmechanischen Analoga klassischer Bits. Genauer gesagt sind sie als Zwei-Niveau-Systeme konzipiert, analog zu den „Ein"/„Aus"-Zuständen klassischer Bits. Es gibt zwar Paradigmen für das Quantencomputing, die Drei-Niveau-Systeme (sogenannte „Qutrits") oder Viel-Niveau-Systeme (sogenannte „Qudits") nutzen. Aber der Großteil der Arbeit konzentriert sich auf Qubits. Insbesondere verwenden IBM®-Quantencomputer sogenannte Fixed-Frequency-Transmon-Qubits. Diese unterscheiden sich erheblich vom Bahn- oder Spin-Drehimpuls von Atomen. Aber wie der Spin eines Elektrons sind IBM®-Qubits quantenmechanische Systeme, die mit Licht interagieren können und an denen Messungen vorgenommen werden können. Tatsächlich findet man häufig Analogien zwischen den Zuständen des quantenmechanischen Spins und den Rechenzuständen eines Qubits. Beispielsweise wird der „Spin-up"-Zustand oft mit dem Rechenzustand 0 und „Spin-down" mit dem Rechenzustand 1 assoziiert:
Diese Ähnlichkeiten können wir nutzen, um quantenmechanisches Verhalten in IBM-Quantencomputern zu beobachten, das das quantenmechanische Verhalten von Bahn- oder Spin-Drehimpuls in Atomen nachahmt. Wir werden ähnliche Beobachtungen mithilfe von Linearkombinationen dieser Zustände machen, die es uns ermöglichen, die Diskussion auf den Drehimpuls in jeder beliebigen Richtung auszuweiten.
Erstes Experiment: Eine einzelne Messung
In diesem ersten Experiment und im gesamten Modul werden wir ein Framework für das Quantencomputing namens „Qiskit Patterns" verwenden, das Arbeitsabläufe in folgende Schritte unterteilt:
- Schritt 1: Klassische Eingaben auf ein Quantenproblem abbilden
- Schritt 2: Problem für die Quantenausführung optimieren
- Schritt 3: Mit Qiskit Runtime Primitives ausführen
- Schritt 4: Nachbearbeitung und klassische Analyse
Wir werden diese Schritte im Allgemeinen befolgen, auch wenn wir sie nicht immer explizit benennen.
Schritt 1: Klassische Eingaben auf ein Quantenproblem abbilden
Hier sind die klassischen Eingaben die Ausrichtungen eines Spins vor der Messung in einem Stern-Gerlach-Gerät. Mach dir nicht zu viele Gedanken über die genaue Beschaffenheit des Quantenzustands vor der Messung. Das ist Gegenstand eines anderen Qiskit-Classrooms-Moduls über das Bellsche Theorem.
Beachte, dass IBM-Quantencomputer Zustände entlang der -Achse messen. Dieses erste Experiment ähnelt daher sehr dem Stern-Gerlach-Experiment mit dem Magnetfeldgradienten entlang . Wir werden später sehen, wie das System geändert werden kann, um entlang anderer Richtungen zu messen.
Beginnen wir mit der Erstellung des Analogons eines Spinzustands, also einer Mischung aus und bzw. aus und . Wir haben einige Anfangswerte vorgeschlagen. Probiere aber gerne andere Werte oder sogar zufällige Werte aus.
import random
from numpy import pi
import numpy as np
# Use these lines to choose your own arbitrary state vector and normalize it.
# a = 2
# b = (1+1j)
# norm = np.sqrt(a*np.conjugate(a)+b*np.conjugate(b))
# a = a/norm
# b = b/norm
# print(a,b)
# Use these lines if you would rather look at at random spin orientations.
a = random.random()
b = random.random()
norm = np.sqrt(a * np.conjugate(a) + b * np.conjugate(b))
a = a / norm
b = b / norm
print(a, b)
0.7032089086145691 0.7109832845047109
Jetzt verwenden wir die obigen Winkel als Parameter in einem Quantum Circuit. Da wir jeweils nur ein Teilchen betrachten, verwenden wir in unserem Circuit nur ein Qubit und benötigen nur ein klassisches Register.
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")
Schritt 2: Problem für die Quantenausführung optimieren
Um unser Experiment auf einem echten Quantencomputer auszuführen, müssen wir den Qiskit Runtime Service laden und einen Quantencomputer (oder ein „Backend") auswählen. Im Folgenden wählen wir einfach den am wenigsten ausgelasteten Quantencomputer aus, der uns zur Verfügung steht.
Unten findest du Code zum erstmaligen Speichern deiner Anmeldedaten. Stelle sicher, dass du diese Informationen nach dem Speichern in deiner Umgebung aus dem Notebook löschst, damit deine Zugangsdaten nicht versehentlich weitergegeben werden, wenn du das Notebook teilst. Weitere Hinweise findest du unter IBM Cloud-Konto einrichten und Dienst in einer nicht vertrauenswürdigen Umgebung initialisieren.
# Load the Qiskit Runtime service
from qiskit_ibm_runtime import QiskitRuntimeService
# Syntax for first saving your token. Delete these lines after saving your credentials.
# QiskitRuntimeService.save_account(channel='ibm_quantum_platform', instance = '<YOUR_IBM_INSTANCE_CRN>', token='<YOUR-API_KEY>', overwrite=True, set_as_default=True)
# service = QiskitRuntimeService(channel='ibm_quantum_platform')
# Syntax for specifying a channel and instance (if you need to change from the default set above)
# service = QiskitRuntimeService(channel='<channel name here>', instance="<your instance name here>")
# Load saved credentials
service = QiskitRuntimeService()
# Load the Runtime primitive and session
from qiskit_ibm_runtime import Session, SamplerV2 as Sampler
# Use the least busy backend, specify options as needed
# backend = service.least_busy(operational=True, simulator=False, min_num_qubits = 127)
backend = service.least_busy()
print(backend.name)
ibm_sherbrooke
Nun müssen wir den Circuit transpilieren, d. h. unseren Circuit auf die Basistransformationen des gewählten Quantencomputers abbilden und für die Ausführung auf diesem Quantencomputer optimieren.
# 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)
Schritt 3: Mit Qiskit Runtime Primitives ausführen
Jetzt möchten wir dies auf einem echten Quantencomputer ausführen. Die gesamte dafür notwendige Syntax befindet sich im folgenden Code-Block. Wenn du dein zugeteiltes Kontingent an echter Quantencomputer-Zeit aufgebraucht hast oder keine Internetverbindung hast, kannst du den nächsten Code-Block auskommentieren, der den Code auf einem lokalen Simulator ausführt.
# 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()
Verwende den folgenden Code, wenn du das Experiment nicht auf einem echten Quantencomputer ausführen kannst.
# 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()
Schritt 4: Nachbearbeitung und klassische Analyse
Bei diesem sehr einfachen Experiment besteht die klassische Analyse lediglich darin, das Versuchsergebnis zu visualisieren.
from qiskit.visualization import plot_histogram
print("counts = ", counts)
plot_histogram(counts)
counts = {'0': 1}
Wir haben eine Messung durchgeführt und dabei „0" erhalten. Das überrascht uns nicht weiter. Wir wissen, dass wir einen Quantencomputer aus Qubits verwenden, und sind es gewohnt, dass klassische Bits entweder 0 oder 1 zurückliefern. Bedenke aber: Dies ist das quantencomputerbasierte Äquivalent der Experimente, die mit Teilchen mit magnetischen Momenten durchgeführt wurden. Hätten wir eine gleichmäßige Verteilung zwischen 0 und +1 erwartet, wäre es vielleicht tatsächlich überraschend gewesen, dass wir beim ersten Mal einen Extremwert erhalten haben. Genau diese überraschende Quantisierung der Ergebnisse im Stern-Gerlach-Experiment hat uns zu einem besseren Verständnis der Natur geführt – und das hat uns schließlich dabei geholfen, Quantencomputer zu bauen.
Schauen wir uns an, was passiert, wenn wir ein Ensemble von Messungen durchführen.
Zweites Experiment: Viele Teilchen messen
Um Statistiken über viele solcher Messungen zu sammeln, müssen wir die Schritte 1 und 2 nicht wiederholen. Wir können einfach die Anzahl der Shots in unserem Experiment erhöhen. Du kannst die Anzahl der Shots in der folgenden Instanz von Schritt 3 gerne anpassen.
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()
Wenn du keinen echten Quantencomputer verwenden kannst, kommentiere wie beim ersten Experiment den obigen Block ein und ändere einfach num_shots = 1 in num_shots = 100 oder mehr.
plot_histogram(counts)
Wir sehen, dass manchmal 0 und manchmal 1 gemessen wird. Wichtig: Wir messen nie etwas anderes! Du könntest die Anzahl der Shots verändern und feststellen, dass die Wahrscheinlichkeit, 0 oder 1 zu messen, bei verschiedenen Läufen mit unterschiedlichen Shot-Zahlen recht konsistent bleibt. Irgendetwas an der Präparation des Zustands scheint also die Wahrscheinlichkeit der Messergebnisse zu bestimmen, obwohl jede einzelne Messung entweder 0 oder 1 ergeben kann.
Drittes Experiment: Zufällige Spins in einem Ofen
Im Stern-Gerlach-Experiment konnten die Forschenden nicht festlegen, unter welchem Winkel ein Drehimpulsvektor aus dem Ofen austreten würde. Die Orientierungen waren zufällig (oder sogar noch rätselhafter – siehe das Qiskit-Klassenzimmer-Modul zum Bell-Theorem). Ein vernünftiges Äquivalent dieses Experiments wäre es, die Zustände unseres Qubits zufällig zu initialisieren und viele Messungen durchzuführen.
Schritt 1: Klassische Eingaben auf ein Quantenproblem abbilden
Der Circuit, den wir konstruieren möchten, ist derselbe wie zuvor. Der einzige Unterschied besteht darin, dass wir den Circuit diesmal mit freien Parametern und aufbauen. Diesen Parametern werden dann für jeden neuen Durchlauf numerische Werte zugewiesen.
# 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")
Einen Quantencircuit für nur einen einzigen Shot auszuführen und das für viele zufällige Konfigurationen zu wiederholen, ist ein ungewöhnlicher Workflow für einen Quantencomputer. Es ist durchaus möglich, aber der Einfachheit halber verwenden wir hier einen lokalen Simulator.
# 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)
Wir sehen also, dass der zufällige Anfangszustand der Qubits (entsprechend den zufälligen Orientierungen des Drehimpulses im Stern-Gerlach-Experiment) ähnlich viele 0- und 1-Zustände liefert (ähnlich wie gleich viele Spin-up- und Spin-down-Zustände). Genau das hat das ursprüngliche Stern-Gerlach-Experiment gezeigt.
Viertes Experiment: Wiederholte Messungen
Startet ein Qubit in einem zufälligen Zustand, gibt es eine ungefähr 50/50-Chance, einen der beiden Extremwerte zu messen. Aber was passiert mit dem Zustand des Qubits (oder dem Drehimpuls des Teilchens) nach der Messung? Um das herauszufinden, müssen wir einen Circuit definieren, der mehrere Messungen desselben Qubits ermöglicht. Definieren wir dazu einen geeigneten Circuit. Da wir die Möglichkeit haben wollen, sowohl als auch zu messen, brauchen wir etwas, das den Anfangszustand des Qubits aus dem Standard--Zustand herausdreht. In diesem Fall verwenden wir ein Hadamard-Gate , da gilt: . Beachte, dass standardmäßig beide Messungen entlang der -Achse erfolgen.
from qiskit import QuantumCircuit
# Define registers
qr = QuantumRegister(1, "q")
cr = ClassicalRegister(2, "c")
qc = QuantumCircuit(qr, cr)
# Initialize the qubit to be a mixture of 0 and 1 states.
qc.h(0)
# Add a first measurement
qc.measure(0, 0)
qc.barrier()
# Add a second measurement
qc.measure(0, 1)
qc.draw("mpl")
qc_ibm = pm.run(qc)
# Step 3: Run the job
num_shots = 1000
dist = sampler.run([qc_ibm], shots=num_shots).result()
# To run on a simulator, uncomment the line below and comment out the line above.
# dist = sampler_sim.run([qc_ibm], shots=num_shots).result()
counts = dist[0].data.c.get_counts()
print(counts)
{'00': 497, '11': 498, '01': 3, '10': 2}
# Step 4: Post-process
plot_histogram(counts)
In der obigen Abbildung sind die Balken mit „00", „01" usw. beschriftet. Diese Zahlen stehen dabei für „2. Ergebnis, 1. Ergebnis". „00" bedeutet also, dass beide Messungen den Zustand ergaben, und „01" bedeutet, dass die erste Messung und die zweite Messung ergab. Die weitaus meisten Qubits wurden entweder zweimal im Zustand oder zweimal im Zustand gemessen. Es kam sehr selten vor, dass ein Qubit zunächst in einem Zustand gemessen wurde und dann in einem anderen – die wenigen Fälle, in denen das passierte (~1 %), sind auf Rauschen zurückzuführen. Dieses Rauschen wurde hier so simuliert, dass es dem Verhalten des echten Quantensystems entspricht. Diese beobachtete Korrelation zwischen aufeinanderfolgenden Messungen wird auch bei Stern-Gerlach-artigen Messungen an Teilchen mit Spin-Drehimpuls beobachtet. Wird ein Teilchen als „Spin-up" gemessen, ergibt eine kurz darauf folgende Messung erneut „Spin-up" (abgesehen von kleinen Abweichungen durch Rauschen).
Das mag trivial erscheinen. Denn wenn ein Qubit in einem bestimmten Zustand gemessen wurde und ich es kurz darauf erneut messe – warum sollte es sich verändert haben? Wenn wir uns aber wirklich auf diese Feinheit einlassen, hilft uns das vielleicht dabei, passende mathematische Werkzeuge zur Beschreibung dieses Phänomens zu finden.
Analyse der bisherigen Experimente
Fassen wir einige Beobachtungen aus unseren bisherigen Experimenten zusammen:
- Die Messung eines quantenmechanischen Systems liefert nur einen der „erlaubten Werte". Bei Zwei-Niveau-Systemen wie Qubits oder Spin-1/2-Teilchen liefert eine Messung immer nur eines der beiden binären Ergebnisse.
- Wenn wir den Zustand unseres binären Systems zufällig initialisieren (wie Spin-1/2-Teilchen, die aus einem Ofen austreten), sind beide binären Messergebnisse möglich.
- Wurde eine Messung durchgeführt und der Zustand des Systems ist bekannt, ändert eine Wiederholung der Messung derselben physikalischen Observablen den Zustand nicht! Das heißt: Erhalten wir einmal den Zustand 0, befindet sich das System bei erneuter Messung immer noch in diesem Zustand (abgesehen von geringem Systemrauschen von ~0,1 % bis 1 %).
Beachte ausdrücklich, dass wir noch nicht auf den probabilistischen Charakter der Quantenmechanik eingegangen sind und noch nichts darüber gesagt haben, dass der Zustand auf einen Eigenzustand „kollabiert". Allein auf Basis der obigen Beobachtungen könnte man versucht sein, eine mathematische Operation zu suchen, die eine bestimmte Menge quantenmechanischer Zustände höchstens um eine Konstante verändert: – schließlich liefert das zweimalige Messen entlang dasselbe Ergebnis. Letztendlich kann dieser Ansatz nicht alle Verhaltensweisen beschreiben, die wir noch sehen werden. Aber er kann einiges erklären, also verfolgen wir ihn noch ein Stück weiter.
Eine solche Operation existiert tatsächlich. Eine Matrixoperation auf bestimmte Vektoren verändert diese Vektoren, während eine Matrixoperation auf andere Vektoren (Eigenvektoren) diese Vektoren höchstens um eine Konstante verändert. Betrachte zum Beispiel die Matrix und den Vektor :
und
Es gilt:
Für andere Vektoren, etwa , gilt jedoch:
Wir könnten versuchen, den Spin eines Teilchens durch eine Matrix darzustellen, und die Zustände der Teilchen nach der Messung durch einen Vektor – den sogenannten „Zustandsvektor". Es ist überhaupt nicht offensichtlich, welche Werte in einer solchen Matrix oder einem solchen Zustandsvektor stehen sollten. Die einzige Eigenschaft aus den bisherigen Messungen, die wir zur Kennzeichnung von Zuständen nutzen könnten, wäre die Wahrscheinlichkeit, 0 oder 1 zu messen (im Kontext von Spin-1/2-Teilchen: „Spin-up" oder „Spin-down"). Wir sollten bedenken, dass die Einträge in den Zustandsvektoren mit dieser Wahrscheinlichkeit zusammenhängen sollten – sei es direkt als Wahrscheinlichkeit, als „Wahrscheinlichkeitsamplitude" (d. h. wir quadrieren den Eintrag, um die Wahrscheinlichkeit zu erhalten) oder auf andere Weise. An diesem Punkt wissen wir noch nicht, ob die Einträge in diesen Matrizen rein reell, komplex oder etwas anderes sein sollen. Um auf der sicheren Seite zu sein, wollen wir ein Framework entwickeln, in dem Vektoren und Matrizen Folgendes erfüllen:
- Die Matrixoperatoren sollen so weit wie möglich mit dem Experiment verknüpft sein. So könnten wir beispielsweise die Eigenwerte einer Spin-Matrix mit den experimentell beobachteten Spinprojektionen in Verbindung bringen.
- Die Zustandsvektoren sollen mit der Wahrscheinlichkeit auf folgende Weise verknüpft sein: Befindet sich ein Teilchen im Zustand , so ist die Wahrscheinlichkeit, dass eine anschließende Messung das Teilchen im Zustand findet, .
Das lässt uns viel Freiheit bei der Entwicklung unserer ersten Matrizen. So könnten wir naiv versuchen:
Dabei bedeutet , dass es Zustände in Quantencomputern und in Spin-1/2-Systemen gibt, die einander sehr ähnlich sind und häufig aufeinander abgebildet werden. Sie sind natürlich nicht identisch, da sie sich auf unterschiedliche Systeme beziehen. Aber die Algebra, die diese Zwei-Zustands-Systeme beschreibt, könnte denselben Regeln folgen (Spoiler: das tut sie!). Diese zufällige Wahl hat bereits eine schöne Eigenschaft: Es gilt nämlich
Das heißt: Befindet sich ein Teilchen bereits im Zustand , beträgt die Wahrscheinlichkeit, dass eine anschließende Messung ebenfalls ergibt, 1 (abgesehen von Rauscheffekten). Das ist ausgezeichnet, denn wir haben bereits gesehen, dass ein Zustand, der sich im Zustand 0 oder „Spin-up" befindet, bei anschließender Messung dort verbleibt. Die obige Wahrscheinlichkeit sollte tatsächlich 100 % betragen.
Verständnisfragen
Lies die folgenden Fragen, überlege dir deine Antworten und klicke dann auf die Dreiecke, um die Lösungen aufzudecken.
Warum ist
eine bessere Wahl als zum Beispiel
Antwort:
Der Versuch, die Messwahrscheinlichkeit mit dem quadrierten Skalarprodukt zu verknüpfen, erfordert, dass der Betrag jedes Vektors gleich 1 ist. Das heißt, für alle , da die Wahrscheinlichkeit, dass ein Teilchen im Zustand sich im Zustand befindet, 100 % beträgt. Dies wird als „Normierungsbedingung" bezeichnet.
Warum ist
eine bessere Wahl als zum Beispiel
Antwort:
Das ist sie nicht. Es gibt keinen Grund, warum wir zunächst wählen müssen. Es handelt sich vielmehr um eine Konvention. Hat man diese Wahl jedoch einmal getroffen, schränkt sie bestimmte weitere Entscheidungen ein. Siehe dazu weiter unten.
Erinnere dich: In den Experimenten oben haben wir festgestellt, dass ein Qubit, das sich zunächst im Zustand befand, bei einer anschließenden Messung in diesem Zustand verbleibt. Dasselbe gilt für . Das bedeutet, dass ein Qubit im Zustand die Wahrscheinlichkeit null hat, im Zustand gemessen zu werden (abgesehen von Rauscheffekten). Unsere geforderte Verknüpfung zwischen Skalarprodukten und Messwahrscheinlichkeiten sagt uns dann, dass
Ohne Beschränkung der Allgemeinheit können wir den Zustandsvektor schreiben. Dann gilt:
Die Forderung , die sogenannte „Normierungsbedingung", ergibt . Das allein beschränkt uns eigentlich nur auf für . Es gibt noch andere Gründe für die Wahl , die über diese Einführung hinausgehen. Für jetzt genügt es festzuhalten, dass eine zulässige Lösung ist.
Wir sind in unserer Analyse schon recht weit gekommen. Die Wahl einer Form für unsere Zustandsvektoren ermöglicht es uns, eine Matrix zu konstruieren, die etwas über die physikalischen Phänomene aussagt, die hier wirksam sind. Da das ursprüngliche Stern-Gerlach-Experiment eine Aufspaltung der Trajektorien auf der Grundlage der Spin-Drehimpulskomponenten entlang der -Achse gemessen hat, möchten wir einen Operator, der genau das beschreibt: . Eine weitere wesentliche Verbindung zum Experiment besteht darin, dass wir aus dem Ablenkungsbetrag, der Flugzeit und der bekannten magnetischen Feldstärke die Größe der -Komponente des Spins bestimmen können. Obwohl dies viele Annahmen über die Präzision des Versuchsaufbaus erfordert, wollen wir hier lediglich wiederholen, dass die gemessenen -Komponenten des Spin-Drehimpulses betragen.
Wir suchen also eine Matrix mit reellen Eigenwerten (erfüllt von hermiteschen Matrizen), deren Eigenwerte den experimentell beobachteten Spinkomponenten entsprechen. Ohne Beschränkung der Allgemeinheit können wir schreiben und fordern: