Wykreślanie stanów kwantowych
Package versions
The code on this page was developed using the following requirements. We recommend using these versions or newer.
qiskit[all]~=2.3.0
W wielu sytuacjach – takich jak nauka czy debugowanie – pomocne jest zwizualizowanie stanu komputera kwantowego. Zakładamy tutaj, że masz już określony stan uzyskany z symulacji lub tomografii stanów. Stany małych układów kwantowych można oglądać jedynie w przypadku niewielkich systemów.
Wszystkie funkcje na tej stronie zwracają bogate obiekty. Gdy ostatnia linia komórki kodu zwraca te obiekty, notebooki Jupyter wyświetlają je poniżej komórki. Jeśli wywołujesz te funkcje w innym środowisku lub w skryptach, musisz jawnie wyświetlić lub zapisać wyniki.
Większość funkcji zwraca obrazy będące obiektami matplotlib.Figure. Dostępne są dwie opcje:
- Wywołaj
.show()na zwróconym obiekcie, aby otworzyć obraz w nowym oknie (przy założeniu, że skonfigurowany backend matplotlib jest interaktywny). - Wywołaj
.savefig("out.png"), aby zapisać rysunek do plikuout.pngw bieżącym katalogu roboczym. Metodasavefig()przyjmuje ścieżkę, więc możesz dostosować lokalizację i nazwę pliku, w którym zapisujesz wynik. Na przykład:plot_state_city(psi).savefig("out.png").
Wyniki w formacie LaTeX to obiekty IPython.display.Latex. Najlepszym rozwiązaniem w środowisku innym niż Jupyter jest unikanie tego wyjścia poprzez wydrukowanie stanu jako reprezentacji tekstowej lub przełączenie się na drawer latex_source, który zwraca ciąg znaków źródłowych LaTeX.
Stan kwantowy to macierz gęstości (macierz hermitowska) lub wektor stanu (wektor zespolony). Macierz gęstości jest powiązana z wektorem stanu przez
i jest bardziej ogólna, ponieważ może reprezentować stany mieszane (dodatnie sumy wektorów stanu)
Qiskit reprezentuje stany kwantowe za pomocą klas Statevector i DensityMatrix oraz udostępnia wiele funkcji wizualizacji. Zapoznaj się z sekcjami po poniższej komórce kodu, aby zobaczyć, jak różne funkcje wizualizacji Qiskit wykreślają następujący stan kwantowy.
# 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
Choć technicznie nie jest to „wykres", Qiskit potrafi renderować reprezentacje LaTeX zarówno obiektów Statevector, jak i DensityMatrix, które wyświetlają się czytelnie w notebookach Jupyter. Są one zgodne ze standardowymi konwencjami matematycznymi zapisu stanów kwantowych. Dowiedz się więcej w artykule Basics of quantum information: Single systems.
Wektory stanu domyślnie używają „notacji ket", natomiast macierze gęstości wyświetlane są jako macierz 2×2.
Możesz również zastąpić "latex" przez "latex_source", aby uzyskać surowy ciąg znaków LaTeX.
Ten wykres przedstawia części rzeczywiste i urojone każdego elementu macierzy gęstości w postaci dwóch trójwymiarowych wykresów słupkowych. Nosi nazwę wykresu „city" (miasto), ponieważ słupki przypominają wieżowce w mieście. Stan, który wykreślamy, ma następującą macierz gęstości.
Więcej informacji znajdziesz w dokumentacji API.
Ten wykres jest bardzo podobny do wykresu „city", ale wielkość każdego elementu jest reprezentowana przez rozmiar kwadratu, a nie wysokość słupka. Białe kwadraty reprezentują elementy o wartościach dodatnich, a czarne kwadraty – elementy o wartościach ujemnych. Stan, który wykreślamy, ma następującą macierz gęstości.
Więcej informacji znajdziesz w dokumentacji API.
Obserwabla to sposób pomiaru stanu kwantowego taki, że możliwe wyniki pomiaru są liczbami rzeczywistymi. Wartość oczekiwana wyniku jest też znana jako wartość oczekiwana obserwabli na danym stanie i można ją rozumieć jako średnią z nieskończenie wielu obserwacji tego stanu.
Iloczyny tensorowe macierzy Pauliego to obserwable zwracające +1 lub -1. Ten wykres przedstawia wartości oczekiwane stanu na różnych operatorach Pauliego jako wykres słupkowy. Wszystkie macierze gęstości można zapisać jako sumę tych macierzy Pauliego, ważoną ich wartościami oczekiwanymi.
Na przykład ten stan można zapisać jako sumę składników:
Możesz też obliczyć te współczynniki przy użyciu SparsePauliOp.
Więcej informacji znajdziesz w dokumentacji API.
„QSphere" to charakterystyczny dla Qiskit widok stanu kwantowego, w którym amplituda i faza każdego elementu wektora stanu są wykreślone na powierzchni sfery. Grubość każdej kropki reprezentuje amplitudę, a kolor – fazę. Dla stanów mieszanych wyświetlana jest sfera dla każdego składnika.
Więcej informacji znajdziesz w dokumentacji API.
Wektor Blocha stanu Qubit to jego wartość oczekiwana w obserwablach Pauliego X, Y i Z odwzorowana na osie X, Y i Z trójwymiarowej przestrzeni. Ten wykres rzutuje wieloqubitowe stany kwantowe na przestrzeń jednoqubitową i wykreśla każdy Qubit na sferze Blocha. Ta wizualizacja pokazuje jedynie wartości oczekiwane poszczególnych Qubitów. Nie może pokazać korelacji między Qubitami i dlatego nie opisuje w pełni splątanych stanów kwantowych.
Więcej informacji znajdziesz w dokumentacji 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")
Opcje funkcji wykreślania stanów
Wszystkie funkcje wykreślania stanów przyjmują następujące argumenty (z wyjątkiem drawera LaTeX, który nie zwraca figury Matplotlib, oraz plot_state_qsphere, który przyjmuje tylko figsize):
- title (str): ciąg znaków stanowiący tytuł wykresu, wyświetlany u góry
- figsize (tuple): rozmiar figury w calach (szerokość, wysokość)
Funkcje plot_state_city i plot_state_paulivec przyjmują również argument color (lista ciągów znaków) określający kolory słupków. Więcej informacji znajdziesz w dokumentacji API.
Następne kroki
- Chcesz odświeżyć wiedzę z zakresu informacji kwantowej? Sprawdź kurs Basics of quantum information na IBM Quantum Learning.
- Przeczytaj wskazówki dla współtwórców, jeśli chcesz wnieść wkład do open-source'owego Qiskit SDK.