Saltar al contenido principal

Graficar estados cuánticos

Versiones de paquetes

El código de esta página fue desarrollado con los siguientes requisitos. Recomendamos usar estas versiones o más recientes.

qiskit[all]~=2.3.0

En muchas situaciones — como al aprender o depurar — es útil visualizar el estado de un computador cuántico. Aquí asumimos que ya tienes un estado particular obtenido de una simulación o de tomografía de estados. Solo es posible ver los estados de sistemas cuánticos pequeños.

Usar la salida de las funciones

Todas las funciones de esta página devuelven objetos ricos. Cuando la última línea de una celda de código produce estos objetos, los notebooks de Jupyter los muestran debajo de la celda. Si llamas estas funciones en otros entornos o en scripts, necesitarás mostrar o guardar las salidas explícitamente.

La mayoría de las funciones devuelven imágenes, que son objetos matplotlib.Figure. Dos opciones son:

  • Llamar .show() sobre el objeto devuelto para abrir la imagen en una ventana nueva (asumiendo que el backend de matplotlib que tienes configurado es interactivo).
  • Llamar .savefig("out.png") para guardar la figura en out.png en el directorio de trabajo actual. El método savefig() acepta una ruta, por lo que puedes ajustar la ubicación y el nombre del archivo donde guardas la salida. Por ejemplo, plot_state_city(psi).savefig("out.png").

Las salidas de LaTeX son objetos IPython.display.Latex. La mejor opción en un entorno que no sea Jupyter es evitar esta salida imprimiendo el estado para obtener una representación de texto, o cambiando al drawer latex_source para obtener una cadena de LaTeX sin procesar.

Un estado cuántico es una matriz de densidad ρ\rho (matriz hermítica) o un statevector ψ|\psi\rangle (vector complejo). La matriz de densidad se relaciona con el statevector mediante

ρ=ψψ,\rho = |\psi\rangle\langle \psi|,

y es más general, ya que puede representar estados mixtos (suma positiva de statevectors)

ρ=kpkψkψk.\rho = \sum_k p_k |\psi_k\rangle\langle \psi_k |.

Qiskit representa los estados cuánticos a través de las clases Statevector y DensityMatrix y proporciona muchas funciones de visualización. Consulta las secciones que aparecen después de la siguiente celda de código para ver cómo las distintas funciones de visualización de Qiskit grafican el siguiente estado cuántico.

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

Aunque técnicamente no es una "gráfica", Qiskit puede renderizar representaciones en LaTeX de los objetos Statevector y DensityMatrix que se muestran de forma atractiva en los notebooks de Jupyter. Estas siguen las convenciones matemáticas estándar para escribir estados cuánticos. Lee más en Conceptos básicos de información cuántica: Sistemas de un solo qubit.

Los statevectors usan por defecto la "notación ket", mientras que las matrices de densidad se muestran como una matriz 2×2.

También puedes reemplazar "latex" con "latex_source" para obtener la cadena de LaTeX sin procesar.

psi.draw("latex")  # psi is a Statevector object

2200+1201i211\frac{\sqrt{2}}{2} |00\rangle+\frac{1}{2} |01\rangle- \frac{i}{2} |11\rangle

from qiskit.quantum_info import DensityMatrix

DensityMatrix(psi).draw("latex") # convert to a DensityMatrix and draw
[122402i424140i400002i4i4014] \begin{bmatrix} \frac{1}{2} & \frac{\sqrt{2}}{4} & 0 & \frac{\sqrt{2} i}{4} \\ \frac{\sqrt{2}}{4} & \frac{1}{4} & 0 & \frac{i}{4} \\ 0 & 0 & 0 & 0 \\ - \frac{\sqrt{2} i}{4} & - \frac{i}{4} & 0 & \frac{1}{4} \\ \end{bmatrix}
from qiskit.visualization import plot_state_city

plot_state_city(psi)
# Alternative: psi.draw("city")

Salida de la celda de código anterior

from qiskit.visualization import plot_state_hinton

plot_state_hinton(psi)
# Alternative: psi.draw("hinton")

Salida de la celda de código anterior

from qiskit.visualization import plot_state_paulivec

plot_state_paulivec(psi)
# Alternative: psi.draw("paulivec")

Salida de la celda de código anterior

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")

Salida de la celda de código anterior

from qiskit.visualization import plot_bloch_multivector

plot_bloch_multivector(psi)
# Alternative: psi.draw("bloch")

Salida de la celda de código anterior

Opciones para las funciones de graficación de estados

Todas las funciones de graficación de estados aceptan los siguientes argumentos (excepto el drawer de LaTeX, que no devuelve una figura de Matplotlib, y plot_state_qsphere, que solo acepta figsize):

  • title (str): una cadena para el título de la gráfica, mostrada en la parte superior
  • figsize (tuple): tamaño de la figura en pulgadas (ancho, alto)

Las funciones plot_state_city y plot_state_paulivec también aceptan un argumento color (lista de cadenas) que especifica los colores de las barras. Consulta la documentación de la API para más información.

¿No recuerdas el nombre de la función de graficación que necesitas? Prueba preguntándole al Asistente de Código de Qiskit.

Próximos pasos

Recomendaciones