Vykreslování kvantových stavů
Verze balíčků
Kód na této stránce byl vyvinut s použitím následujících požadavků. Doporučujeme používat tyto nebo novější verze.
qiskit[all]~=2.3.0
V mnoha situacích – například při učení nebo ladění – je užitečné vizualizovat stav kvantového počítače. Zde předpokládáme, že již máš konkrétní stav ze simulace nebo tomografie stavu. Lze zobrazit pouze stavy malých kvantových systémů.
Všechny funkce na této stránce vrací bohaté objekty. Pokud je posledním řádkem buňky kódu výstup těchto objektů, Jupyter notebooky je zobrazí pod buňkou. Pokud tyto funkce voláš v jiném prostředí nebo ve skriptech, budeš muset výstupy explicitně zobrazit nebo uložit.
Většina funkcí vrací obrázky, což jsou objekty matplotlib.Figure. Máš dvě možnosti:
- Zavolej
.show()na vráceném objektu, čímž obrázek otevřeš v novém okně (za předpokladu, že nakonfigurovaný backend matplotlib je interaktivní). - Zavolej
.savefig("out.png"), čímž obrázek uložíš jakoout.pngdo aktuálního pracovního adresáře. Metodasavefig()přijímá cestu, takže si můžeš nastavit umístění a název souboru. Napříkladplot_state_city(psi).savefig("out.png").
Výstupy LaTeX jsou objekty IPython.display.Latex. Nejlepší možností v prostředí mimo Jupyter je tomuto výstupu se vyhnout – buď vytiskni stav jako textovou reprezentaci, nebo přepni na drawer latex_source, který vrátí zdrojový řetězec LaTeX.
Kvantový stav je buď hustotní matice (hermitovská matice), nebo stavový vektor (komplexní vektor). Hustotní matice souvisí se stavovým vektorem takto:
a je obecnější, protože může reprezentovat smíšené stavy (kladný součet stavových vektorů):
Qiskit reprezentuje kvantové stavy prostřednictvím tříd Statevector a DensityMatrix a nabízí mnoho vizualizačních funkcí. Podívej se na části za následující buňkou kódu, kde uvidíš, jak různé vizualizační funkce Qiskitu vykreslují níže uvedený kvantový stav.
# 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
I když to technicky není „graf", Qiskit dokáže vykreslovat LaTeX reprezentace objektů Statevector i DensityMatrix, které se v Jupyter noteboocích zobrazují přehledně. Řídí se standardními matematickými konvencemi pro zápis kvantových stavů. Více se dočteš v části Základy kvantových informací: Jednoduché systémy.
Stavové vektory se standardně zobrazují v „ket notaci", zatímco hustotní matice jsou zobrazeny jako matice 2×2.
Místo "latex" můžeš použít také "latex_source" pro získání surového řetězce LaTeX.
Tento graf zobrazuje reálné a imaginární části každého prvku hustotní matice ve dvou trojrozměrných sloupcových grafech. Říká se mu „city" (město), protože sloupce připomínají mrakodrapy ve městě. Stav, který vykreslujeme, má následující hustotní matici.
Více informací najdeš v dokumentaci API.
Tento graf je velmi podobný grafu „city", ale velikost každého prvku je znázorněna velikostí čtverce, nikoli výškou sloupce. Bílé čtverce představují prvky s kladnými hodnotami, černé čtverce představují prvky se zápornými hodnotami. Stav, který vykreslujeme, má následující hustotní matici.
Více informací najdeš v dokumentaci API.
Pozorovatelná veličina je způsob měření kvantového stavu, přičemž možné výsledky měření jsou reálná čísla. Střední hodnota výsledku se nazývá střední hodnota pozorovatelné veličiny na daném stavu a lze ji chápat jako průměr z nekonečně mnoha pozorování tohoto stavu.
Tenzorové součiny Pauliho matic jsou pozorovatelné veličiny, které vrací +1 nebo -1. Tento graf zobrazuje střední hodnoty stavu pro různé Pauliho operátory jako sloupcový graf. Všechny hustotní matice lze zapsat jako součet těchto Pauliho matic, vážených jejich středními hodnotami.
Například tento stav lze zapsat jako součet členů:
Tyto koeficienty lze také vypočítat pomocí SparsePauliOp.
Více informací najdeš v dokumentaci API.
„QSphere" je jedinečný pohled Qiskitu na kvantový stav, ve kterém je amplituda a fáze každého prvku stavového vektoru vynesena na povrch koule. Tloušťka každého bodu představuje amplitudu, barva představuje fázi. Pro smíšené stavy zobrazí kouli pro každou komponentu.
Více informací najdeš v dokumentaci API.
Blochův vektor stavu Qubitu je jeho střední hodnota v Pauliho observablech X, Y a Z, zobrazená na osách X, Y a Z v trojrozměrném prostoru. Tento graf promítá víceQubitové kvantové stavy na prostor jednoho Qubitu a zobrazuje každý Qubit na Blochově sféře. Tato vizualizace zobrazuje pouze střední hodnoty jednotlivých Qubitů. Nedokáže zobrazit korelace mezi Qubity, a proto nemůže plně popsat provázané kvantové stavy.
Více informací najdeš v dokumentaci 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")
Možnosti funkcí pro vykreslování stavů
Všechny funkce pro vykreslování stavů přijímají následující argumenty (kromě draweru LaTeX, který nevrací obrázek Matplotlib, a plot_state_qsphere, který přijímá pouze figsize):
- title (str): řetězec pro název grafu, zobrazený v horní části grafu
- figsize (tuple): velikost obrázku v palcích (šířka, výška)
Funkce plot_state_city a plot_state_paulivec přijímají také argument color (seznam řetězců), který určuje barvy sloupců. Více informací najdeš v dokumentaci API.
Další kroky
- Potřebuješ si osvěžit znalosti kvantových informací? Podívej se na kurz Základy kvantových informací na IBM Quantum Learning.
- Přečti si pokyny pro přispívání, pokud chceš přispět do open-source Qiskit SDK.