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 dan dan menggunakan metode tensor untuk membuat vektor baru,
Perhatikan di sini bahwa kita menggunakan metode from_label untuk mendefinisikan keadaan dan daripada mendefinisikannya sendiri.
zero = Statevector.from_label("0")
one = Statevector.from_label("1")
psi = zero.tensor(one)
display(psi.draw("latex"))
Label lain yang diizinkan termasuk "+" dan "-" untuk keadaan plus dan minus, serta "r" dan "l" (singkatan dari "right" dan "left") untuk keadaan
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 dan
plus = Statevector.from_label("+")
minus_i = Statevector.from_label("l")
phi = plus.tensor(minus_i)
display(phi.draw("latex"))
Alternatifnya adalah menggunakan operasi ^ untuk perkalian tensor, yang secara alami memberikan hasil yang sama.
display((plus ^ minus_i).draw("latex"))
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"))
Sekali lagi, seperti dalam kasus vektor, operasi ^ setara.
display((H ^ Id ^ X).draw("latex"))
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 untuk (yang sudah didefinisikan di atas).
display(phi.evolve(H ^ Id).draw("latex"))
Berikut kode yang mendefinisikan operasi dan menghitung untuk Untuk kejelasan, ini adalah operasi di mana qubit kiri adalah control dan qubit kanan adalah target. Hasilnya adalah 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 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
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"))
Measured: 0
State after measurement:
Measured: 00
State after measurement: