Zum Hauptinhalt springen

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:

  • qiskit v2.1.0 oder neuer
  • qiskit-ibm-runtime v0.40.1 oder neuer
  • qiskit-aer v0.17.0 oder neuer
  • qiskit.visualization
  • numpy
  • pylatexenc

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.

Diagramm des Bohr-Sommerfeld-Modells. Ein zentraler Punkt repräsentiert den Atomkern. Kreise oder Ellipsen um diesen Punkt stellen Atomorbitale dar, die Planetenbahnen um die Sonne sehr ähneln. Bahnen mit höherer Energie liegen weiter vom Kern entfernt.

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 qq, Masse mm und Drehimpuls L\vec{L} ein magnetisches Moment μ\mu besitzt, das durch folgende Formel beschrieben wird:

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

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 gg. Wenn man verschiedene Drehimpulsarten kombiniert oder auf einen beliebigen Typ verallgemeinert, verwendet man häufig J\vec{J} anstelle von L\vec{L}, sodass man schreibt:

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

Für klassische Objekte gilt g=1g=1. Für Elektronen gilt g2g\approx 2, 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:

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

Und in einem Magnetfeld mit einem nicht verschwindenden Gradienten erfährt es eine Kraft:

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

Wir werden den obigen Ausdruck häufig komponentenweise betrachten, daher ist es hilfreich, an seine zz-Komponente zu denken:

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

Durch Kombination der Ausdrücke ergibt sich:

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

Stern und Gerlach kannten den gg-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.

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.

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

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

Wenn sich also ein magnetisches Moment im äußeren Magnetfeld dreht, gäbe es eine Energieänderung von:

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

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:

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

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.

Diagramm eines Teilchenstrahls, der durch einen Magneten geleitet wird. Die Teilchen werden in unterschiedlichem Ausmaß entlang der Richtung des Magnetfelds abgelenkt. Wenn sie auf einen entfernten Schirm treffen, bilden sie eine Linie.

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 zz oder genau entgegengesetzt zu zz zeigen könnte, aber keine andere Komponente entlang zz hätte? Was wenn er dann, gemessen entlang einer anderen Richtung, nur vollständig entlang xx oder vollständig entgegengesetzt zu xx 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.

Diagramm eines Teilchenstrahls, der entweder nach oben oder unten abgelenkt wird und auf einen von zwei Punkten auf einem Schirm trifft, ohne Teilchen zwischen diesen beiden Maxima

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:

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

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 zz-Achse messen. Dieses erste Experiment ähnelt daher sehr dem Stern-Gerlach-Experiment mit dem Magnetfeldgradienten entlang zz. 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 |\uparrow\rangle und |\downarrow\rangle bzw. aus 0|0\rangle und 1|1\rangle. 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")

Ausgabe der vorherigen Code-Zelle

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}

Output of the previous code cell

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)

Output of the previous code cell

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 θ\theta und ϕ\phi 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")

Output of the previous code cell

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)

Output of the previous code cell

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 0|0\rangle als auch 1|1\rangle zu messen, brauchen wir etwas, das den Anfangszustand des Qubits aus dem Standard-0|0\rangle-Zustand herausdreht. In diesem Fall verwenden wir ein Hadamard-Gate HH, da gilt: H0=12(0+1)H|0\rangle = \frac{1}{\sqrt{2}}(|0\rangle+|1\rangle). Beachte, dass standardmäßig beide Messungen entlang der zz-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)

Output of the previous code cell

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 0|0\rangle ergaben, und „01" bedeutet, dass die erste Messung 1|1\rangle und die zweite Messung 0|0\rangle ergab. Die weitaus meisten Qubits wurden entweder zweimal im Zustand 0|0\rangle oder zweimal im Zustand 1|1\rangle 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 OO zu suchen, die eine bestimmte Menge quantenmechanischer Zustände ψ|\psi\rangle höchstens um eine Konstante verändert: Oψ=cψO|\psi\rangle = c|\psi \rangle – schließlich liefert das zweimalige Messen entlang zz 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 MM und den Vektor v|v\rangle:

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

und

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

Es gilt:

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.

Für andere Vektoren, etwa v=(12)|v'\rangle = \begin{pmatrix} 1\\2\end{pmatrix}, gilt jedoch:

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.

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 A|A\rangle, so ist die Wahrscheinlichkeit, dass eine anschließende Messung das Teilchen im Zustand B|B\rangle findet, PABAB2P_{AB}\equiv |\langle A| B \rangle|^2.

Das lässt uns viel Freiheit bei der Entwicklung unserer ersten Matrizen. So könnten wir naiv versuchen:

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

Dabei bedeutet 0|0\rangle \sim |\uparrow\rangle, 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

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.

Das heißt: Befindet sich ein Teilchen bereits im Zustand 0|0\rangle, beträgt die Wahrscheinlichkeit, dass eine anschließende Messung ebenfalls 0|0\rangle 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

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

eine bessere Wahl als zum Beispiel

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

Antwort:

Der Versuch, die Messwahrscheinlichkeit mit dem quadrierten Skalarprodukt zu verknüpfen, erfordert, dass der Betrag jedes Vektors gleich 1 ist. Das heißt, vv2=1|\langle v|v\rangle|^2 = 1 für alle v|v\rangle, da die Wahrscheinlichkeit, dass ein Teilchen im Zustand v|v\rangle sich im Zustand v|v\rangle befindet, 100 % beträgt. Dies wird als „Normierungsbedingung" bezeichnet.

Warum ist

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

eine bessere Wahl als zum Beispiel

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

Antwort:

Das ist sie nicht. Es gibt keinen Grund, warum wir zunächst 0=(10)|0\rangle = \begin{pmatrix} 1 \\0 \end{pmatrix} 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 0|0\rangle befand, bei einer anschließenden Messung in diesem Zustand verbleibt. Dasselbe gilt für 1|1\rangle. Das bedeutet, dass ein Qubit im Zustand 0|0\rangle die Wahrscheinlichkeit null hat, im Zustand 1|1\rangle gemessen zu werden (abgesehen von Rauscheffekten). Unsere geforderte Verknüpfung zwischen Skalarprodukten und Messwahrscheinlichkeiten sagt uns dann, dass

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

Ohne Beschränkung der Allgemeinheit können wir den Zustandsvektor 1=(ab)|1\rangle = \begin{pmatrix} a \\ b \end{pmatrix} schreiben. Dann gilt:

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.

Die Forderung P11=1P_{11} = 1, die sogenannte „Normierungsbedingung", ergibt b2=1|b|^2=1. Das allein beschränkt uns eigentlich nur auf b=eiϕb=e^{i\phi} für ϕR\phi \in \mathbb{R}. Es gibt noch andere Gründe für die Wahl b=1b=1, die über diese Einführung hinausgehen. Für jetzt genügt es festzuhalten, dass b=1b=1 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 zz-Achse gemessen hat, möchten wir einen Operator, der genau das beschreibt: SzS_z. 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 zz-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 zz-Komponenten des Spin-Drehimpulses ±/2\pm \hbar/2 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 Sz=(s11s12s21s22)S_z = \begin{pmatrix} s_{11} & s_{12} \\ s_{21} & s_{22}\end{pmatrix} schreiben und fordern:

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

Zusammengefasst und unter Ausklammern des gemeinsamen Faktors /2\hbar/2 ergibt sich:

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

Dies ist der bekannte Spin-z-Operator, der in allen Lehrbüchern der Quantenmechanik zu finden ist. Häufig wird er ohne den Faktor /2\hbar/2 angegeben; in diesem Fall wird er als „Pauli-z"-Operator bezeichnet und üblicherweise als σz\sigma_z geschrieben:

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

Dieser Operator ist nützlich, da er (und verwandte Matrizen) viele physikalische Systeme mit zwei Zuständen oder zwei möglichen Messergebnissen beschreiben kann, einschließlich der Zustände von Transmon-Qubits in einem Quantencomputer.

Bevor wir uns anderen Operatoren und Zuständen zuwenden, müssen wir einen Punkt ansprechen, der häufig falsch verstanden wird. Operatoranwendung ist nicht dasselbe wie Messung. Man könnte sagen: „Natürlich nicht! Das eine findet auf dem Papier als Teil einer mathematischen Berechnung statt, das andere im Labor an physikalischen Systemen." Das stimmt zwar, aber es steckt mehr dahinter. Die Messung der zz-Komponente des Spins liefert immer einen „Spin-up"- oder „Spin-down"-Zustand, unabhängig vom Anfangszustand des Systems. Das haben wir mit den quantencomputerbasierten Äquivalenten 0|0\rangle und 1|1\rangle gesehen. Wir haben hunderte von zufälligen Orientierungen initialisiert, und die Messungen ergaben immer entweder 0|0\rangle oder 1|1\rangle. Man spricht davon, dass die Messung den Zustand auf einen Eigenzustand „kollabiert". Das passiert nicht, wenn du eine Matrix auf einen Zustand anwendest. Untersuche das mit den folgenden Aufgaben.

Verständnisfragen

Lies die folgenden Frage(n), überlege dir deine Antwort und klicke dann auf das Dreieck, um die Lösung aufzudecken.

Angenommen, du startest mit einem Teilchen im Spinzustand

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

(a) Was erhältst du, wenn du den SzS_z-Operator auf diesen Zustandsvektor anwendest? (b) Was erhältst du, wenn du eine einzelne Messung der zz-Komponente des Spins dieses Teilchens durchführst? (c) Was erhältst du, wenn du viele identische Teilchen in diesem Zustand präparierst und Tausende von Messungen der zz-Komponente des Spins durchführst?

Antworten:

(a) Du erhältst:

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

Das ist alles. Es gibt kein experimentelles Ergebnis. Du wendest die Matrix einfach auf den Vektor an und erhältst einen leicht veränderten Vektor, der nun ein neues „-"-Zeichen hat und nicht mehr den Betrag 1 hat, da er einen Vorfaktor /2\hbar/2 hat.

(b) Du wirst entweder |\uparrow\rangle oder |\downarrow\rangle erhalten. Das entspricht der Beobachtung einer Spinprojektion auf der zz-Achse von entweder /2\hbar/2 oder /2-\hbar/2. Wir können auch die Wahrscheinlichkeit jedes Ergebnisses berechnen:

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}

Der Spin-up-Zustand ist zwar um 20 % wahrscheinlicher, aber beide Ergebnisse sind möglich – und wir erhalten immer nur einen dieser beiden Zustände.

(c) Ungefähr 60 % der Messungen werden Spin-up-Teilchen ergeben und ungefähr 40 % Spin-down-Teilchen, gemäß den in Teil (b) berechneten Messwahrscheinlichkeiten.

Überprüfe die Antworten zu den Teilen (b) und (c) der vorherigen Aufgabe, indem du die Analogie zwischen Spin-up-Zuständen eines Atoms und Qubit-Zuständen nutzt:

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

Programmiere Quantencircuits, um den gewünschten Anfangszustand zu erzeugen, und verwende dann entweder echte Hardware oder einen Simulator, um die Ergebnisse einer einzelnen Messung sowie die Ergebnisse aus einem Ensemble von Hunderten oder sogar Tausenden von Messungen zu überprüfen.

Antwort:

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

Fünftes Experiment: Verschiedene Observablen messen

Bisher haben wir ausschließlich entlang der z-Achse gemessen. Bei einem Stern-Gerlach-Experiment würde man zur Messung entlang der x-Achse das inhomogene Magnetfeld einfach in Richtung der xx-Achse ausrichten und auf dem Schirm nach Ablenkungen entlang xx suchen. IBM-Quantencomputer sind jedoch so konstruiert, dass Messungen nur entlang einer einzigen Achse (zz) möglich sind. Um einen Zustand entlang xx zu messen, muss man einen „Basiswechsel" durchführen. Das bedeutet, man wendet eine Operation an, die Zustände entlang xx auf der Bloch-Kugel nach zz überführt und umgekehrt. Dafür gibt es mehrere Möglichkeiten, die bevorzugte ist jedoch ein Hadamard-Gate:

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

Verständnisfragen

Lies die folgenden Fragen, überlege dir deine Antwort und klicke dann auf das Dreieck, um die Lösung anzuzeigen.

Zeige, dass H0=+xH|0\rangle = |+\rangle_x und dass H+x=0H|+\rangle_x = |0\rangle

Antwort:

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

Zeige, dass H1=xH|1\rangle = |-\rangle_x und dass Hx=1H|-\rangle_x = |1\rangle

Antwort:

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

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

qc.draw("mpl")

Output of the previous code cell

Dieser Circuit dreht unser System so, dass Messungen (entlang zz) uns Auskunft über die xx-Eigenschaften vor der Rotation geben. Wir wissen bereits, dass der Quantencomputer Zustände auf 0|0\rangle initialisiert, was |\uparrow\rangle entspricht. Schauen wir, was passiert, wenn wir die Projektion des Spins entlang xx für einen Zustand messen, der sich zunächst in |\uparrow\rangle befindet. Diesen Schritt führen wir auf einem Simulator durch, damit du die Statistik anderer Circuits mit verschiedenen Initialisierungen selbst erkunden kannst.

from qiskit.primitives import StatevectorSampler as Sampler

sampler_sv = Sampler()

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

Das zeigt uns, dass für ein Qubit, das sich zunächst in 0|0\rangle befindet (oder äquivalent dazu ein Spin in |\uparrow\rangle), die Wahrscheinlichkeit, eine Projektion entlang +x+x oder x-x zu messen, etwa 50:50 beträgt. Das ergibt in gewisser Weise vollkommen Sinn: Wenn etwas in z-Richtung zeigt, hat es keine besondere Präferenz für ±x\pm x. Wir könnten dasselbe erwarten, wenn wir mit dem Zustand 1|1\rangle (oder |\downarrow\rangle) starten. Lass es uns überprüfen:

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

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

qc.draw("mpl")

Output of the previous code cell

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

Ja! Wieder erhalten wir eine 50:50-Wahrscheinlichkeit, eine Projektion entlang ±x\pm x zu messen. In Analogie zu Messungen entlang zz könnten wir weiter vermuten, dass ein Teilchen, das in einen Zustand mit eindeutiger Projektion entlang +x+x kollabiert, danach mit Wahrscheinlichkeit null entlang x-x gemessen wird – und umgekehrt. Lass es uns prüfen:

from qiskit import QuantumCircuit

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

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

qc.draw("mpl")

Output of the previous code cell

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

Output of the previous code cell

Wie erwartet erhalten wir Ergebnisse, bei denen die Projektion zunächst entlang +x+x und danach erneut entlang +x+x liegt – sowie Ergebnisse, bei denen die Projektion zunächst entlang x-x und danach ebenfalls entlang x-x liegt. Fälle, in denen die Projektion von +x+x nach x-x oder umgekehrt wechselt, treten nicht auf. Wir können unsere Beobachtungen zusammenfassen und daraus weitere Operatoren in Matrixform sowie weitere Zustandsvektoren entwickeln.

Wir wissen:

  • Zustände mit eindeutiger Projektion entlang +z+z oder z-z haben eine 50%ige Chance, mit einer Projektion entlang +x+x gemessen zu werden, und eine 50%ige Chance, mit einer Projektion entlang x-x gemessen zu werden.
  • Zustände mit eindeutiger Projektion entlang +x+x haben keine Chance, danach mit einer Projektion entlang x-x gemessen zu werden – und umgekehrt.

Wir können diese Ergebnisse nutzen, um Zustände mit eindeutiger, positiver Projektion entlang xx (die wir +x|+x\rangle nennen) und solche mit eindeutiger, negativer Projektion entlang xx (die wir x|-x\rangle nennen) zu konstruieren. Aus diesen Zuständen können wir die Matrix für SxS_x aufbauen – genau so, wie wir es für SzS_z getan haben. Wir überlassen dies als Übungsaufgaben dem Lernenden. Ebenso kann man Experimente zur Messung entlang der yy-Achse aufbauen, Vektoren für +y|+y\rangle und y|-y\rangle bestimmen und schließlich einen Ausdruck für SyS_y erhalten.

Wenn wir all diese Vektoren und Matrizen zusammenfassen, ergibt sich:

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

Fragen

Lehrende können Versionen dieser Notebooks mit Lösungsschlüsseln und Hinweisen zur Einbettung in gängige Lehrpläne anfordern, indem sie diese kurze Umfrage zur Nutzung der Notebooks ausfüllen.

Zentrale Konzepte:

  • Bei einem Spin-1/2-Teilchen kann eine Messung der Spinprojektion auf einer Achse nur eines von zwei Ergebnissen liefern, die häufig als „up" und „down" bezeichnet werden.
  • Qubits können nur in einem von zwei Zuständen gemessen werden, oft als 0|0\rangle und 1|1\rangle bezeichnet.
  • Wir können das Stern-Gerlach-Experiment an Spin-1/2-Teilchen mit Qubits in einem Quantencomputer modellieren.
  • Wiederholte Messungen derselben physikalischen Observablen desselben Teilchens/Qubits liefern dasselbe Ergebnis (sofern das System nicht durch Rauschen gestört wird).
  • Wir können die Ergebnisse des Stern-Gerlach-Experiments oder der analogen Experimente mit Quantencomputern nutzen, um ein System aus Zustandsvektoren und Matrixoperatoren abzuleiten, das den quantenmechanischen Spin beschreibt.

Wahr-/Falsch-Fragen:

  1. W/F Ausgehend von experimentellen Beobachtungen ist (10)\begin{pmatrix}1 \\ 0\end{pmatrix} die einzig gültige Wahl für einen Vektor zur Darstellung von |\uparrow\rangle.
  2. W/F Wenn =(10)|\uparrow\rangle = \begin{pmatrix}1 \\ 0\end{pmatrix}, ist (01)\begin{pmatrix}0 \\ 1\end{pmatrix} die einzig mögliche Wahl für |\downarrow\rangle (bis auf eine globale Phase).
  3. W/F Ein Teilchen, das im Zustand 0|0\rangle gemessen wurde, wird bei nachfolgenden Messungen entlang zz weiterhin im Zustand 0|0\rangle gefunden.
  4. W/F Ein Teilchen, das im Zustand 0|0\rangle gemessen wurde, wird bei nachfolgenden Messungen entlang xx weiterhin im Zustand 0|0\rangle gefunden.
  5. W/F Ein Teilchen, das im Zustand 0|0\rangle gemessen wurde, wird bei nachfolgenden Messungen entlang xx stets im Zustand +x|+\rangle_x gefunden.

Multiple-Choice-Fragen:

  1. Mit welcher Wahrscheinlichkeit wird ein Teilchen, das sich zunächst in |\uparrow\rangle befindet, im Zustand +x|+x\rangle gemessen?

    • a. 0 %
    • b. 25 %
    • c. 50 %
    • d. 71 %
    • e. 100 %
  2. Mit welcher Wahrscheinlichkeit wird ein Teilchen, das sich zunächst in |\uparrow\rangle befindet, im Zustand |\downarrow\rangle gemessen?

    • a. 0 %
    • b. 25 %
    • c. 50 %
    • d. 71 %
    • e. 100 %
  3. Mit welchem Quantencomputer-Zustand wird der Zustand |\uparrow\rangle eines Spin-1/2-Teilchens am häufigsten assoziiert?

    • a. +|+\rangle
    • b. |-\rangle
    • c. 0|0\rangle
    • d. 1|1\rangle
    • e. Keiner der oben genannten

Diskussionsfragen:

  1. Drei Freunde diskutieren über Quantenmessungen und Operatoren. Freund A sagt: „Eine Messung entlang zz und die Anwendung des Operators σz\sigma_z sind dasselbe." Freund B sagt: „Nun ja, es sind verschiedene Verfahren, aber sie haben dasselbe Ergebnis." Freund C sagt: „Sie sind völlig verschieden; sie haben sogar unterschiedliche Auswirkungen auf die meisten Zustände." Wem stimmst du zu und warum?

Aufgaben zur freien Bearbeitung:

  1. Zeige anhand der experimentellen Beobachtungen und der vorgeschlagenen Notation:

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}

dass bis auf eine globale Phase gilt:

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

Wähle α=0\alpha = 0, um das Standardergebnis zu erhalten.

  1. Zeige anhand der experimentellen Beobachtungen und der vorgeschlagenen Notation:

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}

Und unter Verwendung des Ergebnisses aus Bonusaufgabe 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

dass bis auf eine globale Phase gilt:

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

Danksagungen

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