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.
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 inout.pngnella directory di lavoro corrente. Il metodosavefig()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à (matrice hermitiana) o uno statevector (vettore complesso). La matrice di densità è legata allo statevector da
ed è più generale, poiché può rappresentare stati misti (somma positiva di statevector)
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)
- LaTeX
- City
- Hinton
- Pauli vector
- Qsphere
- Bloch
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.
Questo grafico mostra le parti reale e immaginaria di ogni elemento della matrice di densità in due istogrammi tridimensionali. Si chiama grafico "city" (città) perché le barre ricordano i grattacieli di una città. Lo stato che stiamo rappresentando ha la seguente matrice di densità.
Per ulteriori informazioni consulta la documentazione API.
Questo grafico è molto simile al grafico "city", ma la magnitudine di ogni elemento è rappresentata dalla dimensione di un quadrato anziché dall'altezza di una barra. I quadrati bianchi rappresentano elementi con valori positivi, quelli neri elementi con valori negativi. Lo stato che stiamo rappresentando ha la seguente matrice di densità.
Per ulteriori informazioni consulta la documentazione API.
Un'osservabile è un modo per misurare uno stato quantistico tale che i possibili risultati di misura siano numeri reali. Il valore atteso del risultato è noto anche come valore di aspettazione dell'osservabile su quello stato, e può essere interpretato come la media di un numero infinito di osservazioni di quello stato.
I prodotti tensoriali delle matrici di Pauli sono osservabili che restituiscono +1 o -1. Questo grafico mostra i valori di aspettazione dello stato su diversi operatori di Pauli come istogramma. Ogni matrice di densità può essere scritta come somma di queste matrici di Pauli, pesate dai rispettivi valori di aspettazione.
Ad esempio, questo stato può essere scritto come somma di termini:
Puoi anche calcolare questi coefficienti usando SparsePauliOp.
Per ulteriori informazioni consulta la documentazione API.
La "QSphere" è una visualizzazione esclusiva di Qiskit per uno stato quantistico, in cui l'ampiezza e la fase di ogni elemento di uno statevector vengono tracciate sulla superficie di una sfera. Lo spessore di ogni punto rappresenta l'ampiezza, mentre il colore rappresenta la fase. Per gli stati misti verrà mostrata una sfera per ogni componente.
Per ulteriori informazioni consulta la documentazione API.
Il vettore di Bloch di uno stato qubit è il suo valore di aspettazione nelle osservabili di Pauli X, Y e Z, mappato sugli assi X, Y e Z dello spazio tridimensionale. Questo grafico proietta gli stati quantistici multi-qubit nello spazio a singolo qubit e rappresenta ciascun qubit su una sfera di Bloch. Questa visualizzazione mostra solo i valori di aspettazione dei singoli qubit. Non è in grado di mostrare le correlazioni tra qubit e quindi non può descrivere pienamente gli stati quantistici entangled.
Per ulteriori informazioni consulta la documentazione API.
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")
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
- Hai bisogno di ripassare le nozioni di informazione quantistica? Dai un'occhiata al corso Basi di informazione quantistica su IBM Quantum Learning.
- Leggi le linee guida per i contributi se vuoi contribuire all'SDK Qiskit open source.