Langkau ke kandungan utama

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 ∣0⟩\vert 0\rangle dan ∣1⟩,\vert 1\rangle, dan menggunakan kaedah tensor untuk mencipta vektor baru, ∣ψ⟩=∣0βŸ©βŠ—βˆ£1⟩.\vert \psi\rangle = \vert 0\rangle \otimes \vert 1\rangle. Perhatikan di sini kita menggunakan kaedah from_label untuk mentakrifkan keadaan ∣0⟩\vert 0\rangle dan ∣1⟩,\vert 1\rangle, dan bukannya mentakrifkannya sendiri.

zero = Statevector.from_label("0")
one = Statevector.from_label("1")
psi = zero.tensor(one)
display(psi.draw("latex"))

∣01⟩ |01\rangle

Label lain yang dibenarkan termasuk "+" dan "-" untuk keadaan tambah dan tolak, serta "r" dan "l" (singkatan bagi "right" dan "left") untuk keadaan

∣+i⟩=12∣0⟩+i2∣1⟩andβˆ£βˆ’i⟩=12∣0βŸ©βˆ’i2∣1⟩.\vert {+i} \rangle = \frac{1}{\sqrt{2}} \vert 0 \rangle + \frac{i}{\sqrt{2}} \vert 1 \rangle \qquad\text{and}\qquad \vert {-i} \rangle = \frac{1}{\sqrt{2}} \vert 0 \rangle - \frac{i}{\sqrt{2}} \vert 1 \rangle.

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 ∣+⟩\vert {+} \rangle dan βˆ£βˆ’i⟩.\vert {-i} \rangle.

plus = Statevector.from_label("+")
minus_i = Statevector.from_label("l")
phi = plus.tensor(minus_i)
display(phi.draw("latex"))

12∣00βŸ©βˆ’i2∣01⟩+12∣10βŸ©βˆ’i2∣11⟩\frac{1}{2} |00\rangle- \frac{i}{2} |01\rangle+\frac{1}{2} |10\rangle- \frac{i}{2} |11\rangle

Alternatif lain ialah menggunakan operasi ^ untuk hasil darab tensor, yang secara semula jadinya memberikan keputusan yang sama.

display((plus ^ minus_i).draw("latex"))

12∣00βŸ©βˆ’i2∣01⟩+12∣10βŸ©βˆ’i2∣11⟩\frac{1}{2} |00\rangle- \frac{i}{2} |01\rangle+\frac{1}{2} |10\rangle- \frac{i}{2} |11\rangle

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"))
[220220022022220βˆ’2200220βˆ’22] \begin{bmatrix} \frac{\sqrt{2}}{2} & 0 & \frac{\sqrt{2}}{2} & 0 \\ 0 & \frac{\sqrt{2}}{2} & 0 & \frac{\sqrt{2}}{2} \\ \frac{\sqrt{2}}{2} & 0 & - \frac{\sqrt{2}}{2} & 0 \\ 0 & \frac{\sqrt{2}}{2} & 0 & - \frac{\sqrt{2}}{2} \\ \end{bmatrix} [0220002200220002200000022000220022000220022000βˆ’220022000βˆ’2200000022000βˆ’220022000βˆ’220] \begin{bmatrix} 0 & \frac{\sqrt{2}}{2} & 0 & 0 & 0 & \frac{\sqrt{2}}{2} & 0 & 0 \\ \frac{\sqrt{2}}{2} & 0 & 0 & 0 & \frac{\sqrt{2}}{2} & 0 & 0 & 0 \\ 0 & 0 & 0 & \frac{\sqrt{2}}{2} & 0 & 0 & 0 & \frac{\sqrt{2}}{2} \\ 0 & 0 & \frac{\sqrt{2}}{2} & 0 & 0 & 0 & \frac{\sqrt{2}}{2} & 0 \\ 0 & \frac{\sqrt{2}}{2} & 0 & 0 & 0 & - \frac{\sqrt{2}}{2} & 0 & 0 \\ \frac{\sqrt{2}}{2} & 0 & 0 & 0 & - \frac{\sqrt{2}}{2} & 0 & 0 & 0 \\ 0 & 0 & 0 & \frac{\sqrt{2}}{2} & 0 & 0 & 0 & - \frac{\sqrt{2}}{2} \\ 0 & 0 & \frac{\sqrt{2}}{2} & 0 & 0 & 0 & - \frac{\sqrt{2}}{2} & 0 \\ \end{bmatrix}

Sekali lagi, seperti dalam kes vektor, operasi ^ adalah setara.

display((H ^ Id ^ X).draw("latex"))
[0220002200220002200000022000220022000220022000βˆ’220022000βˆ’2200000022000βˆ’220022000βˆ’220] \begin{bmatrix} 0 & \frac{\sqrt{2}}{2} & 0 & 0 & 0 & \frac{\sqrt{2}}{2} & 0 & 0 \\ \frac{\sqrt{2}}{2} & 0 & 0 & 0 & \frac{\sqrt{2}}{2} & 0 & 0 & 0 \\ 0 & 0 & 0 & \frac{\sqrt{2}}{2} & 0 & 0 & 0 & \frac{\sqrt{2}}{2} \\ 0 & 0 & \frac{\sqrt{2}}{2} & 0 & 0 & 0 & \frac{\sqrt{2}}{2} & 0 \\ 0 & \frac{\sqrt{2}}{2} & 0 & 0 & 0 & - \frac{\sqrt{2}}{2} & 0 & 0 \\ \frac{\sqrt{2}}{2} & 0 & 0 & 0 & - \frac{\sqrt{2}}{2} & 0 & 0 & 0 \\ 0 & 0 & 0 & \frac{\sqrt{2}}{2} & 0 & 0 & 0 & - \frac{\sqrt{2}}{2} \\ 0 & 0 & \frac{\sqrt{2}}{2} & 0 & 0 & 0 & - \frac{\sqrt{2}}{2} & 0 \\ \end{bmatrix}

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 (HβŠ—I)βˆ£Ο•βŸ©(H\otimes I)\vert\phi\rangle untuk βˆ£Ο•βŸ©=∣+βŸ©βŠ—βˆ£βˆ’i⟩\vert\phi\rangle = \vert + \rangle \otimes \vert {-i}\rangle (yang telah ditakrifkan di atas).

display(phi.evolve(H ^ Id).draw("latex"))

22∣00βŸ©βˆ’2i2∣01⟩\frac{\sqrt{2}}{2} |00\rangle- \frac{\sqrt{2} i}{2} |01\rangle

Berikut adalah kod yang mentakrifkan operasi CXCX dan mengira CX∣ψ⟩CX \vert\psi\rangle untuk ∣ψ⟩=∣+βŸ©βŠ—βˆ£0⟩.\vert\psi\rangle = \vert + \rangle \otimes \vert 0 \rangle. Untuk jelaskan, ini adalah operasi CXCX di mana Qubit di sebelah kiri adalah kawalan dan Qubit di sebelah kanan adalah sasaran. Hasilnya ialah keadaan Bell βˆ£Ο•+⟩.\vert\phi^{+}\rangle.

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"))

22∣00⟩+22∣11⟩\frac{\sqrt{2}}{2} |00\rangle+\frac{\sqrt{2}}{2} |11\rangle

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

∣w⟩=∣001⟩+∣010⟩+∣100⟩3\vert w\rangle = \frac{\vert 001\rangle + \vert 010\rangle + \vert 100\rangle}{\sqrt{3}}

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"))

33∣001⟩+33∣010⟩+33∣100⟩\frac{\sqrt{3}}{3} |001\rangle+\frac{\sqrt{3}}{3} |010\rangle+\frac{\sqrt{3}}{3} |100\rangle

Measured: 0
State after measurement:

22∣010⟩+22∣100⟩\frac{\sqrt{2}}{2} |010\rangle+\frac{\sqrt{2}}{2} |100\rangle

Measured: 00
State after measurement:

∣100⟩ |100\rangle

Source: IBM Quantum docs β€” updated 15 Jan 2026
English version on doQumentation β€” updated 7 Mei 2026
This translation based on the English version of approx. 26 Mac 2026