Plotar estados quânticos
Versões dos pacotes
O código nesta página foi desenvolvido usando os seguintes requisitos. Recomendamos usar essas versões ou mais recentes.
qiskit[all]~=2.3.0
Em muitas situações — como aprendizado ou depuração — é útil visualizar o estado de um computador quântico. Aqui assumimos que você já possui um estado específico obtido por simulação ou tomografia de estado. Só é possível visualizar os estados de sistemas quânticos pequenos.
Todas as funções nesta página retornam objetos ricos. Quando a última linha de uma célula de código produz esses objetos, os notebooks Jupyter os exibem abaixo da célula. Se você chamar essas funções em outros ambientes ou em scripts, precisará exibir ou salvar as saídas explicitamente.
A maioria das funções retorna imagens, que são objetos matplotlib.Figure. Duas opções são:
- Chame
.show()no objeto retornado para abrir a imagem em uma nova janela (assumindo que o backend matplotlib configurado seja interativo). - Chame
.savefig("out.png")para salvar a figura emout.pngno diretório de trabalho atual. O métodosavefig()aceita um caminho, permitindo que você ajuste o local e o nome do arquivo onde a saída será salva. Por exemplo,plot_state_city(psi).savefig("out.png").
As saídas LaTeX são objetos IPython.display.Latex. A melhor opção em um ambiente fora do Jupyter é evitar essa saída, seja imprimindo o estado para uma representação em texto, ou alternando para o drawer latex_source para retornar uma string com o código-fonte LaTeX.
Um estado quântico é uma matriz de densidade (matriz hermitiana) ou um statevector (vetor complexo). A matriz de densidade está relacionada ao statevector por
e é mais geral, pois pode representar estados mistos (soma positiva de statevectors)
O Qiskit representa estados quânticos por meio das classes Statevector e DensityMatrix e fornece muitas funções de visualização. Veja as seções após a célula de código a seguir para ver como as diferentes funções de visualização do Qiskit plotam o estado quântico abaixo.
# 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
Embora tecnicamente não seja um "gráfico", o Qiskit pode renderizar representações LaTeX de objetos Statevector e DensityMatrix que são exibidos de forma elegante em notebooks Jupyter. Eles seguem as convenções matemáticas padrão para representar estados quânticos. Leia mais em Fundamentos de informação quântica: Sistemas únicos.
Statevectors utilizam por padrão a "notação ket", enquanto matrizes de densidade são exibidas como uma matriz 2×2.
Você também pode substituir "latex" por "latex_source" para obter a string LaTeX bruta.
Este gráfico exibe as partes real e imaginária de cada elemento da matriz de densidade em dois gráficos de barras tridimensionais. É chamado de gráfico "city" (cidade) porque as barras lembram arranha-céus em uma cidade. O estado que estamos plotando possui a seguinte matriz de densidade.
Consulte a documentação da API para mais informações.
Este gráfico é muito similar ao gráfico "city", mas a magnitude de cada elemento é representada pelo tamanho de um quadrado em vez da altura de uma barra. Quadrados brancos representam elementos com valores positivos, e quadrados pretos representam elementos com valores negativos. O estado que estamos plotando possui a seguinte matriz de densidade.
Consulte a documentação da API para mais informações.
Um observável é uma forma de medir um estado quântico de modo que os possíveis resultados de medição sejam números reais. O valor esperado do resultado também é conhecido como o valor esperado do observável naquele estado, e pode ser entendido como a média de infinitas observações desse estado.
Produtos tensoriais de matrizes de Pauli são todos observáveis que retornam +1 ou -1. Este gráfico exibe os valores esperados do estado em diferentes operadores de Pauli como um gráfico de barras. Todas as matrizes de densidade podem ser escritas como uma soma dessas matrizes de Pauli, ponderadas pelos seus valores esperados.
Por exemplo, este estado pode ser escrito como a soma dos termos:
Você também pode calcular esses coeficientes usando SparsePauliOp.
Consulte a documentação da API para mais informações.
O "QSphere" é uma visualização exclusiva do Qiskit de um estado quântico na qual a amplitude e a fase de cada elemento de um statevector são plotadas na superfície de uma esfera. A espessura de cada ponto representa a amplitude, e a cor representa a fase. Para estados mistos, será exibida uma esfera para cada componente.
Consulte a documentação da API para mais informações.
O vetor de Bloch de um estado de Qubit é o seu valor esperado nos observáveis de Pauli X, Y e Z mapeados para os eixos X, Y e Z no espaço tridimensional. Este gráfico projeta estados quânticos de múltiplos Qubits no espaço de Qubit único e plota cada Qubit em uma esfera de Bloch. Essa visualização mostra apenas os valores esperados dos Qubits individuais. Ela não consegue mostrar correlações entre Qubits e, portanto, não pode descrever completamente estados quânticos emaranhados.
Consulte a documentação da API para mais informações.
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")
Opções para as funções de plotagem de estado
Todas as funções de plotagem de estado aceitam os seguintes argumentos (exceto o drawer LaTeX, que não retorna uma figura Matplotlib, e plot_state_qsphere, que aceita apenas figsize):
- title (str): uma string para o título do gráfico, exibida no topo do gráfico
- figsize (tuple): tamanho da figura em polegadas (largura, altura)
As funções plot_state_city e plot_state_paulivec também aceitam um argumento color (lista de strings) que especifica as cores das barras. Consulte a documentação da API para mais informações.
Próximos passos
- Precisa relembrar seus conhecimentos de informação quântica? Confira o curso Fundamentos de informação quântica no IBM Quantum Learning.
- Leia as diretrizes de contribuição se quiser contribuir com o SDK Qiskit de código aberto.