Comment calculer efficacement la rotation des valeurs propres dans HHL
Dans l'algorithme HHL, comment faites-vous efficacement le$\lambda-$rotation contrôlée sur le qubit auxiliaire ? Il me semble après avoir lu quelques réponses que cela peut se faire en deux étapes :
- Tout d'abord, nous cartographions$|\lambda\rangle\mapsto |\frac{1}{\pi}\arcsin(\frac{C}{\lambda})\rangle$, définissant$|\frac{1}{\pi}\arcsin(\frac{C}{\lambda})\rangle$être une représentation binaire$|\frac{1}{\pi}\arcsin(\frac{C}{\lambda})\rangle$avec$m$qubits.
- Effectuez ensuite une rotation contrôlée$U_y(|\theta\rangle \otimes |0\rangle)\mapsto |\theta\rangle \otimes \big(\cos(\theta)|0\rangle + \sin{(\theta})|1\rangle\big)$où$U_y$est simplement$$ U_y(|\theta\rangle \otimes |0\rangle) = \prod_{j=1}^m (I^{\otimes^m}\otimes R_y(2\pi\theta_j/2^j)) $$c'est-à-dire une séquence de rotations contrôlées où l'on divise successivement par deux l'angle de rotation conditionnellement aux chiffres de la représentation binaire de$\theta$.
Ma question est la suivante comment mettre en place efficacement la première étape dans un environnement tel que Qiskit ?
Réponses
Il existe une nouvelle approche qui sera bientôt fusionnée dans qiskit terra ( ici pour le PR ) qui utilise l'approximation polynomiale pour calculer$\arcsin(C/\lambda)$, et asymptotiquement ce serait l'implémentation efficace.
En pratique, si vous résolvez un$2\times 2$matrice ou un très petit système, il serait préférable de coder en dur les rotations.
La théorie et les analyses d'erreur de cette approche sont expliquées dans la section VI de cet article .