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.
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 enout.pngen el directorio de trabajo actual. El métodosavefig()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 (matriz hermítica) o un statevector (vector complejo). La matriz de densidad se relaciona con el statevector mediante
y es más general, ya que puede representar estados mixtos (suma positiva de statevectors)
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)
- LaTeX
- City
- Hinton
- Pauli vector
- Qsphere
- Bloch
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.
Esta gráfica muestra las partes real e imaginaria de cada elemento de la matriz de densidad en dos gráficos de barras tridimensionales. Se llama gráfica "city" (ciudad) porque las barras se asemejan a rascacielos en una ciudad. El estado que estamos graficando tiene la siguiente matriz de densidad.
Consulta la documentación de la API para más información.
Esta gráfica es muy similar a la gráfica "city", pero la magnitud de cada elemento se representa mediante el tamaño de un cuadrado en lugar de la altura de una barra. Los cuadrados blancos representan elementos con valores positivos, y los cuadrados negros representan elementos con valores negativos. El estado que estamos graficando tiene la siguiente matriz de densidad.
Consulta la documentación de la API para más información.
Un observable es una forma de medir un estado cuántico tal que los posibles resultados de la medición son números reales. El valor esperado del resultado también se conoce como el valor de expectación del observable sobre ese estado, y puede entenderse como el promedio de infinitas observaciones de ese estado.
Los productos tensoriales de matrices de Pauli son todos observables que devuelven +1 o -1. Esta gráfica muestra los valores de expectación del estado sobre distintos operadores de Pauli en un gráfico de barras. Todas las matrices de densidad pueden escribirse como una suma de estas matrices de Pauli, ponderadas por sus valores de expectación.
Por ejemplo, este estado puede escribirse como la suma de los términos:
También puedes calcular estos coeficientes usando SparsePauliOp.
Consulta la documentación de la API para más información.
La "QSphere" es una vista exclusiva de Qiskit de un estado cuántico en la que la amplitud y la fase de cada elemento de un statevector se grafican sobre la superficie de una esfera. El grosor de cada punto representa la amplitud, y el color representa la fase. Para estados mixtos mostrará una esfera por cada componente.
Consulta la documentación de la API para más información.
El vector de Bloch de un estado de qubit es su valor de expectación en los observables de Pauli X, Y y Z, mapeados a los ejes X, Y y Z en el espacio tridimensional. Esta gráfica proyecta estados cuánticos de múltiples qubits sobre el espacio de un solo qubit y grafica cada qubit en una esfera de Bloch. Esta visualización solo muestra los valores de expectación de qubits individuales. No puede mostrar correlaciones entre qubits y, por tanto, no puede describir completamente estados cuánticos entrelazados.
Consulta la documentación de la API para más información.
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")
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.
Próximos pasos
- ¿Necesitas repasar tus conocimientos de información cuántica? Consulta el curso Conceptos básicos de información cuántica en IBM Quantum Learning.
- Lee las pautas de contribución si quieres contribuir al SDK de Qiskit de código abierto.