Quantenzustände darstellen
Paketversionen
Der Code auf dieser Seite wurde mit den folgenden Anforderungen entwickelt. Wir empfehlen, diese oder neuere Versionen zu verwenden.
qiskit[all]~=2.5.2
In vielen Situationen – etwa beim Lernen oder beim Debuggen – ist es hilfreich, den Zustand eines Quantencomputers zu visualisieren. Hier gehen wir davon aus, dass du bereits einen bestimmten Zustand aus einer Simulation oder einer Zustands-Tomographie vorliegen hast. Es ist nur möglich, die Zustände kleiner Quantensysteme anzuzeigen.
Alle Funktionen auf dieser Seite geben Objekte mit umfangreicher Darstellung (rich output) zurück. Wenn die letzte Zeile einer Code-Zelle diese Objekte ausgibt, zeigen Jupyter Notebooks sie unterhalb der Zelle an. Wenn du diese Funktionen in anderen Umgebungen oder in Skripten aufrufst, musst du die Ausgaben explizit anzeigen oder speichern.
Die meisten Funktionen geben Bilder zurück, also matplotlib.Figure-Objekte. Es gibt zwei Möglichkeiten:
- Rufe
.show()auf dem zurückgegebenen Objekt auf, um das Bild in einem neuen Fenster zu öffnen (vorausgesetzt, dein konfiguriertes matplotlib-Backend ist interaktiv). - Rufe
.savefig("out.png")auf, um die Abbildung alsout.pngim aktuellen Arbeitsverzeichnis zu speichern. Die Methodesavefig()nimmt einen Pfad entgegen, sodass du Ort und Dateiname der Ausgabe anpassen kannst. Zum Beispiel:plot_state_city(psi).savefig("out.png").
Die LaTeX-Ausgaben sind IPython.display.Latex-Objekte. Die beste Option in einer Nicht-Jupyter-Umgebung ist es, diese Ausgabe zu vermeiden, indem du entweder den Zustand als Textdarstellung ausgibst oder zum latex_source-Drawer wechselst, um einen LaTeX-Quellstring zurückzubekommen.
Ein Quantenzustand ist entweder eine Dichtematrix (hermitesche Matrix) oder ein Zustandsvektor (komplexer Vektor). Die Dichtematrix hängt mit dem Zustandsvektor zusammen durch
und ist allgemeiner, da sie gemischte Zustände darstellen kann (positive Summe von Zustandsvektoren)
Qiskit repräsentiert Quantenzustände über die Klassen Statevector und DensityMatrix und bietet viele Visualisierungsfunktionen. Lies die Abschnitte nach der folgenden Code-Zelle, um zu sehen, wie Qiskits verschiedene Visualisierungsfunktionen den folgenden Quantenzustand darstellen.
# Added by doQumentation — installs the packages this notebook needs if they are missing
import importlib.util
_needed = {"qiskit": "qiskit"}
_missing = [pip for module, pip in _needed.items()
if importlib.util.find_spec(module) is None]
# One at a time, so a package that fails to install does not block the others
for _pip in _missing:
%pip install -q {_pip}
if not _missing:
print("\u2713 All required packages are installed")
from math import pi
from qiskit import QuantumCircuit
from qiskit.quantum_info import Statevector
# Create a Bell state for demonstration
qc = QuantumCircuit(2)
qc.h(0)
qc.crx(pi / 2, 0, 1)
psi = Statevector(qc)
- LaTeX
- City
- Hinton
- Pauli vector
- Qsphere
- Bloch
Obwohl es sich technisch gesehen nicht um einen „Plot" handelt, kann Qiskit LaTeX-Darstellungen sowohl von Statevector- als auch von DensityMatrix-Objekten rendern, die in Jupyter Notebooks schön angezeigt werden. Diese folgen den mathematischen Standardkonventionen für die Notation von Quantenzuständen. Mehr dazu erfährst du unter Grundlagen der Quanteninformation: Einzelsysteme.
Zustandsvektoren verwenden standardmäßig die „Ket-Notation", während Dichtematrizen als 2×2-Matrix dargestellt werden.
Du kannst "latex" auch durch "latex_source" ersetzen, um den rohen LaTeX-String zu erhalten.
Dieser Plot zeigt den Real- und Imaginärteil jedes Elements der Dichtematrix in zwei dreidimensionalen Balkendiagrammen. Er wird „City"-Plot genannt, weil die Balken an Wolkenkratzer einer Stadt erinnern. Der Zustand, den wir darstellen, hat die folgende Dichtematrix.
Weitere Informationen findest du in der API-Dokumentation.
Dieser Plot ähnelt dem „City"-Plot sehr, aber die Größe jedes Elements wird durch die Fläche eines Quadrats dargestellt, nicht durch die Höhe eines Balkens. Weiße Quadrate stehen für Elemente mit positiven Werten, schwarze Quadrate für Elemente mit negativen Werten. Der Zustand, den wir darstellen, hat die folgende Dichtematrix.
Weitere Informationen findest du in der API-Dokumentation.
Eine Observable ist eine Methode zur Messung eines Quantenzustands, bei der die möglichen Messergebnisse reelle Zahlen sind. Der Mittelwert des Ergebnisses wird auch als Erwartungswert der Observablen in diesem Zustand bezeichnet und lässt sich als Durchschnitt unendlich vieler Beobachtungen dieses Zustands auffassen.
Tensorprodukte von Pauli-Matrizen sind allesamt Observablen, die +1 oder -1 zurückgeben. Dieser Plot stellt die Erwartungswerte des Zustands für verschiedene Pauli-Operatoren als Balkendiagramm dar. Alle Dichtematrizen lassen sich als Summe dieser Pauli-Matrizen schreiben, gewichtet durch ihre Erwartungswerte.
Dieser Zustand lässt sich beispielsweise als folgende Summe von Termen schreiben:
Du kannst diese Koeffizienten auch mit SparsePauliOp berechnen.
Weitere Informationen findest du in der API-Dokumentation.
Die „QSphere" ist eine Qiskit-eigene Darstellung eines Quantenzustands, bei der Amplitude und Phase jedes Elements eines Zustandsvektors auf der Oberfläche einer Kugel abgebildet werden. Die Dicke jedes Punktes steht für die Amplitude, die Farbe für die Phase. Bei gemischten Zuständen wird für jede Komponente eine eigene Kugel angezeigt.
Weitere Informationen findest du in der API-Dokumentation.
Der Bloch-Vektor eines Qubit-Zustands ist sein Erwartungswert in den Pauli-Observablen X, Y und Z, abgebildet auf die X-, Y- und Z-Achsen im dreidimensionalen Raum. Dieser Plot projiziert Multi-Qubit-Quantenzustände auf den Ein-Qubit-Raum und stellt jedes Qubit auf einer Bloch-Kugel dar. Diese Visualisierung zeigt nur die Erwartungswerte einzelner Qubits. Korrelationen zwischen Qubits können nicht dargestellt werden, weshalb verschränkte Quantenzustände damit nicht vollständig beschrieben werden können.
Weitere Informationen findest du in der API-Dokumentation.
psi.draw("latex") # psi is a Statevector object
from qiskit.quantum_info import DensityMatrix
DensityMatrix(psi).draw("latex") # convert to a DensityMatrix and draw
from qiskit.visualization import plot_state_city
plot_state_city(psi)
# Alternative: psi.draw("city")
from qiskit.visualization import plot_state_hinton
plot_state_hinton(psi)
# Alternative: psi.draw("hinton")
from qiskit.visualization import plot_state_paulivec
plot_state_paulivec(psi)
# Alternative: psi.draw("paulivec")
from qiskit.quantum_info import SparsePauliOp
SparsePauliOp.from_operator(psi)
SparsePauliOp(['II', 'IX', 'XY', 'YI', 'YX', 'YZ', 'ZI', 'ZX', 'ZZ'],
coeffs=[ 0.25 +0.j, 0.1767767+0.j, -0.1767767+0.j, -0.125 +0.j,
-0.1767767+0.j, 0.125 +0.j, 0.125 +0.j, 0.1767767+0.j,
0.125 +0.j])
from qiskit.visualization import plot_state_qsphere
plot_state_qsphere(psi)
# Alternative: psi.draw("qsphere")
from qiskit.visualization import plot_bloch_multivector
plot_bloch_multivector(psi)
# Alternative: psi.draw("bloch")
Optionen für Zustandsdarstellungsfunktionen
Alle Zustandsdarstellungsfunktionen akzeptieren die folgenden Argumente (ausgenommen der LaTeX-Drawer, der keine Matplotlib-Abbildung zurückgibt, und plot_state_qsphere, der nur figsize akzeptiert):
- title (str): ein String für den Titel des Plots, der oben im Plot angezeigt wird
- figsize (tuple): Abbildungsgröße in Zoll (Breite, Höhe)
Die Funktionen plot_state_city und plot_state_paulivec akzeptieren außerdem ein color-Argument (Liste von Strings), das die Farben der Balken festlegt. Weitere Informationen findest du in der API-Dokumentation.
Nächste Schritte
- Möchtest du dein Wissen über Quanteninformation auffrischen? Schau dir den Kurs Grundlagen der Quanteninformation auf IBM Quantum Learning an.
- Lies die Beitragsrichtlinien, wenn du zum Open-Source-Qiskit-SDK beitragen möchtest.