Jak efektywnie obliczyć rotację wartości własnych w HHL
W algorytmie HHL, jak skutecznie wykonujesz?$\lambda-$kontrolowany obrót na kubicie pomocniczym ? Po przeczytaniu kilku odpowiedzi wydaje mi się, że można to zrobić w dwóch krokach:
- Najpierw mapujemy$|\lambda\rangle\mapsto |\frac{1}{\pi}\arcsin(\frac{C}{\lambda})\rangle$, definiowanie$|\frac{1}{\pi}\arcsin(\frac{C}{\lambda})\rangle$być reprezentacją binarną$|\frac{1}{\pi}\arcsin(\frac{C}{\lambda})\rangle$z$m$kubity.
- Następnie wykonaj kontrolowany obrót$U_y(|\theta\rangle \otimes |0\rangle)\mapsto |\theta\rangle \otimes \big(\cos(\theta)|0\rangle + \sin{(\theta})|1\rangle\big)$gdzie$U_y$jest po prostu$$ U_y(|\theta\rangle \otimes |0\rangle) = \prod_{j=1}^m (I^{\otimes^m}\otimes R_y(2\pi\theta_j/2^j)) $$czyli sekwencja kontrolowanych obrotów, w której kolejno dzielimy o połowę kąt obrotu pod warunkiem, że cyfry reprezentacji binarnej$\theta$.
Moje pytanie brzmi następująco: w jaki sposób można skutecznie wdrożyć pierwszy krok w środowisku takim jak Qiskit?
Odpowiedzi
Istnieje nowe podejście, które zostanie wkrótce połączone w qiskit terra ( tutaj dla PR ), które wykorzystuje przybliżenie wielomianowe do obliczeń$\arcsin(C/\lambda)$i asymptotycznie byłaby to skuteczna implementacja.
W praktyce, jeśli rozwiązujesz problem$2\times 2$matrycy lub bardzo małego systemu, lepiej byłoby zakodować obroty na sztywno.
Teorię i analizę błędów tego podejścia wyjaśniono w części VI tego artykułu .