Как эффективно вычислить вращение собственных значений в HHL
Dec 10 2020
В алгоритме HHL, как вы эффективно выполняете $\lambda-$управляемое вращение на вспомогательном кубите? После прочтения некоторых ответов мне кажется, что это можно сделать в два этапа:
- Сначала мы отображаем $|\lambda\rangle\mapsto |\frac{1}{\pi}\arcsin(\frac{C}{\lambda})\rangle$, определяя $|\frac{1}{\pi}\arcsin(\frac{C}{\lambda})\rangle$ быть двоичным представлением $|\frac{1}{\pi}\arcsin(\frac{C}{\lambda})\rangle$ с участием $m$ кубиты.
- Затем выполните контролируемое вращение. $U_y(|\theta\rangle \otimes |0\rangle)\mapsto |\theta\rangle \otimes \big(\cos(\theta)|0\rangle + \sin{(\theta})|1\rangle\big)$ где $U_y$ просто $$ U_y(|\theta\rangle \otimes |0\rangle) = \prod_{j=1}^m (I^{\otimes^m}\otimes R_y(2\pi\theta_j/2^j)) $$ то есть последовательность контролируемых вращений, где мы последовательно уменьшаем вдвое угол поворота условно цифр двоичного представления $\theta$.
У меня следующий вопрос: как можно эффективно реализовать первый шаг в такой среде, как Qiskit?
Ответы
4 user96233 Dec 11 2020 at 19:24
Есть новый подход, который скоро будет объединен в qiskit terra ( здесь для PR ), который использует полиномиальную аппроксимацию для вычисления$\arcsin(C/\lambda)$, и асимптотически это была бы эффективная реализация.
На практике, если вы решаете $2\times 2$ матрицу или очень маленькую систему, было бы лучше жестко закодировать вращения.
Теория и анализ ошибок этого подхода объясняются в Разделе VI этой статьи .