Implementasyon sa Qiskit
Sa nakaraang aralin, unang tinuklas ang mga klase na Statevector at Operator sa Qiskit, at ginamit ang mga ito para mag-simulate ng mga operasyon at sukat sa mga single qubit.
Sa seksyong ito, gagamitin natin ang mga klaseng ito para tuklasin ang gawi ng maramihang qubit.
# Added by doQumentation β required packages for this notebook
!pip install -q numpy qiskit
from qiskit import __version__
print(__version__)
2.1.1
Magsisimula tayo sa pag-import ng mga klase na Statevector at Operator, pati na rin ang square root function mula sa NumPy.
Sa susunod, sa pangkalahatan, uunahin nating ayusin ang lahat ng kinakailangang import sa simula ng bawat aralin.
from qiskit.quantum_info import Statevector, Operator
from numpy import sqrt
Mga tensor productβ
Ang klase na Statevector ay may tensor na method, na nagbabalik ng tensor product ng Statevector na iyon kasama ang isa pa, na ibinibigay bilang argumento.
Ang argumento ay itinuturing bilang tensor factor sa kanan.
Halimbawa, sa ibaba ay gumagawa tayo ng dalawang state vector na kumakatawan sa at at ginagamit ang tensor method para gumawa ng bagong vector,
Pansinin dito na ginagamit natin ang from_label method para tukuyin ang mga estado na at sa halip na tukuyin ang mga ito nang ating sarili.
zero = Statevector.from_label("0")
one = Statevector.from_label("1")
psi = zero.tensor(one)
display(psi.draw("latex"))
Kasama sa ibang pinahihintulutang label ang "+" at "-" para sa plus at minus states, at "r" at "l" (maikli para sa "right" at "left") para sa mga estado
Dito, ang "+", "-" o "right" at "left" ay nagmumula sa konteksto ng quantum mechanical spin, kung saan ang bahagi ng spin ay maaaring tumuro sa kaliwa o kanan sa isang eksperimento; hindi ito tumutukoy sa pinaka-kanan o pinaka-kaliwang qubit sa mga sistema ng maramihang qubit. Narito ang isang halimbawa ng tensor product ng at
plus = Statevector.from_label("+")
minus_i = Statevector.from_label("l")
phi = plus.tensor(minus_i)
display(phi.draw("latex"))
Isa pang alternatibo ay ang paggamit ng operasyong ^ para sa mga tensor product, na natural na nagbibigay ng parehong resulta.
display((plus ^ minus_i).draw("latex"))
Ang klase na Operator ay mayroon ding tensor method (pati na rin ang from_label method), tulad ng makikita sa mga sumusunod na halimbawa.
H = Operator.from_label("H")
Id = Operator.from_label("I")
X = Operator.from_label("X")
display(H.tensor(Id).draw("latex"))
display(H.tensor(Id).tensor(X).draw("latex"))
Muli, tulad ng sa kaso ng vector, katumbas ang operasyong ^.
display((H ^ Id ^ X).draw("latex"))
Ang mga compound state ay maaaring i-evolve gamit ang mga compound na operasyon tulad ng inaasahan β katulad ng nakita natin para sa mga single system sa nakaraang aralin. Halimbawa, kinakalkula ng sumusunod na code ang estado para sa (na tinukoy na sa itaas).
display(phi.evolve(H ^ Id).draw("latex"))
Narito ang ilang code na nagtatakda ng na operasyon at kinakalkula ang para sa Para maging malinaw, ito ay isang na operasyon kung saan ang qubit sa kaliwa ang kontrol at ang qubit sa kanan ang target. Ang resulta ay ang Bell state na
CX = Operator([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 0, 1], [0, 0, 1, 0]])
psi = plus.tensor(zero)
display(psi.evolve(CX).draw("latex"))
Mga partial measurementβ
Sa nakaraang aralin, ginamit natin ang measure method para mag-simulate ng sukat ng isang quantum state vector.
Ang method na ito ay nagbabalik ng dalawang bagay: ang na-simulate na resulta ng sukat, at ang bagong Statevector batay sa sukat na iyon.
Sa default, sinusukat ng measure ang lahat ng qubit sa state vector.
Maaari naman tayong magbigay ng listahan ng mga integer bilang argumento, na nagiging dahilan upang ang mga qubit index na iyon lamang ang masuri.
Para ipakita ito, ang code sa ibaba ay gumagawa ng estado
at sinusukat ang qubit number 0, na siyang pinakakanang qubit. (Binibilang ng Qiskit ang mga qubit simula sa 0, mula kanan hanggang kaliwa. Babalik tayo sa convention na ito ng numbering sa susunod na aralin.)
w = Statevector([0, 1, 1, 0, 1, 0, 0, 0] / sqrt(3))
display(w.draw("latex"))
result, state = w.measure([0])
print(f"Measured: {result}\nState after measurement:")
display(state.draw("latex"))
result, state = w.measure([0, 1])
print(f"Measured: {result}\nState after measurement:")
display(state.draw("latex"))
Measured: 0
State after measurement:
Measured: 00
State after measurement: