Vai al contenuto principale

Rappresentare gli stati quantistici

Versioni dei pacchetti

Il codice di questa pagina è stato sviluppato usando i seguenti requisiti. Si consiglia di usare queste versioni o versioni più recenti.

qiskit[all]~=2.3.0

In molte situazioni — come durante l'apprendimento o il debugging — è utile visualizzare lo stato di un computer quantistico. In questa guida si presuppone che tu abbia già ottenuto un determinato stato tramite simulazione o state tomography. È possibile visualizzare solo gli stati di sistemi quantistici di piccole dimensioni.

Usare l'output delle funzioni

Tutte le funzioni di questa pagina restituiscono oggetti ricchi. Quando l'ultima riga di una cella di codice produce questi oggetti, i notebook Jupyter li mostrano sotto la cella. Se chiami queste funzioni in altri ambienti o in script, dovrai mostrare o salvare gli output esplicitamente.

La maggior parte delle funzioni restituisce immagini, ovvero oggetti matplotlib.Figure. Hai due opzioni:

  • Chiama .show() sull'oggetto restituito per aprire l'immagine in una nuova finestra (a condizione che il backend matplotlib configurato sia interattivo).
  • Chiama .savefig("out.png") per salvare la figura in out.png nella directory di lavoro corrente. Il metodo savefig() accetta un percorso, così puoi scegliere posizione e nome del file. Ad esempio: plot_state_city(psi).savefig("out.png").

Gli output LaTeX sono oggetti IPython.display.Latex. In un ambiente non-Jupyter la scelta migliore è evitare questo output: stampa lo stato per una rappresentazione testuale oppure passa al drawer latex_source per ottenere una stringa sorgente LaTeX.

Uno stato quantistico è o una matrice di densità ρ\rho (matrice hermitiana) o uno statevector ψ|\psi\rangle (vettore complesso). La matrice di densità è legata allo statevector da

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

ed è più generale, poiché può rappresentare stati misti (somma positiva di statevector)

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

Qiskit rappresenta gli stati quantistici tramite le classi Statevector e DensityMatrix e fornisce numerose funzioni di visualizzazione. Consulta le sezioni successive alla cella di codice seguente per vedere come le diverse funzioni di visualizzazione di Qiskit rappresentano il seguente stato quantistico.

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

Pur non essendo tecnicamente un "grafico", Qiskit è in grado di generare rappresentazioni LaTeX sia di oggetti Statevector sia di oggetti DensityMatrix, che vengono visualizzate in modo elegante nei notebook Jupyter. Queste seguono le convenzioni matematiche standard per la scrittura degli stati quantistici. Approfondisci l'argomento in Basi di informazione quantistica: Sistemi singoli.

Gli statevector usano per default la "notazione ket", mentre le matrici di densità vengono visualizzate come matrici 2×2.

Puoi anche sostituire "latex" con "latex_source" per ottenere la stringa LaTeX grezza.

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 della cella di codice precedente

from qiskit.visualization import plot_state_hinton

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

Output della cella di codice precedente

from qiskit.visualization import plot_state_paulivec

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

Output della cella di codice precedente

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 della cella di codice precedente

from qiskit.visualization import plot_bloch_multivector

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

Output della cella di codice precedente

Opzioni per le funzioni di visualizzazione degli stati

Tutte le funzioni di visualizzazione degli stati accettano i seguenti argomenti (ad eccezione del drawer LaTeX, che non restituisce una figura Matplotlib, e di plot_state_qsphere, che accetta solo figsize):

  • title (str): una stringa per il titolo del grafico, visualizzata nella parte superiore
  • figsize (tuple): dimensione della figura in pollici (larghezza, altezza)

Le funzioni plot_state_city e plot_state_paulivec accettano anche un argomento color (lista di stringhe) che specifica i colori delle barre. Per ulteriori informazioni consulta la documentazione API.

Non ricordi il nome della funzione di visualizzazione di cui hai bisogno? Prova a chiedere a Qiskit Code Assistant.

Passi successivi

Raccomandazioni