Jelmaan Fourier kuantum
Untuk modul Qiskit in Classrooms ini, pelajar perlu mempunyai persekitaran Python yang berfungsi dengan pakej-pakej berikut dipasang:
qiskitv2.1.0 atau lebih baharuqiskit-ibm-runtimev0.40.1 atau lebih baharuqiskit-aerv0.17.0 atau lebih baharuqiskit.visualizationnumpypylatexenc
Untuk menyediakan dan memasang pakej-pakej di atas, lihat panduan Pasang Qiskit. Untuk menjalankan kerja pada komputer kuantum sebenar, pelajar perlu menyediakan akaun dengan IBM Quantum® dengan mengikuti langkah-langkah dalam panduan Sediakan akaun IBM Cloud anda.
Modul ini telah diuji dan menggunakan 13 saat masa QPU. Ini adalah anggaran semaksimum mungkin; penggunaan sebenar anda mungkin berbeza.
# Added by doQumentation — required packages for this notebook
!pip install -q numpy qiskit qiskit-aer qiskit-ibm-runtime
# Uncomment and modify this line as needed to install dependencies
#!pip install 'qiskit>=2.1.0' 'qiskit-ibm-runtime>=0.40.1' 'qiskit-aer>=0.17.0' 'numpy' 'pylatexenc'
Pengenalan
Jelmaan Fourier ialah alat yang sangat meluas digunakan dalam matematik, fizik, pemprosesan isyarat, pemampatan data, dan banyak bidang lain. Versi kuantum jelmaan Fourier, yang tepat dinamakan jelmaan Fourier kuantum, menjadi asas kepada beberapa algoritma kuantum yang paling penting.
Hari ini, selepas mengimbas kembali jelmaan Fourier klasik, kita akan bincang bagaimana kita melaksanakan jelmaan Fourier kuantum pada komputer kuantum. Kemudian, kita akan bincang salah satu aplikasi jelmaan Fourier kuantum kepada algoritma yang dipanggil algoritma anggaran fasa. Anggaran fasa kuantum adalah subrutin dalam algoritma pemfaktoran Shor yang terkenal, yang kadangkala dirujuk sebagai "permata mahkota" pengkomputeran kuantum. Modul ini membina ke arah modul lain tentang algoritma Shor, tetapi ia juga dimaksudkan untuk berdiri sendiri. Jelmaan Fourier kuantum ialah algoritma yang menakjubkan dan berguna dengan sendirinya!
Jelmaan Fourier klasik
Sebelum kita terjun ke jelmaan Fourier kuantum, mari kita imbas kembali versi klasiknya. Jelmaan Fourier ialah kaedah mengubah dari satu yang dipanggil "asas" ke asas yang lain. Anda boleh fikir dua asas sebagai perspektif berbeza untuk masalah yang sama — keduanya adalah cara yang sah untuk menyatakan sesuatu fungsi, tetapi salah satunya mungkin lebih menerangkan bergantung pada masalah yang ada. Beberapa contoh pasangan asas yang dihubungkan oleh jelmaan Fourier ialah kedudukan dan momentum, serta masa dan frekuensi.
Mari lihat contoh bagaimana jelmaan Fourier boleh membantu kita mengetahui nota yang dimainkan oleh sebuah alat muzik berdasarkan bentuk gelombang audionya. Biasanya, kita melihat bentuk gelombang diwakili dalam asas masa — iaitu, amplitud gelombang dinyatakan sebagai fungsi masa.

Kita boleh jelmakan bentuk gelombang ini untuk bergerak dari asas masa ke asas frekuensi:

Dalam asas frekuensi, kita mudah nampak puncak yang jelas pada kira-kira 260 Hz. Itu adalah C tengah!
Mungkin anda boleh tentukan bahawa C tengah sedang dimainkan tanpa menggunakan jelmaan Fourier, tetapi bagaimana jika beberapa nota dimainkan serentak? Maka bentuk gelombang menjadi lebih rumit apabila kita plot dalam asas masa:

Tetapi spektrum frekuensi jelas mengenal pasti tiga puncak:

Ini ialah akor C-major, memainkan nota C, E, dan G.
Jenis analisis Fourier ini boleh membantu kita mengekstrak komponen frekuensi bagi mana-mana isyarat yang rumit.
Jelmaan Fourier diskret
Jelmaan Fourier berguna untuk pelbagai aplikasi pemprosesan isyarat. Tetapi dalam kebanyakan aplikasi dunia sebenar ini (termasuk contoh muzik yang kita gunakan di atas), kita ingin mengubah set data diskret sebanyak titik — bukan fungsi berterusan. Dalam kes ini, kita menggunakan jelmaan Fourier diskret. Jelmaan Fourier diskret (DFT) bertindak ke atas vektor dan memetakannya ke vektor mengikut formula:
di mana kita ambil . (Perhatikan bahawa terdapat konvensyen lain yang mempunyai tanda negatif dalam eksponen, jadi berhati-hati apabila anda melihat DFT di luar sana.) Ingat bahawa ialah fungsi berkala, dengan tempoh . Jadi, dengan mendarab dengan fungsi ini, jelmaan Fourier pada dasarnya adalah cara untuk memecahkan fungsi (diskret) kepada kombinasi linear fungsi-fungsi berkala yang membentuknya, masing-masing dengan tempoh .
Jelmaan Fourier kuantum
Jadi kini, kita telah melihat bagaimana jelmaan Fourier digunakan untuk mewakili fungsi sebagai kombinasi linear set baharu yang dipanggil "fungsi asas." Transformasi asas juga kerap dilakukan ke atas keadaan Qubit. Sebagai contoh, keadaan satu Qubit boleh dinyatakan dalam asas komputasi , dengan keadaan asas dan , atau dalam asas dengan keadaan asas dan . Kedua-duanya sama sah, tetapi salah satunya mungkin lebih semula jadi bergantung pada jenis masalah yang cuba anda selesaikan.
Keadaan Qubit juga boleh dinyatakan dalam asas Fourier di mana keadaan dinyatakan dalam sebutan kombinasi linear keadaan asas Fourier , bukannya keadaan asas komputasi biasa, . Untuk melakukan ini, anda perlu menerapkan jelmaan Fourier kuantum (QFT):
dengan seperti di atas, dan ialah bilangan keadaan asas dalam sistem kuantum anda. Perhatikan bahawa, memandangkan kita kini bekerja dengan Qubit, Qubit memberi anda keadaan asas, jadi . Di sini, keadaan asas ditulis sebagai satu nombor di mana berkisar dari hingga , tetapi anda mungkin lebih kerap melihat keadaan asas dinyatakan sebagai , , , ..., , di mana setiap digit binari mewakili keadaan Qubit 0 hingga , dari kanan ke kiri. Terdapat cara mudah untuk menukar keadaan binari ini kepada satu nombor: layani sahaja ia seperti nombor binari! Jadi, , , , , dan seterusnya, sehinggalah .
Bina intuisi untuk keadaan asas Fourier
Jadi, kita baru sahaja bincangkan apakah keadaan asas komputasi dan bagaimana ia dipesan: ia adalah set keadaan di mana setiap Qubit sama ada berada dalam atau , dan kita pesan dari keadaan di mana semua Qubit adalah , , hingga keadaan di mana semuanya , .
Tetapi bagaimana kita memahami keadaan asas Fourier? Semua keadaan asas Fourier adalah superposisi sama rata bagi semua keadaan asas komputasi, tetapi setiap keadaan berbeza dari yang lain dalam kekerapan fasa komponen-komponennya. Untuk memahami ini dengan lebih konkret, mari lihat empat keadaan asas Fourier bagi sistem dua Qubit. Keadaan Fourier terendah adalah satu yang fasanya tidak berubah sama sekali:
Kita boleh gambarkan keadaan ini dengan memplot amplitud kompleks bagi setiap sebutan. Garis merah membimbing pandangan untuk menunjukkan bagaimana fasa amplitud ini berlegar-legar di satah kompleks sebagai fungsi keadaan asas komputasi. Untuk , fasa kekal malar:

Keadaan asas Fourier seterusnya ialah satu yang fasa komponennya berlegar dari hingga hanya sekali:
Dan kita boleh lihat perlegaraan ini dalam plot amplitud kompleks berbanding keadaan asas komputasi:

Jadi, setiap keadaan mempunyai fasa yang radian lebih tinggi daripada keadaan sebelumnya apabila dipesan dengan cara standard, kerana dalam contoh ini kita mempunyai empat keadaan asas (). Keadaan asas seterusnya berlegar dari 0 hingga dua kali:

Akhir sekali, komponen Fourier tertinggi ialah yang fasanya paling cepat berubah. Untuk contoh kita dengan dua Qubit, ia adalah satu yang fasanya berlegar dari 0 hingga tiga kali:

Secara umum, untuk keadaan -Qubit, terdapat keadaan asas Fourier, yang frekuensi variasi fasanya berkisar dari malar, untuk , hingga berubah dengan pantas untuk , melengkapkan perlegaraan sekitar melalui superposisi keadaan. Jadi, apabila kita mengambil QFT bagi keadaan kuantum, kita pada asasnya melakukan analisis asas yang sama seperti yang kita buat untuk bentuk gelombang muzik dalam Pengenalan. Kita menentukan komponen frekuensi Fourier yang menyumbang kepada mencipta keadaan kuantum yang diminati.
Cuba beberapa contoh QFT
Mari cuba terus membina intuisi kita untuk jelmaan Fourier kuantum dengan membuat keadaan dalam asas komputasi, kemudian melihat apa yang berlaku apabila kita menerapkan QFT padanya. Buat masa ini, kita akan anggap QFT sebagai kotak hitam yang kita terapkan menggunakan QFTGate daripada pustaka Circuit Qiskit. Kemudian, kita akan intip di bawah hood untuk melihat bagaimana ia dilaksanakan.
Kita mulakan dengan memuatkan pakej yang diperlukan dan memilih peranti untuk menjalankan Circuit kita:
import numpy as np
from qiskit import QuantumCircuit
from qiskit.visualization import plot_histogram
from qiskit.circuit.library import QFTGate
# Load the Qiskit Runtime service
from qiskit_ibm_runtime import QiskitRuntimeService
# Load the Runtime primitive and session
from qiskit_ibm_runtime import SamplerV2 as Sampler
service = QiskitRuntimeService()
# Use the least busy backend
# backend = service.least_busy(operational=True, simulator=False, min_num_qubits = 127)
backend = service.backend("ibm_pinguino2")
print(backend.name)
ibm_pinguino2
Jika anda tidak mempunyai masa yang tersedia pada akaun anda atau ingin menggunakan simulator atas sebab apa pun, anda boleh jalankan sel di bawah untuk menyediakan simulator yang akan meniru peranti kuantum yang kita pilih di atas:
# Load the backend sampler
from qiskit.primitives import BackendSamplerV2
# Load the Aer simulator and generate a noise model based on the currently-selected backend.
from qiskit_aer import AerSimulator
from qiskit_aer.noise import NoiseModel
noise_model = NoiseModel.from_backend(backend)
# Define a simulator using Aer, and use it in Sampler.
backend_sim = AerSimulator(noise_model=noise_model)
sampler_sim = BackendSamplerV2(backend=backend_sim)
# Alternatively, load a fake backend with generic properties and define a simulator.
from qiskit.providers.fake_provider import GenericBackendV2
backend_gen = GenericBackendV2(num_qubits=18)
sampler_gen = BackendSamplerV2(backend=backend_gen)
Keadaan asas komputasi tunggal
Pertama, mari cuba mengubah keadaan asas komputasi tunggal. Kita mulakan dengan membuat keadaan komputasi rawak:
# Step 1: Map
qubits = 4
N = 2**qubits
qc = QuantumCircuit(qubits)
# flip state of random qubits to put in a random single computational basis state
for i in range(1, qubits):
if np.random.randint(0, 2):
qc.x(i)
# make a copy of the above circuit. (to be used when we apply the QFT in next part)
qc_qft = qc.copy()
qc.measure_all()
qc.draw("mpl")
# Step 2: Transpile
from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager
target = backend.target
pm = generate_preset_pass_manager(target=target, optimization_level=3)
qc_isa = pm.run(qc)
# Step 3: Run the job on a real quantum computer OR try fake backend
sampler = Sampler(mode=backend)
pubs = [qc_isa]
# Run the job on real quantum device
job = sampler.run(pubs, shots=1000)
res = job.result()
counts = res[0].data.meas.get_counts()
# OR Run the job on the Aer simulator with noise model from real backend
# job = sampler_sim.run([qc_isa])
# res = job.result()
# counts = res[0].data.meas.get_counts()
# Step 4: Post-Process
plot_histogram(counts)
Sekarang, mari jelmakan keadaan ini dengan QFTGate:
# Step 1: Map
qc_qft.compose(QFTGate(qubits), inplace=True)
qc_qft.measure_all()
qc_qft.draw("mpl")
# Step 2: Transpile
from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager
target = backend.target
pm = generate_preset_pass_manager(target=target, optimization_level=3)
qc_isa = pm.run(qc_qft)
# Step 3: Run the job on a real quantum computer - try fake backend
sampler = Sampler(mode=backend)
pubs = [qc_isa]
# Run the job on real quantum device
job = sampler.run(pubs, shots=1000)
res = job.result()
counts = res[0].data.meas.get_counts()
# OR Run the job on the Aer simulator with noise model from real backend
# job = sampler_sim.run([qc_isa])
# res = job.result()
# counts = res[0].data.meas.get_counts()
# Step 4: Post-Process
plot_histogram(counts)
Seperti yang anda lihat, kita mengukur populasi setiap keadaan lebih kurang sama, tambah tolak beberapa bunyi eksperimental dan statistik. Jadi, jika anda mengambil QFT bagi keadaan asas komputasi tunggal, hasilnya ialah superposisi sama rata bagi semua keadaan. Jika anda biasa dengan jelmaan Fourier, ini mungkin tidak mengejutkan anda. Satu prinsip asas yang boleh membantu kita membina hubungan intuitif antara fungsi dan jelmaan Fouriernya ialah lebar fungsi berbanding songsang dengan lebar jelmaan Fouriernya. Jadi, sesuatu yang sangat terpusat dalam masa, contohnya, seperti denyutan yang sangat singkat, akan memerlukan julat frekuensi yang luas untuk menjana denyutan itu. Isyarat itu akan sangat luas dalam ruang Fourier.
Fakta ini sebenarnya berkaitan dengan ketakpastian kuantum! Prinsip ketakpastian Heisenberg biasanya dinyatakan sebagai . Jadi jika ketakpastian dalam () adalah kecil, ketakpastian dalam momentum () mesti besar, dan sebaliknya. Ternyata, mengubah dari asas kedudukan ke asas momentum dicapai melalui jelmaan Fourier.
Nota: Ingat, kita mengukur populasi dalam setiap keadaan asas, jadi kita kehilangan maklumat tentang fasa relatif antara pelbagai bahagian superposisi. Jadi, walaupun QFT bagi mana-mana keadaan asas komputasi tunggal akan menghasilkan sebaran rata dalam populasi merentasi semua keadaan asas, fasa tidak semestinya sama.
Dua keadaan asas komputasi
Sekarang, mari lihat apa yang berlaku apabila kita menyediakan superposisi keadaan asas komputasi. Apa agaknya rupa jelmaan Fourier dalam kes ini?
Mari pilih superposisi:
# Step 1: Map
qubits = 4
N = 2**qubits
qc = QuantumCircuit(qubits)
# To make this state, we just need to apply a Hadamard to the last qubit
qc.h(qubits - 1)
qc_qft = qc.copy()
qc.measure_all()
qc.draw("mpl")
# First, let's go through steps 2-4 for the first circuit, qc
# Step 2: Transpile
from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager
target = backend.target
pm = generate_preset_pass_manager(target=target, optimization_level=3)
qc_isa = pm.run(qc)
# Step 3: Run the job on a real quantum computer - try fake backend
sampler = Sampler(mode=backend)
pubs = [qc_isa]
# Run the job on real quantum device
job = sampler.run(pubs, shots=1000)
res = job.result()
counts = res[0].data.meas.get_counts()
# OR run the job on the Aer simulator with noise model from real backend
# job = sampler_sim.run([qc_isa])
# res = job.result()
# counts = res[0].data.meas.get_counts()
# Step 4: Post-process
plot_histogram(counts)
Sekarang, mari jelmakan keadaan ini dengan QFTGate:
# Step 1: Map
qc_qft.compose(QFTGate(qubits), inplace=True)
qc_qft.measure_all()
qc_qft.draw("mpl")
# Step 2: Transpile
from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager
target = backend.target
pm = generate_preset_pass_manager(target=target, optimization_level=3)
qc_isa = pm.run(qc_qft)
# Step 3: Run the job on a real quantum computer OR try fake backend
sampler = Sampler(mode=backend)
pubs = [qc_isa]
# Run the job on real quantum device
job = sampler.run(pubs, shots=1000)
res = job.result()
counts = res[0].data.meas.get_counts()
# OR run the job on the Aer simulator with noise model from real backend
# job = sampler_sim.run([qc_isa])
# res = job.result()
# counts = res[0].data.meas.get_counts()
# Step 4: Post-process
plot_histogram(counts)
Yang ini mungkin sedikit mengejutkan. Nampaknya QFT bagi keadaan adalah superposisi semua keadaan asas genap. Tetapi jika kita fikir kembali tentang visualisasi kita bagi setiap keadaan asas , dan bagaimana fasa setiap komponen berlegar sekitar sebanyak kali, maka sebab kita mendapat hasil ini mungkin menjadi jelas.
Periksa kefahaman anda
Baca soalan di bawah, fikirkan jawapan anda, kemudian klik segitiga untuk mendedahkan penyelesaian.
Menggunakan petunjuk di atas, terangkan mengapa hasil yang kita perolehi untuk QFT bagi adalah dijangka.
Jawapan:
Keadaan asal mempunyai fasa relatif 0 (atau gandaan integer ) antara dua bahagian superposisi. Jadi, kita tahu keadaan ini mempunyai komponen Fourier yang fasanya juga sepadan dengan cara itu: yang mempunyai anjakan fasa 0 antara sebutan |0000> dan sebutan |1000>. Setiap keadaan asas Fourier terdiri daripada sebutan yang fasanya terkumpul pada kadar , ertinya, apabila dipesan dengan cara biasa, setiap sebutan dalam superposisi mempunyai fasa lebih tinggi daripada sebutan yang mendahuluinya. Jadi, pada titik tengah , kita mahu fasa menjadi gandaan integer . Ini berlaku apabila adalah genap.
Superposisi keadaan komputasi apakah yang akan sepadan dengan QFT yang mempunyai puncak pada setiap nombor binari ganjil?
Jawapan:
Jika anda mengambil QFT bagi keadaan , maka anda akan melihat puncak pada setiap keadaan bernombor binari ganjil.
Urai algoritma QFT
Kini kita telah mendapat lebih banyak intuisi tentang hubungan antara keadaan Qubit dalam asas komputasi dan asas Fourier, mari kita selami algoritma QFT itu sendiri. Dengan kata lain, Gate apa yang sebenarnya kita laksanakan pada komputer kuantum untuk mencapai jelmaan ini?
Mari mulakan dengan kecil, dengan satu Qubit. Jadi, itu bermakna kita akan mempunyai dua keadaan asas. QFT mengubah keadaan asas komputasi dan menjadi keadaan asas Fourier dan :
Periksa kefahaman anda
Baca soalan di bawah, fikirkan jawapan anda, kemudian klik segitiga untuk mendedahkan penyelesaian.
Gunakan persamaan untuk QFT dalam bahagian sebelumnya untuk mengesahkan dua keadaan asas Fourier di atas.
Jawapan:
Formula QFT umum ialah:
Untuk satu Qubit (), , dan . Jadi, kita ada
Lihat dua persamaan tersebut. Anda mungkin sudah tahu Gate kuantum yang boleh digunakan untuk melaksanakan jelmaan ini. Iaitu, terdapat Gate yang mengubah keadaan asas komputasi dan kepada keadaan asas Fourier masing-masing dan . Ia adalah Gate Hadamard! Ini menjadi lebih jelas jika kita memperkenalkan perwakilan matriks operasi QFT:
Jika anda tidak biasa dengan notasi ini untuk menyatakan pengoperasi kuantum, tidak mengapa! Ia adalah cara untuk mewakili matriks , di mana dan mengindeks lajur dan baris matriks, dari hingga , dan adalah nilai entri tertentu itu. Jadi, entri dalam lajur ke-0 dan baris ke-2, contohnya, hanyalah .
Dalam perwakilan ini, setiap keadaan asas komputasi dikaitkan dengan salah satu vektor asas:
Jika anda ingin belajar lebih mendalam tentang perwakilan ini, lihat pelajaran John Watrous tentang sistem berbilang dalam kursus Asas maklumat kuantum.
Mari cuba bina matriks untuk QFT. Menggunakan formula di atas, kita dapati bahawa
\text\{QFT\}_4 = \frac\{1\}\{2\} \begin\{pmatrix\} 1 & 1 & 1 & 1 \\ 1 & i & -1 & -i \\ 1 & -1 & 1 & -1 \\ 1 & -i & -1 & i \\ \end\{pmatrix\}
Untuk melaksanakan matriks ini pada komputer kuantum, kita perlu mengetahui kombinasi Gate mana yang diterapkan pada Qubit mana yang akan memberikan transformasi uniter yang sepadan dengan matriks di atas. Kita sudah tahu salah satu Gate yang diperlukan: Hadamard. Gate lain yang kita perlukan ialah Gate fasa terkawal, yang menerapkan fasa relatif pada keadaan Qubit sasaran, selagi Qubit kawalan berada dalam keadaan . Dalam bentuk matriks ini kelihatan seperti:
\text\{CP\}_\alpha = \begin\{pmatrix\} 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & e^\{i\alpha\} \\ \end\{pmatrix\}
Memandangkan hanya keadaan yang diubah, sebenarnya tidak penting Qubit mana yang dianggap "kawalan" dan mana yang "sasaran." Hasilnya akan sama dalam kedua-dua cara.
Akhir sekali, kita juga memerlukan beberapa Gate SWAP. Gate SWAP menukar keadaan dua Qubit. Ia kelihatan seperti:
\text\{SWAP\}_\alpha = \begin\{pmatrix\} 1 & 0 & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 0 & 1 \\ \end\{pmatrix\}
Prosedur untuk membina Circuit QFT pada Qubit adalah berulang — anda pertama menerapkan QFT pada Qubit hingga , kemudian menambah beberapa Gate antara Qubit dan Qubit yang lain. Tetapi untuk menerapkan QFT, anda perlu menerapkan QFT pada Qubit 2 hingga terlebih dahulu, kemudian menambah beberapa Gate antara Qubit 1 dan Qubit yang tinggal hingga . Ia seperti anak patung bersarang Rusia: setiap anak patung menambah faktor dua dalam dimensi Circuit QFT, dengan anak patung terkecil di tengah-tengah, iaitu QFT, atau Gate Hadamard.
Untuk meletakkan anak patung di dalam anak patung yang lebih besar seterusnya, seterusnya meningkatkan dimensi QFT sebanyak faktor dua, anda sentiasa mengikuti prosedur yang sama:
- Pertama, terapkan QFT pada Qubit paling bawah. Ini adalah "anak patung yang lebih kecil" daripada set anak patung bersarang Rusia yang akan anda masukkan ke dalam anak patung yang lebih besar seterusnya.
- Gunakan Qubit seterusnya di atas sebagai kawalan, dan terapkan Gate fasa terkawal kepada setiap Qubit bawah, dengan fasa kepada keadaan asas standard bagi setiap Qubit yang tinggal.
- Lakukan Hadamard pada Qubit paling atas yang sama yang digunakan sebagai kawalan dalam Gate fasa.
- Gunakan Gate SWAP untuk mengatur semula susunan Qubit supaya bit paling tidak signifikan (atas) menjadi bit paling signifikan (bawah), dan semua yang lain beralih ke atas satu.
Kita sudah menggunakan fungsi QFTGate daripada pustaka Circuit Qiskit, tetapi sekarang mari lihat di dalam beberapa Gate QFT ini untuk mengesahkan prosedur di atas. Kita boleh melakukan ini dengan decompose().
qc = QuantumCircuit(1)
qc.compose(QFTGate(1), inplace=True)
qc.decompose().draw("mpl")
qc = QuantumCircuit(2)
qc.compose(QFTGate(2), inplace=True)
qc.decompose().draw("mpl")
qc = QuantumCircuit(3)
qc.compose(QFTGate(3), inplace=True)
qc.decompose().draw("mpl")
qc = QuantumCircuit(4)
qc.compose(QFTGate(4), inplace=True)
qc.decompose().draw("mpl")
Jadi, semoga dari empat QFT pertama anda mula nampak bagaimana setiap satu bersarang di dalam yang terbesar seterusnya. Anda mungkin perasan, bagaimanapun, bahawa beberapa Gate fasa tidak tepat seperti yang ditetapkan dalam prosedur yang kita gariskan di atas, dan SWAP tidak muncul selepas setiap subrutin, tetapi sebaliknya hanya di hujung QFT penuh sahaja. Ini menjimatkan Gate yang tidak perlu, yang akan menyebabkan Circuit mengambil masa lebih lama dan lebih mudah tersalah. Daripada melaksanakan SWAP selepas setiap anak patung bersarang, Circuit menjejaki di mana setiap keadaan Qubit sepatutnya berada dan menyesuaikan Qubit yang diterapkan Gate fasa padanya dengan sewajarnya. Kemudian, satu set SWAP akhir di penghujung meletakkan segalanya pada tempat yang betul.
Gunakan QFT: Anggaran fasa
Mari kita lihat bagaimana QFT boleh digunakan untuk menyelesaikan masalah yang berguna dalam pengkomputeran kuantum. Mengira songsang jelmaan Fourier kuantum adalah langkah yang diperlukan dalam algoritma yang dikenali sebagai Anggaran Fasa Kuantum (QPE), yang merupakan subrutin dalam banyak algoritma lain, termasuk "permata mahkota" algoritma kuantum, algoritma pemfaktoran Shor.
Matlamat QPE adalah untuk menganggar nilai eigen bagi pengoperasi unitar. Pengoperasi unitar sangat meluas dalam pengkomputeran kuantum, dan sering kali, mencari nilai eigen bagi vektor eigen yang berkaitan adalah langkah yang diperlukan dalam algoritma yang lebih besar. Bergantung pada masalah, nilai eigen boleh mewakili tenaga Hamiltonian dalam masalah simulasi, boleh membantu kita mencari faktor perdana sesuatu nombor dalam algoritma Shor, atau boleh mengandungi maklumat penting yang lain. QPE adalah salah satu subrutin yang paling penting dan banyak digunakan dalam pengkomputeran kuantum.
Jadi, apakah kaitannya dengan jelmaan Fourier kuantum? Seperti yang mungkin kamu ingat, mana-mana nilai eigen bagi pengoperasi unitar mempunyai magnitud . Jadi kita boleh tulis setiap nilai eigen sebagai nombor kompleks dengan magnitud satu:
di mana adalah nombor nyata antara 0 dan 1. Jika kamu ingin maklumat lanjut tentang matriks unitar, lihat pelajaran John Watrous mengenai subjek ini dalam Asas maklumat kuantum.
Perhatikan bahawa adalah berkala dalam . Ini mungkin sudah mencadangkan kepada kamu bahawa QFT mungkin terlibat, kerana kita telah melihat betapa bergunanya QFT dalam menganalisis fungsi berkala. Di bawah, kita akan menelusuri algoritma dan melihat dengan tepat bagaimana QFT memainkan peranannya.
Cara QPE berfungsi
Pertama, kita akan mulakan dengan algoritma QPE yang paling mudah, yang secara kasar menganggar fasa kepada satu digit perduaan ketepatan. Dalam erti kata lain, algoritma ini boleh membezakan antara dan , tetapi tidak lebih baik daripada itu. Berikut adalah rajah litar:

Qubit-Qubit disediakan dalam keadaan , di mana Qubit berada dalam keadaan dan Qubit-Qubit yang lain berada dalam keadaan , yang merupakan keadaan eigen bagi . Selepas Hadamard pertama, keadaan Qubit menjadi:
Gate seterusnya adalah Gate "controlled-". Ini mengenakan operasi unitar pada Qubit-Qubit bawah yang berada dalam keadaan jika Qubit 0 berada dalam keadaan , tetapi tidak melakukan apa-apa pada jika Qubit 0 berada dalam keadaan . Ini mengubah Qubit-Qubit kepada keadaan:
Sesuatu yang pelik baru sahaja berlaku: Gate controlled- hanya menggunakan Qubit sebagai Qubit kawalan, jadi seseorang mungkin fikir bahawa Gate ini tidak akan mengubah keadaan Qubit 0 sama sekali. Tetapi entah bagaimana, ia berubah! Walaupun operasi dikenakan pada Qubit-Qubit bawah, kesan keseluruhan Gate adalah mengubah fasa Qubit . Ini dikenali sebagai "mekanisme tendangan balik fasa," dan digunakan dalam banyak algoritma kuantum, termasuk algoritma Deutsch-Josza dan Grover. Jika kamu ingin mengetahui lebih lanjut tentang mekanisme tendangan balik fasa, lihat pelajaran John Watrous tentang Algoritma pertanyaan kuantum dalam Asas algoritma kuantum.
Selepas tendangan balik fasa, kita kenakan satu lagi Hadamard pada Qubit , yang menghasilkan keadaan:
Jadi, apabila kita mengukur Qubit pada akhirnya, kita akan mengukur dengan kepastian 100% jika dan kita akan mengukur dengan kepastian 100% jika (dan jika komputer kuantum kita sempurna, tanpa hingar). Jika adalah sesuatu yang lain daripada ini, pengukuran akhir hanya bersifat kebarangkalian dan hanya memberitahu kita sekadar itu.
QPE dengan lebih ketepatan: lebih banyak Qubit
Kita boleh memperluaskan konsep mudah ini kepada algoritma yang lebih kompleks dengan ketepatan sewenang-wenangnya. Jika bukannya hanya menggunakan Qubit untuk mengukur fasa, kita menggunakan Qubit dari hingga , maka kita akan dapat menganggar fasa dengan bit ketepatan. Mari kita lihat bagaimana ini berfungsi:
Litar QPE yang lebih tepat ini bermula sama seperti versi satu-bit: Hadamard dikenakan pada Qubit pertama, dan Qubit-Qubit yang lain disediakan dalam keadaan , mewujudkan keadaan:
Sekarang, unitar-unitar terkawal dikenakan. Qubit adalah kawalan untuk unitar yang sama seperti sebelumnya. Tetapi sekarang, Qubit adalah kawalan untuk unitar , yang hanyalah dikenakan dua kali. Jadi, nilai eigen adalah . Secara umumnya, setiap Qubit dari 0 hingga akan menjadi kawalan untuk unitar . Ini bermakna setiap Qubit ini akan mengalami tendangan balik fasa sebesar . Ini menghasilkan keadaan:
Ini boleh ditulis semula sebagai jumlah atas keadaan asas pengkomputeran:
Adakah jumlah itu kelihatan biasa? Ia adalah QFT! Ingat persamaan untuk jelmaan Fourier kuantum:
Jadi, jika fasa untuk suatu integer antara dan , maka mengambil songsang QFT bagi keadaan ini akan menghasilkan keadaan:
dan daripada , kita boleh menentukan .
Jika bukan gandaan integer, bagaimanapun, maka mengambil songsang QFT hanya akan menganggar . Seberapa baik ia menganggar akan bersifat kebarangkalian, bermakna kita tidak selalu mendapat anggaran terbaik, tetapi ia akan cukup hampir, dan semakin banyak Qubit yang kamu gunakan, semakin baik anggaran yang kamu akan dapat. Untuk mengetahui cara mengukur anggaran ini, lihat pelajaran John Watrous tentang Anggaran fasa dan pemfaktoran dalam Asas algoritma kuantum.
Kesimpulan
Modul ini memberikan gambaran keseluruhan tentang apa itu QFT, bagaimana ia dilaksanakan pada komputer kuantum, dan betapa bergunanya ia dalam menyelesaikan masalah. Kita diberikan sedikit gambaran tentang kegunaannya apabila kita melihat bagaimana ia boleh digunakan dalam anggaran fasa kuantum untuk mengetahui tentang nilai eigen matriks unitar.
Konsep penting
- Jelmaan Fourier Kuantum adalah analog kuantum bagi Jelmaan Fourier Diskret.
- QFT adalah contoh penjelmaan asas.
- Prosedur Anggaran Fasa Kuantum bergantung pada mekanisme tendangan balik fasa daripada operasi unitar terkawal, serta songsang QFT.
- QFT dan QPE keduanya merupakan subrutin yang banyak digunakan dalam pelbagai algoritma kuantum.
Soalan
Benar/Salah
- B/S Jelmaan Fourier Kuantum adalah analog kuantum bagi jelmaan Fourier diskret klasik (DFT).
- B/S QFT boleh dilaksanakan menggunakan hanya Gate Hadamard dan CNOT.
- B/S QFT adalah komponen utama algoritma Shor.
- B/S Keluaran Anggaran Fasa Kuantum adalah keadaan kuantum yang mewakili vektor eigen bagi pengoperasi.
- B/S QPE memerlukan penggunaan songsang Jelmaan Fourier Kuantum (QFT).
- B/S Dalam QPE, jika fasa boleh diwakili dengan tepat menggunakan bit, algoritma memberikan keputusan yang betul dengan kebarangkalian 1.
Jawapan pendek
- Berapa banyak Qubit yang diperlukan untuk melaksanakan QFT pada sistem dengan titik data?
- Bolehkah QFT digunakan pada keadaan yang bukan keadaan asas pengkomputeran? Jika boleh, apakah yang berlaku?
- Bagaimana bilangan Qubit kawalan yang digunakan dalam QPE mempengaruhi resolusi anggaran fasa yang dihasilkan?
Masalah
- Gunakan pendaraban matriks untuk mengesahkan bahawa langkah-langkah dalam algoritma QFT memang menghasilkan matriks :
(Kamu tidak perlu buat ini dengan tangan!)
Masalah cabaran
- Buat keadaan empat-Qubit yang merupakan superposisi sama rata bagi semua asas pengkomputeran ganjil: . Kemudian lakukan QFT pada keadaan tersebut. Apakah keadaan yang dihasilkan? Terangkan mengapa hasilmu masuk akal, menggunakan pengetahuanmu tentang jelmaan Fourier.