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.3.0
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 reichhaltige Objekte 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 Statevektor (komplexer Vektor). Die Dichtematrix hängt mit dem Statevektor zusammen durch
und ist allgemeiner, da sie gemischte Zustände darstellen kann (positive Summe von Statevektoren)
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 — required packages for this notebook
!pip install -q qiskit
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.
Statevektoren 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 Erwartungswert des Ergebnisses ist auch als Erwartungswert der Observablen für diesen Zustand bekannt und kann als Durchschnitt unendlich vieler Beobachtungen dieses Zustands verstanden werden.
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 Statevektors 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 jeden 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.