Post content
Квантовая оценка фазы (Quantum Phase Estimation) — это универсальный инструмент, который решает эту задачу и лежит в основе самых мощных квантовых алгоритмов Алгоритм QPE решает фундаментальную задачу квантовой механики: найти собственные значения унитарного оператора U Если у нас есть собственное состояние |ψ⟩ такое, что U|ψ⟩ = e^2πiφ|ψ⟩, то QPE извлекает фазу φ с заданной точностью Математически это выглядит очень элегантно, но скрывает огромную вычислительную мощь Многие важные задачи — от факторизации чисел до моделирования молекул — сводятся к поиску собственных значений определенных операторов Алгоритм QPE, как это обычно бывает, использует два регистра кубитов Первый (n кубитов) называется счётным регистром и будет хранить результат Второй содержит собственное состояние |ψ⟩ исследуемого оператора U Ключевая идея: Применяем оператор U с разными степенями (U¹, U², U⁴, U⁸, ...) к собственному состоянию, контролируя каждую операцию кубитами счетного регистра Затем применяем обратное квантовое преобразование Фурье, которое «декодирует» фазу из паттерна интерференции Схема алгоритма: |0⟩⊗n ——[H⊗n]——•————•————•————[QFT†]——[M⊗n]— | | | |ψ⟩ ———————————[U¹]—[U²]—[U⁴]—————————————————— После применения гейтов Адамара создаётся суперпозиция, в которой каждый контрольный кубит «пробует» соответствующую степень оператора U Квантовое преобразование Фурье извлекает фазовую информацию, концентрируя амплитуды в состояниях, соответствующих двоичному представлению фазы φ Экспоненциальная точность: с n кубитами QPE может определить фазу с точностью до 2–n Это означает, что всего 20 кубитов дают точность в миллионную долю! Универсальность: QPE — это «швейцарский нож» квантовых вычислений Любая задача, которую можно свести к поиску собственных значений, автоматически получает квантовое ускорение Фундамент для Шора: в алгоритме факторизации Шора QPE используется для нахождения периода функции f(x) = ax mod N Собственные значения оператора сдвига кодируют информацию о периоде, что позволяет разложить число на простые множители from qiskit import QuantumCircuit, QuantumRegister from qiskit.circuit.library import QFT import numpy as np def qpe_circuit(n_qubits, unitary_gate, eigenstate_prep=None): """ Создает схему квантовой оценки фазы n_qubits: количество кубитов для счетного регистра unitary_gate: унитарный оператор U eigenstate_prep: схема подготовки собственного состояния """ # Регистры counting_qubits = QuantumRegister(n_qubits, 'counting') target_qubits = QuantumRegister(1, 'target') qc = QuantumCircuit(counting_qubits, target_qubits) # Подготовка собственного состояния if eigenstate_prep: qc.compose(eigenstate_prep, target_qubits, inplace=True) # Суперпозиция в счетном регистре qc.h(counting_qubits) # Контролируемые степени унитарного оператора for i in range(n_qubits): power = 2 ** i for _ in range(power): qc.append(unitary_gate.control(), [counting_qubits[i]] + list(target_qubits)) # Обратное квантовое преобразование Фурье qft_inverse = QFT(n_qubits, inverse=True) qc.compose(qft_inverse, counting_qubits, inplace=True) # Измерение qc.measure_all() return qc # Пример: оценка фазы для Z-гейта from qiskit.circuit.library import ZGate z_gate = ZGate() # Подготовка собственного состояния |1⟩ для Z eigenstate_prep = QuantumCircuit(1) eigenstate_prep.x(0) # Создание схемы QPE с 4 кубитами точности qpe = qpe_circuit(4, z_gate, eigenstate_prep) print("Схема QPE готова!")