[PYTHON] Décomposition symétrique du second ordre dans la formule de Lie-Trotter

introduction

Pour les opérateurs non commutables $ X et Y $, la formule de Lie-Trotter suivante est valable.

\exp(h(X+Y)) = \left( \exp(hX/n)\exp(hY/n) \right)^n + O\left(\frac{h^2}{n}\right)

Ici, $ n $ est le nombre de décompositions (nombre de trotteurs). Cette formule n'est correcte que jusqu'au premier ordre de $ h $ en tant que développement de Taylor pour $ h $, et l'erreur de coupure est $ O (h ^ 2 / n) $ reflétant cela. Ici, l'ordre peut être augmenté en concevant la forme de l'expansion.

\exp(h(X+Y)) = \left( \exp(hX/2n)\exp(hY/n)\exp(hX/2n) \right)^n + O\left(\frac{h^3}{n^2}\right)

C'est ce qu'on appelle une décomposition symétrique quadratique, et le développement de Taylor est correct jusqu'à l'ordre de $ h ^ 2 $. Reflétant cela, l'erreur de coupure devient $ O (h ^ 3 / n ^ 2) $.

Cet article confirme cette amélioration de la précision d'approximation.

La source est https://github.com/kaityo256/lie-trotter-sample À.

Description de la source

Ce que vous faites est la même chose que article précédent, alors reportez-vous à cela. Pour la décomposition primaire

def trotter(X,Y,Z,h,n):
    eZ = calc_exp(Z,h)
    eX = calc_exp(X,h/n)
    eY = calc_exp(Y,h/n)
    S = np.diag(np.ones(d))
    eXeY = eX.dot(eY)
    for i in range(n):
        S = S.dot(eXeY)
    return linalg.norm(eZ - S)/linalg.norm(eZ)

Dans le cas de la décomposition symétrique quadratique

def trotter2nd(X,Y,Z,h,n):
    eZ = calc_exp(Z,h)
    eX = calc_exp(X,h/n*0.5)
    eY = calc_exp(Y,h/n)
    S = np.diag(np.ones(d))
    eXeYeX = eX.dot(eY.dot(eX))
    for i in range(n):
        S = S.dot(eXeYeX)
    return linalg.norm(eZ - S)/linalg.norm(eZ)

Ecrivez. Je ne pense pas que ce soit difficile.

résultat

Les résultats de la décomposition symétrique quadratique sont les suivants.

Premièrement, la dépendance du pas de temps $ h $ de l'erreur de coupure. Soit $ n $ 1,2,4, et évaluez l'erreur de coupure avec différentes valeurs $ h $ pour chacune.

h_2.png

On voit que la précision est améliorée à $ O (h ^ 3) $ quel que soit le nombre de décompositions $ n $.

Vient ensuite la dépendance du nombre de décompositions $ n $. Le $ h $ horaire est fixé à 1,0 $.

n_2.png

L'erreur est $ O (1 / n ^ 2) $, ce qui montre que la précision est également améliorée.

Résumé

Il a été confirmé que la précision est améliorée en utilisant la décomposition symétrique quadratique dans la décomposition du trotteur. ici,

\begin{align}
U_X(h) &= \equiv \exp(h X) \\
U_Y(h) &= \equiv \exp(h Y)
\end{align}

Si vous écrivez, la décomposition primaire lorsque $ n = 3 $ est

\exp(h(X+Y)) \sim U_X(h/3)U_Y(h/3)U_X(h/3)U_Y(h/3)U_X(h/3)U_Y(h/3)

Peut être écrit. Puisque $ U_X (h_1) U_X (h_2) = U_X (h_1 + h_2) $ est valide, la décomposition symétrique quadratique est

\exp(h(X+Y)) \sim U_X(h/6)U_Y(h/3)U_X(h/3)U_Y(h/3)U_X(h/3)U_Y(h/3) U_X(h/6)

Et, par rapport à la décomposition du premier ordre, l'opérateur le plus à gauche est déplacé de moitié vers l'extrémité droite. Même si $ n $ augmente, la seule différence entre les deux est cette fin. N'est-il pas étrange que la précision d'approximation de l'opérateur augmente linéairement pour $ h $ et $ n $ avec juste cela? [^ 1]

[^ 1]: Les gens au travail disaient: "C'est une évidence, n'est-ce pas courant?"

Recommended Posts

Décomposition symétrique du second ordre dans la formule de Lie-Trotter
Examiner l'erreur de coupure de la formule de Lie-Trotter
Décomposition LU en Python
Trouver les valeurs propres d'une vraie matrice symétrique en Python