Как эффективно вычислить вращение собственных значений в 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 этой статьи .