Pular para o conteúdo principal

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.

Usando a saída das funções

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 em out.png no diretório de trabalho atual. O método savefig() 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 ρ\rho (matriz hermitiana) ou um statevector ψ|\psi\rangle (vetor complexo). A matriz de densidade está relacionada ao statevector por

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

e é mais geral, pois pode representar estados mistos (soma positiva de statevectors)

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

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)

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.

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

Output of the previous code cell

from qiskit.visualization import plot_state_hinton

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

Output of the previous code cell

from qiskit.visualization import plot_state_paulivec

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

Output of the previous code cell

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

Output of the previous code cell

from qiskit.visualization import plot_bloch_multivector

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

Output of the previous code cell

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.

Não consegue lembrar o nome da função de plotagem que precisa? Tente perguntar ao Qiskit Code Assistant.

Próximos passos

Recomendações