Langkau ke kandungan utama

Sintesis operasi unitary

Versi pakej

Kod pada halaman ini dibangunkan menggunakan keperluan berikut. Kami mengesyorkan menggunakan versi ini atau yang lebih baharu.

qiskit[all]~=2.3.0

Operasi unitary menerangkan perubahan yang memelihara norma kepada sistem kuantum. Untuk nn Qubit, perubahan ini diterangkan oleh matriks kompleks berdimensi 2nΓ—2n2^n \times 2^n UU yang adjointnya sama dengan songsangnya, iaitu U†U=1U^\dagger U = \mathbb{1}.

Mensintesis operasi unitary tertentu kepada set Gate kuantum adalah tugas asas yang digunakan, contohnya, dalam reka bentuk dan penggunaan algoritma kuantum atau dalam mengkompilasi litar kuantum.

Walaupun sintesis yang cekap adalah mungkin untuk kelas unitary tertentu β€” seperti yang terdiri daripada Gate Clifford atau mempunyai struktur hasil darab tensor β€” kebanyakan unitary tidak termasuk dalam kategori ini. Bagi matriks unitary umum, sintesis adalah tugas yang rumit dengan kos pengiraan yang meningkat secara eksponen dengan bilangan Qubit. Oleh itu, jika anda mengetahui penguraian cekap untuk unitary yang ingin anda laksanakan, ia kemungkinan besar lebih baik daripada sintesis umum.

nota

Jika tiada penguraian tersedia, Qiskit SDK menyediakan anda dengan alat untuk mencarinya. Namun, perhatikan bahawa ini umumnya menghasilkan litar yang dalam yang mungkin tidak sesuai untuk dijalankan pada komputer kuantum berbising.

# Added by doQumentation β€” required packages for this notebook
!pip install -q numpy qiskit
import numpy as np
from qiskit import QuantumCircuit

U = 0.5 * np.array(
[[1, 1, 1, 1], [-1, 1, -1, 1], [-1, -1, 1, 1], [-1, 1, 1, -1]]
)

circuit = QuantumCircuit(2)
circuit.unitary(U, circuit.qubits)
<qiskit.circuit.instructionset.InstructionSet at 0x7fedb83e7a90>

Sintesis semula untuk pengoptimuman litar​

Kadangkala bermanfaat untuk mensintesis semula siri panjang Gate satu dan dua Qubit, jika panjangnya boleh dikurangkan. Contohnya, litar berikut menggunakan tiga Gate dua Qubit.

from qiskit import QuantumRegister, ClassicalRegister, QuantumCircuit

qreg_q = QuantumRegister(2, "q")
creg_c = ClassicalRegister(4, "c")
circuit = QuantumCircuit(qreg_q, creg_c)

circuit.h(qreg_q[0])
circuit.cx(qreg_q[0], qreg_q[1])
circuit.sx(qreg_q[1])
circuit.cz(qreg_q[0], qreg_q[1])
circuit.x(qreg_q[1])
circuit.x(qreg_q[0])
circuit.cx(qreg_q[0], qreg_q[1])
circuit.h(qreg_q[0])
circuit.draw("mpl")

Output of the previous code cell

Namun, selepas disintesis semula dengan kod berikut, ia hanya memerlukan satu Gate CX. (Di sini kami menggunakan kaedah QuantumCircuit.decompose() untuk memvisualisasikan dengan lebih baik Gate yang digunakan untuk mensintesis semula unitary.)

from qiskit.quantum_info import Operator

# compute unitary matrix of circuit
U = Operator(circuit)

# re-synthesize
better_circuit = QuantumCircuit(2)
better_circuit.unitary(U, range(2))
better_circuit.decompose().draw()
global phase: 6.2071
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
q_0: ── U(Ο€/2,Ο€/2,-Ο€) β”œβ”€β”€β”€β”€β– β”€β”€β”€β”€β”€ U(Ο€/2,-Ο€,-Ο€/2) β”œβ”€
β”Œβ”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”β”Œβ”€β”΄β”€β”β”Œβ”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”
q_1: ─ U(1.7229,Ο€/2,-Ο€) β”œβ”€ X β”œβ”€ U(Ο€/2,0.15207,-Ο€) β”œ
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜β””β”€β”€β”€β”˜β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Fungsi transpile Qiskit secara automatik melakukan sintesis semula ini untuk tahap pengoptimuman yang cukup tinggi.

Langkah seterusnya​

Cadangan
Source: IBM Quantum docs β€” updated 27 Apr 2026
English version on doQumentation β€” updated 7 Mei 2026
This translation based on the English version of 11 Mac 2026