Vai al contenuto principale
Questo progetto è in fase beta. Hai trovato un bug? Apri una issue su GitHub. Hai una domanda o un'idea? Chiedi su GitHub Discussions — apprezziamo il tuo feedback!
Com'è la qualità della traduzione su questa pagina?

Rappresentare graficamente 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.5.2

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 tomografia dello stato. È 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 — installs the packages this notebook needs if they are missing
import importlib.util

_needed = {"qiskit": "qiskit"}
_missing = [pip for module, pip in _needed.items()
if importlib.util.find_spec(module) is None]
# One at a time, so a package that fails to install does not block the others
for _pip in _missing:
%pip install -q {_pip}
if not _missing:
print("\u2713 All required packages are installed")
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

22∣00⟩+12∣01⟩−i2∣11⟩\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
[122402i424140i40000−2i4−i4014] \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.

Passi successivi​

Raccomandazioni