Pelaksanaan Qiskit
Dalam pelajaran sebelumnya, kita melihat pertama kali kelas Statevector dan Operator dalam Qiskit, dan menggunakannya untuk mensimulasikan operasi dan pengukuran pada qubit tunggal.
Dalam bahagian ini, kita akan menggunakan kelas-kelas ini untuk meneroka tingkah laku berbilang qubit.
# Added by doQumentation — required packages for this notebook
!pip install -q numpy qiskit
from qiskit import __version__
print(__version__)
2.1.1
Kita akan mulakan dengan mengimport kelas Statevector dan Operator, serta fungsi punca kuasa dua daripada NumPy.
Mulai sekarang, secara amnya, kita akan menjaga semua import yang diperlukan terlebih dahulu dalam setiap pelajaran.
from qiskit.quantum_info import Statevector, Operator
from numpy import sqrt
Hasil darab tensor
Kelas Statevector mempunyai kaedah tensor, yang mengembalikan hasil darab tensor Statevector itu dengan yang lain, yang diberikan sebagai argumen.
Argumen itu ditafsirkan sebagai faktor tensor di sebelah kanan.
Contohnya, di bawah kita mencipta dua vektor keadaan yang mewakili dan dan menggunakan kaedah tensor untuk mencipta vektor baru,
Perhatikan di sini kita menggunakan kaedah from_label untuk mentakrifkan keadaan dan dan bukannya mentakrifkannya sendiri.
zero = Statevector.from_label("0")
one = Statevector.from_label("1")
psi = zero.tensor(one)
display(psi.draw("latex"))
Label lain yang dibenarkan termasuk "+" dan "-" untuk keadaan tambah dan tolak, serta "r" dan "l" (singkatan bagi "right" dan "left") untuk keadaan
Di sini, "+", "-" atau "right" dan "left" berasal dari konteks putaran mekanik kuantum, di mana suatu komponen putaran mungkin menghala ke kiri atau ke kanan dalam eksperimen; ia tidak merujuk kepada qubit paling kanan atau paling kiri dalam sistem berbilang qubit. Berikut adalah contoh hasil darab tensor dan
plus = Statevector.from_label("+")
minus_i = Statevector.from_label("l")
phi = plus.tensor(minus_i)
display(phi.draw("latex"))
Alternatif lain ialah menggunakan operasi ^ untuk hasil darab tensor, yang secara semula jadinya memberikan keputusan yang sama.
display((plus ^ minus_i).draw("latex"))
Kelas Operator juga mempunyai kaedah tensor (serta kaedah from_label), seperti yang kita lihat dalam contoh berikut.
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"))
Sekali lagi, seperti dalam kes vektor, operasi ^ adalah setara.
display((H ^ Id ^ X).draw("latex"))
Keadaan gubahan boleh dievolusi menggunakan operasi gabungan seperti yang dijangkakan — sama seperti yang kita lihat untuk sistem tunggal dalam pelajaran sebelumnya. Contohnya, kod berikut mengira keadaan untuk (yang telah ditakrifkan di atas).
display(phi.evolve(H ^ Id).draw("latex"))
Berikut adalah kod yang mentakrifkan operasi dan mengira untuk Untuk jelaskan, ini adalah operasi di mana qubit di sebelah kiri adalah kawalan dan qubit di sebelah kanan adalah sasaran. Hasilnya ialah keadaan Bell
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"))
Pengukuran separa
Dalam pelajaran sebelumnya, kita menggunakan kaedah measure untuk mensimulasikan pengukuran vektor keadaan kuantum.
Kaedah ini mengembalikan dua item: keputusan pengukuran yang disimulasikan, dan Statevector baru setelah pengukuran itu.
Secara lalai, measure mengukur semua qubit dalam vektor keadaan.
Kita boleh, secara alternatif, memberikan senarai integer sebagai argumen, yang menyebabkan hanya indeks qubit tersebut sahaja diukur.
Untuk menunjukkan ini, kod di bawah mencipta keadaan
dan mengukur qubit nombor 0, iaitu qubit paling kanan. (Qiskit menomborkan qubit bermula dari 0, dari kanan ke kiri. Kita akan kembali kepada konvensyen penomboran ini dalam pelajaran seterusnya.)
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: