Représenter les états quantiques
Versions des packages
Le code de cette page a été développé avec les dépendances suivantes. Nous recommandons d'utiliser ces versions ou des versions plus récentes.
qiskit[all]~=2.3.0
Dans de nombreuses situations — apprentissage ou débogage, par exemple — il est utile de visualiser l'état d'un ordinateur quantique. On suppose ici que tu disposes déjà d'un état particulier, obtenu par simulation ou par tomographie d'état. Il n'est possible de visualiser que les états de petits systèmes quantiques.
Toutes les fonctions de cette page renvoient des objets enrichis. Lorsque la dernière ligne d'une cellule de code produit ces objets, les notebooks Jupyter les affichent sous la cellule. Si tu appelles ces fonctions dans d'autres environnements ou dans des scripts, tu devras afficher ou enregistrer les sorties explicitement.
La plupart des fonctions renvoient des images, qui sont des objets matplotlib.Figure. Deux options s'offrent à toi :
- Appelle
.show()sur l'objet renvoyé pour ouvrir l'image dans une nouvelle fenêtre (à condition que le backend matplotlib configuré soit interactif). - Appelle
.savefig("out.png")pour enregistrer la figure dansout.pngdans le répertoire de travail courant. La méthodesavefig()accepte un chemin, ce qui te permet d'ajuster l'emplacement et le nom du fichier de sortie. Par exemple :plot_state_city(psi).savefig("out.png").
Les sorties LaTeX sont des objets IPython.display.Latex. La meilleure option dans un environnement non-Jupyter est d'éviter cette sortie, soit en affichant l'état sous forme textuelle, soit en passant au rendu latex_source pour obtenir une chaîne source LaTeX.
Un état quantique est soit une matrice densité (matrice hermitienne), soit un vecteur d'état (vecteur complexe). La matrice densité est liée au vecteur d'état par
et est plus générale, car elle peut représenter des états mixtes (somme positive de vecteurs d'état)
Qiskit représente les états quantiques via les classes Statevector et DensityMatrix, et fournit de nombreuses fonctions de visualisation. Consulte les sections qui suivent la cellule de code ci-dessous pour voir comment les différentes fonctions de visualisation de Qiskit représentent l'état quantique suivant.
# 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
Bien que ce ne soit pas techniquement un « tracé », Qiskit peut générer des représentations LaTeX des objets Statevector et DensityMatrix qui s'affichent élégamment dans les notebooks Jupyter. Ces représentations suivent les conventions mathématiques standard pour écrire les états quantiques. Pour en savoir plus, consulte Bases de l'information quantique : Systèmes simples.
Les vecteurs d'état utilisent par défaut la « notation ket », tandis que les matrices densité sont affichées sous forme de matrice 2×2.
Tu peux aussi remplacer "latex" par "latex_source" pour obtenir la chaîne LaTeX brute.
Ce tracé affiche les parties réelle et imaginaire de chaque élément de la matrice densité sous forme de deux graphiques en barres tridimensionnels. On l'appelle tracé « city » (ville) parce que les barres ressemblent à des gratte-ciels. L'état que nous représentons possède la matrice densité suivante.
Consulte la documentation de l'API pour plus d'informations.
Ce tracé est très similaire au tracé « city », mais l'amplitude de chaque élément est représentée par la taille d'un carré plutôt que par la hauteur d'une barre. Les carrés blancs représentent les éléments à valeurs positives, et les carrés noirs représentent les éléments à valeurs négatives. L'état que nous représentons possède la matrice densité suivante.
Consulte la documentation de l'API pour plus d'informations.
Une observable est une façon de mesurer un état quantique telle que les résultats possibles de la mesure soient des nombres réels. La valeur attendue du résultat est également appelée valeur d'espérance de l'observable sur cet état ; on peut la concevoir comme la moyenne d'un nombre infini d'observations de cet état.
Les produits tensoriels de matrices de Pauli sont des observables qui renvoient +1 ou −1. Ce tracé affiche les valeurs d'espérance de l'état sur différents opérateurs de Pauli sous forme de diagramme en barres. Toutes les matrices densité peuvent s'écrire comme une somme de ces matrices de Pauli, pondérées par leurs valeurs d'espérance.
Par exemple, cet état peut s'écrire comme la somme des termes suivants :
Tu peux aussi calculer ces coefficients avec SparsePauliOp.
Consulte la documentation de l'API pour plus d'informations.
La « QSphere » est une représentation propre à Qiskit d'un état quantique, dans laquelle l'amplitude et la phase de chaque élément d'un vecteur d'état sont tracées sur la surface d'une sphère. L'épaisseur de chaque point représente l'amplitude, et la couleur représente la phase. Pour les états mixtes, une sphère est affichée pour chaque composante.
Consulte la documentation de l'API pour plus d'informations.
Le vecteur de Bloch d'un état qubit correspond à sa valeur d'espérance dans les observables de Pauli X, Y et Z, projetée sur les axes X, Y et Z de l'espace tridimensionnel. Ce tracé projette les états quantiques multi-qubits sur l'espace à un seul qubit et représente chaque qubit sur une sphère de Bloch. Cette visualisation ne montre que les valeurs d'espérance des qubits individuels. Elle ne peut pas représenter les corrélations entre qubits et ne décrit donc pas complètement les états quantiques intriqués.
Consulte la documentation de l'API pour plus d'informations.
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")
Options des fonctions de tracé d'état
Toutes les fonctions de tracé d'état acceptent les arguments suivants (à l'exception du rendu LaTeX, qui ne renvoie pas de figure Matplotlib, et de plot_state_qsphere, qui n'accepte que figsize) :
- title (str) : une chaîne de caractères pour le titre du tracé, affiché en haut du graphique
- figsize (tuple) : taille de la figure en pouces (largeur, hauteur)
Les fonctions plot_state_city et plot_state_paulivec acceptent également un argument color (liste de chaînes) spécifiant les couleurs des barres. Consulte la documentation de l'API pour plus d'informations.
Prochaines étapes
- Tu as besoin de rafraîchir tes connaissances en information quantique ? Consulte le cours Bases de l'information quantique sur IBM Quantum Learning.
- Lis les directives de contribution si tu souhaites contribuer au SDK Qiskit open source.