Edukacja

Superpozycja


Informatyka kwantowa wykorzystuje kluczowe zjawiska opisujące zachowanie cząstek w mikroskali, takie jak superpozycja, która umożliwia cząstce przebywanie jednocześnie w wielu możliwych stanach. Dopiero wykonanie pomiaru powoduje ujawnienie konkretnej wartości. Superpozycja jest jednym z elementów umożliwiających tworzenie bardzo złożonych stanów kwantowych, trudnych do obliczenia klasycznymi metodami.

Superpozycja to stan, w którym kubit znajduje się w kilku stanach jednocześnie. Jedną z bramek, która może utworzyć stan superpozycji jest bramka Hadamarda. Jej zapis macierzowy ma następującą postać:

    \[H = \frac{1}{\sqrt{2}} \begin{bmatrix} 1 & 1\\ 1 & -1 \end{bmatrix}\]

Wartość \frac{1}{\sqrt{2}} odpowiada za normalizację amplitudy. Zauważmy, że bramka Hadamarda działając na każdy z dwóch stanów bazowych, doprowadza do sytuacji, w której prawdopodobieństwa zmierzenia stanów |0\rangle i |1\rangle są identyczne i równe 50%.

    \[H|0\rangle = \frac{1}{\sqrt{2}} \begin{bmatrix} 1 & 1\\ 1 & -1 \end{bmatrix} \begin{bmatrix} 1\\ 0 \end{bmatrix} = \frac{1}{\sqrt{2}} \begin{bmatrix} 1\\ 1 \end{bmatrix} =  \frac{1}{\sqrt{2}} |0\rangle + \frac{1}{\sqrt{2}} |1\rangle = |+\rangle\]

    \[\left(\frac{1}{\sqrt{2}}\right)^2 = \frac{1}{2}\]

    \[H|1\rangle = \frac{1}{\sqrt{2}} \begin{bmatrix} 1 & 1\\ 1 & -1 \end{bmatrix} \begin{bmatrix} 0\\ 1 \end{bmatrix} = \frac{1}{\sqrt{2}} \begin{bmatrix} 1\\ -1 \end{bmatrix} =  \frac{1}{\sqrt{2}} |0\rangle - \frac{1}{\sqrt{2}} |1\rangle = |-\rangle\]

    \[\left(\frac{1}{\sqrt{2}}\right)^2 = \frac{1}{2}  \hspace{1cm} \left(-\frac{1}{\sqrt{2}}\right)^2 = \frac{1}{2}\]

Poniżej przedstawiono przykładowy obwód z bramką Hadamarda, który będzie na wyjściu mierzył 0 i 1 z prawdopodobieństwem równym \frac{1}{2}.

from qiskit import QuantumCircuit

qc = QuantumCircuit(1)
qc.h(0)
qc.measure_all()
qc.draw()Code language: Python (python)

W praktyce, ponieważ kod jest uruchamiany na symulatorze komputera kwantowego, rzeczywisty rozkład może różnić się od teoretycznego. Ważnym parametrem jest w tym przypadku liczba uruchomień obwodu — parametr shots. Zwiększenie go sprawia, że wyniki bliższe są teoretycznym przewidywaniom, ale wydłuża obliczenia, zwłaszcza dla bardziej złożonych obwodów.

from qiskit.primitives import StatevectorSampler
from qiskit.visualization import plot_histogram
 
sampler = StatevectorSampler()
job = sampler.run([qc], shots=1024)
result = job.result()[0]
counts =  result.data.meas.get_counts()

plot_histogram(counts)
Code language: Python (python)