Lie-Trotter 공식에서 2차 대칭 분해

7481 단어 파이썬scipynumpy

소개



비가변적인 연산자 $X, Y$에 대해서, 이하의 Lie-Trotter 공식이 성립한다.
\exp(h(X+Y)) = \left( \exp(hX/n)\exp(hY/n) \right)^n + O\left(\frac{h^2}{n}\right)

여기서 $n$는 분해수(트로터수)이다. 이 공식은 $h$에 관한 테일러 전개로서는 $h$의 1차까지 밖에 올바르지 않고, 그것을 반영해 중단 오차는 $O(h^2/n)$가 된다. 여기서, 전개의 형태를 고안하면 차수를 올릴 수 있다.
\exp(h(X+Y)) = \left( \exp(hX/2n)\exp(hY/n)\exp(hX/2n) \right)^n + O\left(\frac{h^3}{n^2}\right)

이를 2차 대칭분해라고 하며, 테일러 전개가 $h^2$의 차수까지 올바르다. 그것을 반영하여 중단 오차가 $O(h^3/n^2)$가 된다.

이 논문은이 근사 정밀도의 향상을 확인한다.

소스는
htps : // 기주 b. 코 m / 카이 쵸 256 / ぃ - t 로 루 루 mp ぇ
에 있다.

소스 해설



하는 것은 이전 기사와 같기 때문에 그쪽을 참조. 1차 분해의 경우
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)

라고 쓰고 있던 것을, 2차 대칭 분해의 경우는
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)

라고 쓸 뿐. 어려운 일은 없다고 생각한다.

결과



2차 대칭분해를 행한 결과는 이하와 같다.

첫째, 중단 오차의 시간 단위 $h$ 의존성. $n$를 1,2,4로 하고, 각각에 대해 여러가지 $h$의 값으로 중단 오차를 평가한다.



분해수 $n$에 관계없이 $O(h^3)$와 정밀도가 향상되고 있는 것을 알 수 있다.

다음은 분해수 $n$의 의존성. 시간 간격 $h$는 $1.0$고정.



오차가 $O(1/n^2)$로, 이쪽도 정밀도가 향상하고 있는 것을 알 수 있다.

요약



트로터 분해에 있어서, 2차 대칭 분해를 이용하면 정밀도가 향상되는 것을 확인하였다. 여기에서
\begin{align}
U_X(h) &= \equiv \exp(h X) \\
U_Y(h) &= \equiv \exp(h Y)
\end{align}

라고 쓰면, $n=3$의 경우의 1차의 분해는
\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)

라고 쓸 수 있다. $U_X(h_1)U_X(h_2) = U_X(h_1 + h_2)$가 성립되기 때문에 2차 대칭분해는
\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)

그리고 1차 분해에 비해 좌단의 연산자를 반만큼 우단으로 이동시킨 형태로 되어 있다. $n$가 증가해도, 양자의 차이는 이 끝만. 단지 이것만으로 연산자의 근사 정밀도가 $h$, $n$ 모두 1차 올라간다고 신기하지 않습니까? 1



직장의 사람에게는 「당연이라고 할까, 자주 있는 것이 아닙니까」라고 말해졌지만·· 

좋은 웹페이지 즐겨찾기