Lewati ke konten utama

Implementasi Qiskit

Pada pelajaran sebelumnya, kita sudah melihat pertama kali kelas Statevector dan Operator di Qiskit, dan menggunakannya untuk mensimulasikan operasi dan pengukuran pada qubit tunggal. Di bagian ini, kita akan menggunakan kelas-kelas ini untuk mengeksplorasi perilaku beberapa 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 mulai dengan mengimpor kelas Statevector dan Operator, serta fungsi akar kuadrat dari NumPy. Selanjutnya, secara umum, kita akan mengurus semua impor yang diperlukan terlebih dahulu dalam setiap pelajaran.

from qiskit.quantum_info import Statevector, Operator
from numpy import sqrt

Perkalian tensor​

Kelas Statevector memiliki metode tensor, yang mengembalikan perkalian tensor dari Statevector tersebut dengan yang lain, diberikan sebagai argumen. Argumen diinterpretasikan sebagai faktor tensor di sebelah kanan.

Misalnya, di bawah ini kita membuat dua vektor keadaan yang merepresentasikan ∣0⟩\vert 0\rangle dan ∣1⟩,\vert 1\rangle, dan menggunakan metode tensor untuk membuat vektor baru, ∣ψ⟩=∣0βŸ©βŠ—βˆ£1⟩.\vert \psi\rangle = \vert 0\rangle \otimes \vert 1\rangle. Perhatikan di sini bahwa kita menggunakan metode from_label untuk mendefinisikan keadaan ∣0⟩\vert 0\rangle dan ∣1⟩,\vert 1\rangle, daripada mendefinisikannya 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 diizinkan termasuk "+" dan "-" untuk keadaan plus dan minus, serta "r" dan "l" (singkatan dari "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 spin mekanika kuantum, di mana komponen spin bisa menunjuk ke kiri atau kanan dalam sebuah eksperimen; ini tidak merujuk pada qubit paling kanan atau paling kiri dalam sistem beberapa qubit. Berikut contoh perkalian tensor dari ∣+⟩\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

Alternatifnya adalah menggunakan operasi ^ untuk perkalian tensor, yang secara alami memberikan hasil 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 memiliki metode tensor (serta metode from_label), seperti yang kita lihat dalam contoh-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 kasus vektor, operasi ^ 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 gabungan bisa dievolusi menggunakan operasi gabungan seperti yang kita harapkan β€” sama seperti yang kita lihat untuk sistem tunggal pada pelajaran sebelumnya. Misalnya, kode berikut menghitung keadaan (HβŠ—I)βˆ£Ο•βŸ©(H\otimes I)\vert\phi\rangle untuk βˆ£Ο•βŸ©=∣+βŸ©βŠ—βˆ£βˆ’i⟩\vert\phi\rangle = \vert + \rangle \otimes \vert {-i}\rangle (yang sudah didefinisikan 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 kode yang mendefinisikan operasi CXCX dan menghitung CX∣ψ⟩CX \vert\psi\rangle untuk ∣ψ⟩=∣+βŸ©βŠ—βˆ£0⟩.\vert\psi\rangle = \vert + \rangle \otimes \vert 0 \rangle. Untuk kejelasan, ini adalah operasi CXCX di mana qubit kiri adalah control dan qubit kanan adalah target. Hasilnya adalah 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 parsial​

Pada pelajaran sebelumnya, kita menggunakan metode measure untuk mensimulasikan pengukuran vektor keadaan kuantum. Metode ini mengembalikan dua item: hasil pengukuran yang disimulasikan, dan Statevector baru setelah pengukuran tersebut.

Secara default, measure mengukur semua qubit dalam vektor keadaan. Kita juga bisa memberikan daftar bilangan bulat sebagai argumen, yang menyebabkan hanya indeks qubit tersebut yang diukur. Untuk mendemonstrasikan ini, kode di bawah membuat keadaan

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

dan mengukur qubit nomor 0, yang merupakan qubit paling kanan. (Qiskit menomori qubit mulai dari 0, dari kanan ke kiri. Kita akan kembali ke konvensi penomoran ini pada pelajaran berikutnya.)

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. 27 Mar 2026