コンテンツにスキップ

波動方程式と Schrödinger 方程式の時間発展:leapfrog・Crank–Nicolson・分割演算子法

対象読者: 本テーマの差分法の安定性解析とスペクトル法の章を読み、線形微分方程式系の行列指数関数と対称行列のスペクトル定理を知っている人。量子力学の予備知識は最小限で足ります。

前提となる記事:差分法の整合性・安定性・収束:Lax の同等定理と von Neumann 解析、スペクトル法:Fourier・Chebyshev 選点法と指数収束、線形微分方程式系:基本解行列・行列指数関数・Liouville の公式・Floquet の定理・Laplace 変換法、スペクトル定理:対称行列はなぜ「回転だけ」で対角化できるのか

生 Markdown

波の動きや量子力学の粒子の動きをコンピュータで追うときは、時間を小さな刻みに区切って少しずつ進めます。熱の拡散と違って、これらの現象は時間がたっても衰えず、全体の大きさ(エネルギーや確率の総和)が一定に保たれます。ところが刻み方を誤ると、計算の上では大きさが勝手に膨らんだり、波の進み方がずれたりします。この記事を読み終えると、どんな刻み幅なら計算が壊れないか、大きさを正確に保つ刻み方は何か、そして誤差がどれだけになるかを説明できるようになります。

  • 波動方程式を空間について離散化した系 u′′=−Auu'' = -Au(AA は正定値対称行列)に対する leapfrog 法は、Δt2λmax⁡(A)<4\Delta t^2\lambda_{\max}(A) \lt 4 のとき、かつそのときに限り解が有界にとどまります。1 次元の中心差分では CFL 条件(波が 1 ステップで格子 1 マス分より遠くへ進まないための刻み幅の上限)cΔt/h≤1c\Delta t/h \le 1 です。
  • leapfrog 法は離散エネルギー En=12∥(un+1−un)/Δt∥2+12⟨un+1,Aun⟩E^n = \frac12\|(u^{n+1}-u^n)/\Delta t\|^2 + \frac12\langle u^{n+1}, Au^n\rangle を厳密に保存します。安定条件のもとで EnE^n は正定値で、これから誤差評価 O(Δt2+h2)O(\Delta t^2 + h^2) が出ます。振幅は保たれますが、位相速度(波の山が進む速さ)は −(1−ν2)(kh)2/24-(1-\nu^2)(kh)^2/24 の割合でずれ、長時間では位相の誤差が蓄積します。
  • Schrödinger 方程式を離散化した系 iψ′=Hψi\psi' = H\psi に対する Crank–Nicolson 法(Cayley 変換)はユニタリ(ベクトルの長さを変えない変換)で、ノルムとエネルギーを厳密に保存し、誤差は t Δt212∥H3ψ0∥\frac{t\,\Delta t^2}{12}\|H^3\psi_0\| 以下です。陽的 Euler 法はどんな刻み幅でもノルムを増やします。
  • H=A+BH = A + B を分けて e−iτAe^{-i\tau A} と e−iτBe^{-i\tau B} を交互に掛ける分割法は、各因子がユニタリなので積もユニタリです。誤差は交換子(AA と BB を掛ける順序を入れ替えたときのずれ AB−BAAB - BA)で決まり、Lie–Trotter 分割で tτ2∥[A,B]∥\frac{t\tau}{2}\|[A,B]\|、Strang 分割で tτ2(112∥[A,[A,B]]∥+124∥[B,[B,A]]∥)t\tau^2\bigl(\frac1{12}\|[A,[A,B]]\| + \frac1{24}\|[B,[B,A]]\|\bigr) 以下です。
  • 全空間の問題を有限の箱で計算したときの誤差は、箱の外に出た波動関数の大きさを時間について積分したもので抑えられます。

熱方程式の解は時間とともに滑らかになり、高い波数の成分はすぐに減衰します。そのため、数値解法が高い波数の成分を少し間違えても、誤差は自然に消えていきます。波動方程式と Schrödinger 方程式はそうではありません。波動方程式はエネルギー 12∫(ut2+c2ux2)dx\frac12\int(u_t^2 + c^2u_x^2)dx を保存し(定理 5.1[波動方程式])、Schrödinger 方程式は確率の総和 ∫∣ψ∣2dx\int|\psi|^2dx を保存します。どの波数の成分も減衰せず、位相を変えながら永久に残ります。

このことは数値解法に 2 つの要求を課します。1 つは、保存量を壊さないことです。Schrödinger 方程式に陽的 Euler 法を使うと、∥ψ∥\|\psi\| は毎ステップ必ず増え、確率の総和が 1 を超えていきます(§6)。もう 1 つは、位相を正しく進めることです。振幅が正確でも、位相速度が波数によって少しずつずれると、波束は時間とともに形を崩します(§5)。

この章では、空間の離散化(差分法・スペクトル法)は済んでいるものとして、行列の常微分方程式 u′′=−Auu'' = -Au と iψ′=Hψi\psi' = H\psi の時間積分を扱います。AA と HH は対称・エルミートなので、固有分解(定理 4.2[スペクトル定理])によって、すべての主張はスカラーの漸化式と不等式に帰着します。分割法の誤差評価は、虚時間の場合を含む一般の形を経路積分 Monte Carlo 法の章で証明し、ここではユニタリな場合の系として使います。

定義 2.1(空間を離散化した波動方程式と Schrödinger 方程式)↗

AA を dd 次の実対称な正定値行列、HH を dd 次のエルミート行列とする。

u′′(t)=−Au(t),u(0)=g, u′(0)=g1とiψ′(t)=Hψ(t),ψ(0)=ψ0u''(t) = -Au(t),\quad u(0) = g,\ u'(0) = g_1\qquad\text{と}\qquad i\psi'(t) = H\psi(t),\quad \psi(0) = \psi_0

を、それぞれ半離散の波動方程式、半離散の Schrödinger 方程式という。AA の固有値を 0<λ1≤⋯≤λd0 \lt \lambda_1 \le \cdots \le \lambda_d と書く。⟨x,y⟩=∑jxˉjyj\langle x, y\rangle = \sum_j\bar x_jy_j、∥x∥=⟨x,x⟩1/2\|x\| = \langle x, x\rangle^{1/2} は Cd\mathbb{C}^d の標準内積とノルム、行列のノルム ∥⋅∥\|\cdot\| はそれから誘導される作用素ノルム(2 ノルム)とする。交換子を [X,Y]=XY−YX[X, Y] = XY - YX と書く。

1 次元の波動方程式 utt=c2uxxu_{tt} = c^2u_{xx}(0<x<10 \lt x \lt 1、両端で 0)を h=1/Mh = 1/M の格子で中心差分により離散化すると、AA は (M−1)(M-1) 次の三重対角行列 c2h2tridiag(−1,2,−1)\frac{c^2}{h^2}\mathrm{tridiag}(-1, 2, -1) で、固有値は

λk=4c2h2sin⁡2kπh2(k=1,…,M−1)\lambda_k = \frac{4c^2}{h^2}\sin^2\frac{k\pi h}{2}\qquad(k = 1, \ldots, M-1)

です(補題 8.3[行列のノルムと線形方程式の条件数] で α=2c2/h2\alpha = 2c^2/h^2、β=−c2/h2\beta = -c^2/h^2)。Schrödinger 方程式 iψt=−12ψxx+Vψi\psi_t = -\frac12\psi_{xx} + V\psi では H=12h2tridiag(−1,2,−1)+diag(V(xj))H = \frac{1}{2h^2}\mathrm{tridiag}(-1,2,-1) + \mathrm{diag}(V(x_j)) です。格子関数については、hh の重みをつけたノルム ∥v∥h=h∥v∥\|v\|_h = \sqrt h\|v\| と内積 ⟨v,w⟩h=h⟨v,w⟩\langle v, w\rangle_h = h\langle v, w\rangle も使います。

補題 2.2(エルミート行列の生成するユニタリ群)✓

HH をエルミート行列、H=UΛU∗H = U\Lambda U^{*}(UU はユニタリ、Λ=diag(μ1,…,μd)\Lambda = \mathrm{diag}(\mu_1, \ldots, \mu_d) は実対角)をその固有分解とする。実数 tt について e−itH=U diag(e−itμk) U∗e^{-itH} = U\,\mathrm{diag}(e^{-it\mu_k})\,U^{*} で、これはユニタリ行列であり、HH と可換である。半離散の Schrödinger 方程式の解は ψ(t)=e−itHψ0\psi(t) = e^{-itH}\psi_0 で、∥ψ(t)∥=∥ψ0∥\|\psi(t)\| = \|\psi_0\|、⟨ψ(t),Hψ(t)⟩=⟨ψ0,Hψ0⟩\langle\psi(t), H\psi(t)\rangle = \langle\psi_0, H\psi_0\rangle を満たす。また、∥X∥≤1\|X\| \le 1、∥Y∥≤1\|Y\| \le 1 である行列について ∥Xn−Yn∥≤n∥X−Y∥\|X^n - Y^n\| \le n\|X - Y\|(n≥1n \ge 1)である。

証明(補題 2.2)

固有分解は 定理 4.2[スペクトル定理] です。命題 4.2[線形微分方程式系] の 4 から U∗e−itHU=e−itU∗HU=e−itΛU^{*}e^{-itH}U = e^{-itU^{*}HU} = e^{-it\Lambda} で、対角行列の指数関数は定義の級数(定義 4.1[線形微分方程式系])から diag(e−itμk)\mathrm{diag}(e^{-it\mu_k}) です。∣e−itμk∣=1|e^{-it\mu_k}| = 1 なので e−itHe^{-itH} はユニタリです(定理 8.1[スペクトル定理])。H=UΛU∗H = U\Lambda U^{*} と e−itHe^{-itH} は同じ UU で対角化されるので可換です。同じ命題の 3 から ddte−itHψ0=−iHe−itHψ0\frac{d}{dt}e^{-itH}\psi_0 = -iHe^{-itH}\psi_0 で、解の一意性(定理 3.1[線形微分方程式系])から ψ(t)=e−itHψ0\psi(t) = e^{-itH}\psi_0 です。ユニタリ行列はノルムと内積を保つので(命題 3.2[スペクトル定理])、∥ψ(t)∥=∥ψ0∥\|\psi(t)\| = \|\psi_0\|、⟨ψ(t),Hψ(t)⟩=⟨e−itHψ0,e−itHHψ0⟩=⟨ψ0,Hψ0⟩\langle\psi(t), H\psi(t)\rangle = \langle e^{-itH}\psi_0, e^{-itH}H\psi_0\rangle = \langle\psi_0, H\psi_0\rangle です。

最後の主張は Xn−Yn=∑j=0n−1Xn−1−j(X−Y)YjX^n - Y^n = \sum_{j=0}^{n-1}X^{n-1-j}(X - Y)Y^j と、各項のノルムが ∥X∥n−1−j∥X−Y∥∥Y∥j≤∥X−Y∥\|X\|^{n-1-j}\|X - Y\|\|Y\|^j \le \|X - Y\| であることから出ます。

定義 3.1(leapfrog 法)↗

半離散の波動方程式に対し、tn=nΔtt_n = n\Delta t での近似 unu^n を

un+1−2un+un−1=−Δt2Aun(n≥1)u^{n+1} - 2u^n + u^{n-1} = -\Delta t^2Au^n\qquad(n \ge 1)

で定める方法を leapfrog 法(Störmer–Verlet 法)という。出発値 u0u^0、u1u^1 は別に与える。すべての出発値について sup⁡n∥un∥<∞\sup_n\|u^n\| \lt \infty であるとき、(その AA と Δt\Delta t について)安定であるという。

左辺を Δt2\Delta t^2 で割ったものは u′′(tn)u''(t_n) の 2 階中心差分です。3 つの時刻の値を使う 2 段のスキームなので、差分法の整合性・安定性・収束の 1 段スキームの枠組みはそのままでは使えませんが、固有分解でスカラーの 3 項漸化式に帰着させれば直接調べられます。

次の補題は、各固有成分が従う 3 項漸化式の解を、μ\mu の大きさで場合分けして書き下すものです。μ<4\mu \lt 4 なら解は振動して有界にとどまり、μ≥4\mu \ge 4 なら増大する、という分かれ目がそのまま安定条件になります。証明は解の形を与えて漸化式と出発値を満たすことを確かめるだけですが、cos⁡φ=1−μ/2\cos\varphi = 1 - \mu/2 という形は、znz^n の形の解を探したときの特性方程式 z2−(2−μ)z+1=0z^2 - (2-\mu)z + 1 = 0 の根が、μ<4\mu \lt 4 では絶対値 1 の複素数 e±iφe^{\pm i\varphi} になることから来ています。

補題 3.2(3 項漸化式の解)✓

μ>0\mu \gt 0 とし、複素数列 (yn)n≥0(y^n)_{n\ge0} が yn+1−(2−μ)yn+yn−1=0y^{n+1} - (2 - \mu)y^n + y^{n-1} = 0(n≥1n \ge 1)を満たすとする。

  1. 0<μ<40 \lt \mu \lt 4 のとき、cos⁡φ=1−μ/2\cos\varphi = 1 - \mu/2 で定まる φ∈(0,π)\varphi \in (0, \pi) について yn=y0cos⁡nφ+y1−y0cos⁡φsin⁡φsin⁡nφ,∣yn∣≤∣y0∣+∣y1−y0cos⁡φ∣sin⁡φ.y^n = y^0\cos n\varphi + \frac{y^1 - y^0\cos\varphi}{\sin\varphi}\sin n\varphi,\qquad |y^n| \le |y^0| + \frac{|y^1 - y^0\cos\varphi|}{\sin\varphi}.
  2. μ=4\mu = 4 のとき yn=(−1)n(y0−n(y0+y1))y^n = (-1)^n\bigl(y^0 - n(y^0 + y^1)\bigr)。y1≠−y0y^1 \ne -y^0 なら ∣yn∣→∞|y^n| \to \infty(1 次の増大)。
  3. μ>4\mu \gt 4 のとき、z=12(2−μ−μ2−4μ)z = \frac12\bigl(2 - \mu - \sqrt{\mu^2 - 4\mu}\bigr) は z<−1z \lt -1 を満たす実数で、yn=zny^n = z^n は解である(幾何級数的な増大)。
証明(補題 3.2)

漸化式は y0y^0、y1y^1 から yny^n を一意に決めるので、各場合に、右辺の式が漸化式を満たし、n=0,1n = 0, 1 で y0y^0、y1y^1 に一致することを確かめれば十分です。

  1. 加法定理から cos⁡(n+1)φ+cos⁡(n−1)φ=2cos⁡φcos⁡nφ\cos(n+1)\varphi + \cos(n-1)\varphi = 2\cos\varphi\cos n\varphi、sin⁡(n+1)φ+sin⁡(n−1)φ=2cos⁡φsin⁡nφ\sin(n+1)\varphi + \sin(n-1)\varphi = 2\cos\varphi\sin n\varphi で、2cos⁡φ=2−μ2\cos\varphi = 2 - \mu なので、cos⁡nφ\cos n\varphi と sin⁡nφ\sin n\varphi はどちらも漸化式を満たします。n=0n = 0 で右辺は y0y^0、n=1n = 1 で y0cos⁡φ+(y1−y0cos⁡φ)=y1y^0\cos\varphi + (y^1 - y^0\cos\varphi) = y^1 です。不等式は ∣cos⁡nφ∣≤1|\cos n\varphi| \le 1、∣sin⁡nφ∣≤1|\sin n\varphi| \le 1 から出ます。

  2. yn=(−1)n(a+bn)y^n = (-1)^n(a + bn) を yn+1+2yn+yn−1y^{n+1} + 2y^n + y^{n-1} に入れると (−1)n+1[(a+b(n+1))−2(a+bn)+(a+b(n−1))]=0(-1)^{n+1}\bigl[(a + b(n+1)) - 2(a + bn) + (a + b(n-1))\bigr] = 0 です。a=y0a = y^0、b=−(y0+y1)b = -(y^0 + y^1) とすると n=1n = 1 で −(y0−y0−y1)=y1-(y^0 - y^0 - y^1) = y^1 です。

  3. zz は z2−(2−μ)z+1=0z^2 - (2-\mu)z + 1 = 0 の解なので znz^n は漸化式を満たします。μ>4\mu \gt 4 なら μ2−4μ>0\mu^2 - 4\mu \gt 0 で zz は実数、2−μ<−22 - \mu \lt -2 から z<12(2−μ)<−1z \lt \frac12(2 - \mu) \lt -1 です。

定理 3.3(leapfrog 法の安定条件)✓

定義 3.1 の leapfrog 法が安定であるためには、Δt2λd<4\Delta t^2\lambda_d \lt 4 が必要十分である。Δt2λd=4\Delta t^2\lambda_d = 4 のときは ∥un∥\|u^n\| が nn に比例して増える解が、Δt2λd>4\Delta t^2\lambda_d \gt 4 のときは幾何級数的に増える解が存在する。

証明(定理 3.3)

AA の固有ベクトルからなる正規直交基底 q1,…,qdq_1, \ldots, q_d(Aqk=λkqkAq_k = \lambda_kq_k)をとり(定理 4.2[スペクトル定理])、ykn=⟨qk,un⟩y_k^n = \langle q_k, u^n\rangle とおきます。leapfrog 法の式と qkq_k の内積をとると、⟨qk,Aun⟩=⟨Aqk,un⟩=λkykn\langle q_k, Au^n\rangle = \langle Aq_k, u^n\rangle = \lambda_ky_k^n から

ykn+1−(2−μk) ykn+ykn−1=0,μk=Δt2λk>0y_k^{n+1} - (2 - \mu_k)\,y_k^n + y_k^{n-1} = 0,\qquad \mu_k = \Delta t^2\lambda_k \gt 0

です。∥un∥2=∑k∣ykn∣2\|u^n\|^2 = \sum_k|y_k^n|^2 です。

Δt2λd<4\Delta t^2\lambda_d \lt 4 なら、すべての kk で 0<μk<40 \lt \mu_k \lt 4 なので、補題 3.2 の 1 から各 ∣ykn∣|y_k^n| は nn について有界で、∥un∥\|u^n\| も有界です。Δt2λd=4\Delta t^2\lambda_d = 4 なら、u0=qdu^0 = q_d、u1=0u^1 = 0 とすると ykn=0y_k^n = 0(k≠dk \ne d)、同じ補題の 2 から ydn=(−1)n(1−n)y_d^n = (-1)^n(1 - n) で、∥un∥=∣n−1∣\|u^n\| = |n - 1| です。Δt2λd>4\Delta t^2\lambda_d \gt 4 なら、u0=qdu^0 = q_d、u1=zqdu^1 = zq_d(zz は同じ補題の 3 のもの)とすると un=znqdu^n = z^nq_d、∥un∥=∣z∣n\|u^n\| = |z|^n です。

系 3.4(波動方程式の中心差分と CFL 条件)✓

1 次元の波動方程式 utt=c2uxxu_{tt} = c^2u_{xx} の中心差分と leapfrog 法について、ν=cΔt/h\nu = c\Delta t/h とおく。

  1. 区間 (0,1)(0,1) で両端 0(h=1/Mh = 1/M)のとき、安定であるための必要十分条件は νsin⁡((M−1)π/(2M))<1\nu\sin\bigl((M-1)\pi/(2M)\bigr) \lt 1 である。したがって ν≤1\nu \le 1 ならすべての MM で安定であり、ν>1\nu \gt 1 なら十分大きいすべての MM で不安定である。
  2. 周期境界で格子点の数 NN が偶数のとき、AA は固有値 0(定数の格子関数)をもつ半正定値行列である。定数の成分を除いた部分(成分の和が 0 である出発値 u0u^0、u1u^1)について、sup⁡n∥un∥<∞\sup_n\|u^n\| \lt \infty がつねに成り立つための必要十分条件は ν<1\nu \lt 1 である。ν=1\nu = 1 のとき ujn=(−1)j+nnu_j^n = (-1)^{j+n}n は解で、1 次で増大する。
証明(系 3.4)
  1. §2 の固有値の式から Δt2λM−1=4ν2sin⁡2((M−1)π/(2M))\Delta t^2\lambda_{M-1} = 4\nu^2\sin^2((M-1)\pi/(2M)) で、定理 3.3 の条件は νsin⁡((M−1)π/(2M))<1\nu\sin((M-1)\pi/(2M)) \lt 1 です。sin⁡<1\sin \lt 1 なので ν≤1\nu \le 1 なら成り立ちます。M→∞M \to \infty で sin⁡((M−1)π/(2M))→1\sin((M-1)\pi/(2M)) \to 1 なので、ν>1\nu \gt 1 なら十分大きい MM で破れます。

  2. 周期境界の行列 AA は半正定値で、v=((−1)j)jv = ((-1)^j)_j(NN が偶数なので周期的)について (Av)j=−c2h2(vj+1−2vj+vj−1)=4c2h2vj(Av)_j = -\frac{c^2}{h^2}(v_{j+1} - 2v_j + v_{j-1}) = \frac{4c^2}{h^2}v_j です。一般に vj=e2πijm/Nv_j = e^{2\pi ijm/N} は固有値 4c2h2sin⁡2(πm/N)\frac{4c^2}{h^2}\sin^2(\pi m/N) の固有ベクトルで、m=0,…,N−1m = 0, \ldots, N-1 の NN 個は互いに直交して CN\mathbb{C}^N の基底をなすので(m≠m′m \ne m' のとき ∑j=0N−1e2πij(m−m′)/N=0\sum_{j=0}^{N-1}e^{2\pi ij(m-m')/N} = 0。等比数列の和の公式による)、最大固有値は m=N/2m = N/2 の 4c2/h24c^2/h^2 です。m=0m = 0 の固有値 0 の成分は yn+1−2yn+yn−1=0y^{n+1} - 2y^n + y^{n-1} = 0 を満たし、出発値が y1=y0y^1 = y^0 でなければ 1 次で増えますが、これは方程式 utt=c2uxxu_{tt} = c^2u_{xx} の解 u=tu = t に対応する正しい振る舞いなので、安定性は m≠0m \ne 0 の成分について考えます。その条件は 補題 3.2 から 4ν2<44\nu^2 \lt 4 です。ν=1\nu = 1 のとき、ujn=(−1)j+nnu_j^n = (-1)^{j+n}n を代入すると、左辺は (−1)j+n[−(n+1)−2n−(n−1)]=−4n(−1)j+n(-1)^{j+n}\bigl[-(n+1) - 2n - (n-1)\bigr] = -4n(-1)^{j+n}、右辺は ν2(uj+1n−2ujn+uj−1n)=(−1)j+nn(−1−2−1)=−4n(−1)j+n\nu^2(u_{j+1}^n - 2u_j^n + u_{j-1}^n) = (-1)^{j+n}n(-1 - 2 - 1) = -4n(-1)^{j+n} で一致します。

ν≤1\nu \le 1 は、数値的な依存領域が波動方程式の依存領域(定理 5.3[波動方程式])を含むという CFL 条件(定理 6.3[差分法の整合性・安定性・収束])と同じ条件です。1 の ν=1\nu = 1 の場合、各 MM では安定ですが、補題 3.2 の 1 の評価の分母 sin⁡φ\sin\varphi は最高波数で sin⁡(πh)≈πh\sin(\pi h) \approx \pi h まで小さくなり、解の大きさの評価は h→0h \to 0 で一様ではありません。hh について一様な評価を得るには、次節のエネルギーを使います。

前節の安定条件は固有値ごとの議論から出ましたが、h→0h \to 0 で行列の次元が増える問題では、次元によらない形の評価が欲しくなります。そこで、連続のエネルギー保存に対応する量を離散化して、leapfrog 法が厳密に保存する量を探します。位置エネルギーを同じ時刻の ⟨un,Aun⟩\langle u^n, Au^n\rangle ではなく、隣り合う時刻の積 ⟨un+1,Aun⟩\langle u^{n+1}, Au^n\rangle にするのが、次の定理で保存を成り立たせる工夫です。

定理 4.1(leapfrog 法の離散エネルギー)✓

AA を実対称な正定値行列、θ=Δt2λd/4\theta = \Delta t^2\lambda_d/4 とする。実ベクトルの列 unu^n が、与えられた rnr^n について

un+1−2un+un−1=−Δt2Aun+Δt2rn(n≥1)u^{n+1} - 2u^n + u^{n-1} = -\Delta t^2Au^n + \Delta t^2r^n\qquad(n \ge 1)

を満たすとし、δn=(un+1−un)/Δt\delta^n = (u^{n+1} - u^n)/\Delta t、uˉn=(un+1+un)/2\bar u^n = (u^{n+1} + u^n)/2、

En=12∥δn∥2+12⟨un+1,Aun⟩E^n = \frac12\|\delta^n\|^2 + \frac12\langle u^{n+1}, Au^n\rangle

とおく。

  1. En−En−1=Δt2⟨rn,δn+δn−1⟩E^n - E^{n-1} = \frac{\Delta t}{2}\langle r^n, \delta^n + \delta^{n-1}\rangle。とくに rn=0r^n = 0 なら En=E0E^n = E^0(すべての nn)である。
  2. En=12∥δn∥2−Δt28⟨Aδn,δn⟩+12⟨Auˉn,uˉn⟩E^n = \frac12\|\delta^n\|^2 - \frac{\Delta t^2}{8}\langle A\delta^n, \delta^n\rangle + \frac12\langle A\bar u^n, \bar u^n\rangle で、 1−θ2∥δn∥2+12⟨Auˉn,uˉn⟩≤En≤12∥δn∥2+12⟨Auˉn,uˉn⟩.\frac{1-\theta}{2}\|\delta^n\|^2 + \frac12\langle A\bar u^n, \bar u^n\rangle \le E^n \le \frac12\|\delta^n\|^2 + \frac12\langle A\bar u^n, \bar u^n\rangle.
  3. θ<1\theta \lt 1 のとき En≤E0+Δt2(1−θ)∑m=1n∥rm∥\sqrt{E^n} \le \sqrt{E^0} + \dfrac{\Delta t}{\sqrt{2(1-\theta)}}\displaystyle\sum_{m=1}^{n}\|r^m\|。rn=0r^n = 0 なら、すべての nn で ∥δn∥2≤2E01−θ,∥un∥≤2E0λ1+Δt22E01−θ.\|\delta^n\|^2 \le \frac{2E^0}{1-\theta},\qquad \|u^n\| \le \sqrt{\frac{2E^0}{\lambda_1}} + \frac{\Delta t}{2}\sqrt{\frac{2E^0}{1-\theta}}.
証明(定理 4.1)
  1. a=un+1−una = u^{n+1} - u^n、b=un−un−1b = u^n - u^{n-1} とおくと、a−b=−Δt2Aun+Δt2rna - b = -\Delta t^2Au^n + \Delta t^2r^n、a+b=un+1−un−1a + b = u^{n+1} - u^{n-1} です。∥a∥2−∥b∥2=⟨a−b,a+b⟩\|a\|^2 - \|b\|^2 = \langle a - b, a + b\rangle なので
12Δt2(∥a∥2−∥b∥2)=−12⟨Aun,un+1−un−1⟩+12⟨rn,un+1−un−1⟩\frac{1}{2\Delta t^2}\bigl(\|a\|^2 - \|b\|^2\bigr) = -\frac12\langle Au^n, u^{n+1} - u^{n-1}\rangle + \frac12\langle r^n, u^{n+1} - u^{n-1}\rangle

です。一方 AA の対称性から ⟨un+1,Aun⟩−⟨un,Aun−1⟩=⟨Aun,un+1−un−1⟩\langle u^{n+1}, Au^n\rangle - \langle u^n, Au^{n-1}\rangle = \langle Au^n, u^{n+1} - u^{n-1}\rangle です。2 つを足すと En−En−1=12⟨rn,un+1−un−1⟩E^n - E^{n-1} = \frac12\langle r^n, u^{n+1} - u^{n-1}\rangle で、un+1−un−1=Δt(δn+δn−1)u^{n+1} - u^{n-1} = \Delta t(\delta^n + \delta^{n-1}) です。

  1. un+1=uˉn+Δt2δnu^{n+1} = \bar u^n + \frac{\Delta t}{2}\delta^n、un=uˉn−Δt2δnu^n = \bar u^n - \frac{\Delta t}{2}\delta^n を入れると、AA の対称性から交差項が消えて ⟨un+1,Aun⟩=⟨Auˉn,uˉn⟩−Δt24⟨Aδn,δn⟩\langle u^{n+1}, Au^n\rangle = \langle A\bar u^n, \bar u^n\rangle - \frac{\Delta t^2}{4}\langle A\delta^n, \delta^n\rangle です。0≤⟨Aδn,δn⟩≤λd∥δn∥20 \le \langle A\delta^n, \delta^n\rangle \le \lambda_d\|\delta^n\|^2 から 0≤Δt28⟨Aδn,δn⟩≤θ2∥δn∥20 \le \frac{\Delta t^2}{8}\langle A\delta^n,\delta^n\rangle \le \frac\theta2\|\delta^n\|^2 で、不等式が出ます。

  2. θ<1\theta \lt 1 なら 2 から En≥0E^n \ge 0、∥δn∥≤2En/(1−θ)\|\delta^n\| \le \sqrt{2E^n/(1-\theta)} です。1 と Cauchy–Schwarz の不等式から

(En−En−1)(En+En−1)=En−En−1≤Δt2∥rn∥21−θ(En+En−1)\bigl(\sqrt{E^n} - \sqrt{E^{n-1}}\bigr)\bigl(\sqrt{E^n} + \sqrt{E^{n-1}}\bigr) = E^n - E^{n-1} \le \frac{\Delta t}{2}\|r^n\|\sqrt{\frac{2}{1-\theta}}\bigl(\sqrt{E^n} + \sqrt{E^{n-1}}\bigr)

です。En+En−1>0\sqrt{E^n} + \sqrt{E^{n-1}} \gt 0 なら割って En−En−1≤Δt∥rn∥/2(1−θ)\sqrt{E^n} - \sqrt{E^{n-1}} \le \Delta t\|r^n\|/\sqrt{2(1-\theta)}、0 なら両辺 0 でやはり成り立ちます。nn について足すと最初の式です。rn=0r^n = 0 なら En=E0E^n = E^0 で、2 から ∥δn∥2≤2E0/(1−θ)\|\delta^n\|^2 \le 2E^0/(1-\theta)、λ1∥uˉn∥2≤⟨Auˉn,uˉn⟩≤2E0\lambda_1\|\bar u^n\|^2 \le \langle A\bar u^n, \bar u^n\rangle \le 2E^0 です。un=uˉn−Δt2δnu^n = \bar u^n - \frac{\Delta t}{2}\delta^n に三角不等式を使うと最後の式が出ます。

EnE^n は連続のエネルギー 12∥u′∥2+12⟨u,Au⟩\frac12\|u'\|^2 + \frac12\langle u, Au\rangle の離散版です。位置エネルギーの項が ⟨un,Aun⟩\langle u^n, Au^n\rangle ではなく、隣り合う時刻の積 ⟨un+1,Aun⟩\langle u^{n+1}, Au^n\rangle になっている点が要で、このために 2 の第 2 項(負の項)が現れ、正定値であるための条件 θ<1\theta \lt 1 が 定理 3.3 の安定条件と一致します。3 の定数は AA の次元によらず θ\theta と λ1\lambda_1 だけで決まるので、ν≤ν0<1\nu \le \nu_0 \lt 1 と固定すれば、h→0h \to 0 で一様な安定性の評価になります。

定理 4.2(波動方程式の leapfrog 法の収束)✓

u∈C4([0,1]×[0,T])u \in C^4([0,1]\times[0,T]) が utt=c2uxxu_{tt} = c^2u_{xx}、u(0,t)=u(1,t)=0u(0,t) = u(1,t) = 0、u(x,0)=g(x)u(x,0) = g(x)、ut(x,0)=g1(x)u_t(x,0) = g_1(x) を満たすとする。h=1/Mh = 1/M、ν=cΔt/h≤ν0<1\nu = c\Delta t/h \le \nu_0 \lt 1 とし、Uj0=g(xj)U^0_j = g(x_j)、

Uj1=g(xj)+Δt g1(xj)+c2Δt22⋅g(xj+1)−2g(xj)+g(xj−1)h2U^1_j = g(x_j) + \Delta t\,g_1(x_j) + \frac{c^2\Delta t^2}{2}\cdot\frac{g(x_{j+1}) - 2g(x_j) + g(x_{j-1})}{h^2}

を出発値とする leapfrog・中心差分の解を UnU^n とする。Bt=max⁡∣∂t4u∣B_t = \max|\partial_t^4u|、Bx=max⁡∣∂x4u∣B_x = \max|\partial_x^4u|、B3=max⁡∣∂t3u∣B_3 = \max|\partial_t^3u| とおくと、tn≤Tt_n \le T である nn について

∥u(⋅,tn)−Un∥h≤tn1−ν02(c2Δt h224Bx+Δt26B3)+tn21−ν02(Δt212Bt+c2h212Bx)\|u(\cdot, t_n) - U^n\|_h \le \frac{t_n}{\sqrt{1-\nu_0^2}}\Bigl(\frac{c^2\Delta t\,h^2}{24}B_x + \frac{\Delta t^2}{6}B_3\Bigr) + \frac{t_n^2}{1-\nu_0^2}\Bigl(\frac{\Delta t^2}{12}B_t + \frac{c^2h^2}{12}B_x\Bigr)

が成り立つ(左辺の u(⋅,tn)u(\cdot,t_n) は内部の格子点での値のベクトル)。右辺は O(Δt2+h2)O(\Delta t^2 + h^2) である。

また、格子 hZh\mathbb{Z} の上で cΔt=hc\Delta t = h(ν=1\nu = 1)のとき、u∈C2(R×[0,∞))u \in C^2(\mathbb{R}\times[0,\infty)) が utt=c2uxxu_{tt} = c^2u_{xx} を満たし、Uj0=u(xj,0)U^0_j = u(x_j, 0)、Uj1=u(xj,Δt)U^1_j = u(x_j, \Delta t) ならば、すべての n≥0n \ge 0 と jj で Ujn=u(xj,tn)U^n_j = u(x_j, t_n) である。

証明(定理 4.2)

誤差の方程式。 ejn=u(xj,tn)−Ujne^n_j = u(x_j, t_n) - U^n_j とおきます。2 階中心差分の打ち切り誤差(補題 2.3[差分法の整合性・安定性・収束] の 3)を tt と xx のそれぞれについて使うと、内部の格子点と n≥1n \ge 1 で

u(xj,tn+1)−2u(xj,tn)+u(xj,tn−1)Δt2=c2u(xj+1,tn)−2u(xj,tn)+u(xj−1,tn)h2+rjn,∣rjn∣≤ρ:=Δt212Bt+c2h212Bx\frac{u(x_j,t_{n+1}) - 2u(x_j,t_n) + u(x_j,t_{n-1})}{\Delta t^2} = c^2\frac{u(x_{j+1},t_n) - 2u(x_j,t_n) + u(x_{j-1},t_n)}{h^2} + r^n_j,\qquad |r^n_j| \le \rho := \frac{\Delta t^2}{12}B_t + \frac{c^2h^2}{12}B_x

です(utt=c2uxxu_{tt} = c^2u_{xx} を使った)。UnU^n の式を引くと、ene^n は 定理 4.1 の式を A=c2h2tridiag(−1,2,−1)A = \frac{c^2}{h^2}\mathrm{tridiag}(-1,2,-1) と rnr^n について満たします。内部の格子点は M−1M - 1 個で h(M−1)<1h(M-1) \lt 1 なので ∥rn∥h≤ρ\|r^n\|_h \le \rho です。

出発値の誤差。 e0=0e^0 = 0 です。tt についての Taylor の定理(定理 5.3[平均値の定理とテイラーの定理])と utt(x,0)=c2g′′(x)u_{tt}(x,0) = c^2g''(x) から u(xj,Δt)=g(xj)+Δt g1(xj)+c2Δt22g′′(xj)+Δt36∂t3u(xj,ξ)u(x_j,\Delta t) = g(x_j) + \Delta t\,g_1(x_j) + \frac{c^2\Delta t^2}{2}g''(x_j) + \frac{\Delta t^3}{6}\partial_t^3u(x_j,\xi) なので、再び打ち切り誤差の補題から

∣ej1∣≤c2Δt22⋅h212Bx+Δt36B3,∥δ0∥h=∥e1∥hΔt≤d0:=c2Δt h224Bx+Δt26B3|e^1_j| \le \frac{c^2\Delta t^2}{2}\cdot\frac{h^2}{12}B_x + \frac{\Delta t^3}{6}B_3,\qquad \|\delta^0\|_h = \frac{\|e^1\|_h}{\Delta t} \le d_0 := \frac{c^2\Delta t\,h^2}{24}B_x + \frac{\Delta t^2}{6}B_3

です。

エネルギーによる評価。 定理 4.1 を、内積を ⟨⋅,⋅⟩h\langle\cdot,\cdot\rangle_h に替えて使います(すべての式が hh 倍されるだけです)。e0=0e^0 = 0 なので E0=12∥δ0∥h2≤d02/2E^0 = \frac12\|\delta^0\|_h^2 \le d_0^2/2。θ=Δt2λM−1/4≤ν2≤ν02\theta = \Delta t^2\lambda_{M-1}/4 \le \nu^2 \le \nu_0^2 なので、同じ定理の 3 と 2 から

∥δn∥h≤2En1−θ≤11−ν02(d0+tnρ1−ν02)\|\delta^n\|_h \le \sqrt{\frac{2E^n}{1-\theta}} \le \frac{1}{\sqrt{1-\nu_0^2}}\Bigl(d_0 + \frac{t_n\rho}{\sqrt{1-\nu_0^2}}\Bigr)

です。en=e0+Δt∑m=0n−1δme^n = e^0 + \Delta t\sum_{m=0}^{n-1}\delta^m なので ∥en∥h≤tnmax⁡m<n∥δm∥h\|e^n\|_h \le t_n\max_{m \lt n}\|\delta^m\|_h で、主張の式が出ます。

ν=1\nu = 1 の場合。 s=cts = ct を時間の変数にとると uss=uxxu_{ss} = u_{xx} なので、d’Alembert の公式(定理 2.1[波動方程式])から、C2C^2 級の関数 F,GF, G があって u(x,t)=F(x+ct)+G(x−ct)u(x,t) = F(x + ct) + G(x - ct) と書けます(g=u(⋅,0)g = u(\cdot,0)、g1=ut(⋅,0)g_1 = u_t(\cdot,0) として F(y)=12g(y)+12c∫0yg1F(y) = \frac12g(y) + \frac1{2c}\int_0^yg_1、G(y)=12g(y)−12c∫0yg1G(y) = \frac12g(y) - \frac1{2c}\int_0^yg_1)。cΔt=hc\Delta t = h なので xj+ctn±1=xj±1+ctnx_j + ct_{n\pm1} = x_{j\pm1} + ct_n、xj−ctn±1=xj∓1−ctnx_j - ct_{n\pm1} = x_{j\mp1} - ct_n で、

u(xj,tn+1)+u(xj,tn−1)=F(xj+1+ctn)+G(xj−1−ctn)+F(xj−1+ctn)+G(xj+1−ctn)=u(xj+1,tn)+u(xj−1,tn)u(x_j,t_{n+1}) + u(x_j,t_{n-1}) = F(x_{j+1} + ct_n) + G(x_{j-1} - ct_n) + F(x_{j-1} + ct_n) + G(x_{j+1} - ct_n) = u(x_{j+1},t_n) + u(x_{j-1},t_n)

です。ν=1\nu = 1 のスキームは Ujn+1=Uj+1n+Uj−1n−Ujn−1U^{n+1}_j = U^n_{j+1} + U^n_{j-1} - U^{n-1}_j なので、厳密解の格子値は同じ漸化式を満たし、n=0,1n = 0, 1 で一致するので、すべての nn で一致します。

例 4.3(CFL 数と離散エネルギー)

c=1c = 1、初期値 g(x)=sin⁡πx+12sin⁡3πxg(x) = \sin\pi x + \frac12\sin3\pi x、初速 0 の定在波(厳密解は sin⁡πxcos⁡πt+12sin⁡3πxcos⁡3πt\sin\pi x\cos\pi t + \frac12\sin3\pi x\cos3\pi t)を、ν=0.5, 1.0, 1.01\nu = 0.5,\ 1.0,\ 1.01 で解きます。

# Python 3.9.6 / NumPy 2.0.2
import numpy as np
def leapfrog(M, nu, T):
"""u_tt = u_xx(0 < x < 1、両端 0)を leapfrog・中心差分で解く。h = 1/M、dt = nu h。"""
h, dt = 1.0 / M, nu / M
x = np.linspace(0, 1, M + 1)
g = np.sin(np.pi * x) + 0.5 * np.sin(3 * np.pi * x)
lap = lambda v: np.concatenate(([0.0], v[2:] - 2 * v[1:-1] + v[:-2], [0.0]))
u_old, u = g, g + 0.5 * nu**2 * lap(g) # 初速 0、2 次精度の出発値
energy = lambda a, b: 0.5 * h * np.sum(((b - a) / dt) ** 2) - 0.5 * np.sum(b * lap(a)) / h
E0, n, maxima = energy(u_old, u), 1, {}
steps = int(round(T / dt))
while n < steps:
u_old, u = u, 2 * u - u_old + nu**2 * lap(u)
n += 1
if n % (steps // 4) == 0:
maxima[round(n * dt, 6)] = np.max(np.abs(u))
exact = np.sin(np.pi * x) * np.cos(np.pi * n * dt) + 0.5 * np.sin(3 * np.pi * x) * np.cos(3 * np.pi * n * dt)
return maxima, abs(energy(u_old, u) - E0) / E0, np.sqrt(h * np.sum((u - exact) ** 2))
print("M = 200, T = 4: max|u| at t = 1, 2, 3, 4 |E^n - E^0| / E^0")
for nu in [0.5, 1.0, 1.01]:
maxima, dE, _ = leapfrog(200, nu, 4.0)
print(f"nu = {nu:4.2f}: " + " ".join(f"{v:.3e}" for v in maxima.values()) + f" {dE:.1e}")
print("nu = 0.5, T = 0.7: M l2 error order")
prev = None
for M in [25, 50, 100, 200, 400]:
err = leapfrog(M, 0.5, 0.7)[2]
print(f" {M:4d} {err:.3e} " + ("" if prev is None else f"{np.log2(prev / err):.2f}"))
prev = err
print("nu = 1.0, T = 0.7, M = 100: l2 error =", f"{leapfrog(100, 1.0, 0.7)[2]:.1e}")
M = 200, T = 4: max|u| at t = 1, 2, 3, 4 |E^n - E^0| / E^0
nu = 0.50: 1.076e+00 1.076e+00 1.076e+00 1.076e+00 5.3e-15
nu = 1.00: 1.076e+00 1.076e+00 1.076e+00 1.076e+00 3.3e-15
nu = 1.01: 4.271e+07 6.712e+31 1.135e+56 1.962e+80 1.0e+00
nu = 0.5, T = 0.7: M l2 error order
25 3.125e-03
50 8.068e-04 1.95
100 2.033e-04 1.99
200 5.092e-05 2.00
400 1.274e-05 2.00
nu = 1.0, T = 0.7, M = 100: l2 error = 3.5e-16

ν=0.5\nu = 0.5 と 1.01.0 では最大値は変わらず、離散エネルギーは丸めの大きさで保存されています。ν=1.01\nu = 1.01 では、丸め誤差から入った最高波数の成分が増幅されます。補題 3.2 の 3 で μ=4ν2sin⁡2(199π/400)≈4.0801\mu = 4\nu^2\sin^2(199\pi/400) \approx 4.0801 とすると ∣z∣≈1.326|z| \approx 1.326 で、時間 1(198 ステップ)あたり ∣z∣198≈1.8×1024|z|^{198} \approx 1.8\times10^{24} 倍です。表の隣り合う値の比(1.6×10241.6\times10^{24}、1.7×10241.7\times10^{24}、1.7×10241.7\times10^{24})と合います。このとき EnE^n は厳密な計算では保存されますが、正定値ではないので解の大きさを抑えません(増大する成分は 12∥δ∥2\frac12\|\delta\|^2 と 12⟨un+1,Aun⟩\frac12\langle u^{n+1}, Au^n\rangle が打ち消し合ってエネルギーが 0 です)。表の 1.01.0 は、1016010^{160} の大きさの 2 つの項の差が浮動小数点数で計算できなくなった結果です。ν=0.5\nu = 0.5 の誤差の次数は 2、ν=1\nu = 1 では 定理 4.2 の後半のとおり丸めの大きさです(区間の問題は、奇関数として周期 2 で延長すれば全直線の場合に帰着します。初速が 0 のとき、出発値 Uj1=(g(xj+1)+g(xj−1))/2U^1_j = (g(x_{j+1}) + g(x_{j-1}))/2 も d’Alembert の公式の値に一致します)。

5. 数値分散とシンプレクティック性

Section titled “5. 数値分散とシンプレクティック性”

leapfrog 法は各固有成分の振幅を保ちます(補題 3.2 の 1 で、解は cos⁡nφ\cos n\varphi と sin⁡nφ\sin n\varphi の 1 次結合)。誤差はすべて位相に現れます。

命題 5.1(leapfrog・中心差分の数値分散関係)✓

格子 hZh\mathbb{Z} 上のスキーム ujn+1−2ujn+ujn−1=ν2(uj+1n−2ujn+uj−1n)u^{n+1}_j - 2u^n_j + u^{n-1}_j = \nu^2(u^n_{j+1} - 2u^n_j + u^n_{j-1})(ν=cΔt/h\nu = c\Delta t/h)について次が成り立つ。

  1. 実数 kk、ω\omega について、平面波 ujn=ei(kxj−ωtn)u^n_j = e^{i(kx_j - \omega t_n)} が解であることは sin⁡2ωΔt2=ν2sin⁡2kh2\sin^2\frac{\omega\Delta t}{2} = \nu^2\sin^2\frac{kh}{2} と同値である。
  2. 0<ν≤10 \lt \nu \le 1 を固定し、∣kh∣≤π|kh| \le \pi について ωh(k)=2Δtarcsin⁡(νsin⁡kh2)\omega_h(k) = \frac{2}{\Delta t}\arcsin\bigl(\nu\sin\frac{kh}{2}\bigr) とおくと、kh→0kh \to 0 で ωh(k)ck=1−1−ν224(kh)2+O((kh)4)\frac{\omega_h(k)}{ck} = 1 - \frac{1-\nu^2}{24}(kh)^2 + O\bigl((kh)^4\bigr) である。ν=1\nu = 1 では ωh(k)=ck\omega_h(k) = ck が厳密に成り立つ。
証明(命題 5.1)
  1. 平面波を代入して ei(kxj−ωtn)e^{i(kx_j - \omega t_n)} で割ると、左辺は e−iωΔt−2+eiωΔt=2cos⁡ωΔt−2=−4sin⁡2(ωΔt/2)e^{-i\omega\Delta t} - 2 + e^{i\omega\Delta t} = 2\cos\omega\Delta t - 2 = -4\sin^2(\omega\Delta t/2)、右辺は ν2(2cos⁡kh−2)=−4ν2sin⁡2(kh/2)\nu^2(2\cos kh - 2) = -4\nu^2\sin^2(kh/2) です。

  2. G(ϑ)=arcsin⁡(νsin⁡ϑ)G(\vartheta) = \arcsin(\nu\sin\vartheta) とおきます。ν=1\nu = 1 なら ∣ϑ∣≤π/2|\vartheta| \le \pi/2 で G(ϑ)=ϑG(\vartheta) = \vartheta なので ωh(k)=2Δt⋅kh2=ck\omega_h(k) = \frac{2}{\Delta t}\cdot\frac{kh}{2} = ck(h/Δt=ch/\Delta t = c)です。ν<1\nu \lt 1 のとき、GG は R\mathbb{R} 上で C∞C^\infty 級の奇関数で、G′(ϑ)=νcos⁡ϑ (1−ν2sin⁡2ϑ)−1/2G'(\vartheta) = \nu\cos\vartheta\,(1 - \nu^2\sin^2\vartheta)^{-1/2} です。cos⁡ϑ=1−ϑ2/2+O(ϑ4)\cos\vartheta = 1 - \vartheta^2/2 + O(\vartheta^4)、(1−ν2sin⁡2ϑ)−1/2=1+ν2ϑ2/2+O(ϑ4)(1 - \nu^2\sin^2\vartheta)^{-1/2} = 1 + \nu^2\vartheta^2/2 + O(\vartheta^4) から G′(ϑ)=ν−ν(1−ν2)2ϑ2+O(ϑ4)G'(\vartheta) = \nu - \frac{\nu(1-\nu^2)}{2}\vartheta^2 + O(\vartheta^4) で、G′(0)=νG'(0) = \nu、G′′′(0)=−ν(1−ν2)G'''(0) = -\nu(1-\nu^2) です。GG は奇関数なので G(0)=G′′(0)=G′′′′(0)=0G(0) = G''(0) = G''''(0) = 0 で、Taylor の定理(定理 5.3[平均値の定理とテイラーの定理])から G(ϑ)=νϑ−ν(1−ν2)6ϑ3+O(ϑ5)G(\vartheta) = \nu\vartheta - \frac{\nu(1-\nu^2)}{6}\vartheta^3 + O(\vartheta^5) です。ϑ=kh/2\vartheta = kh/2 とし、2ν/Δt⋅kh/2=ck2\nu/\Delta t\cdot kh/2 = ck を使うと

ωh(k)=2ΔtG(kh2)=ck(1−1−ν224(kh)2+O((kh)4))\omega_h(k) = \frac{2}{\Delta t}G\Bigl(\frac{kh}{2}\Bigr) = ck\Bigl(1 - \frac{1-\nu^2}{24}(kh)^2 + O\bigl((kh)^4\bigr)\Bigr)

です。

厳密な分散関係は ω=ck\omega = ck で、位相速度 ω/k=c\omega/k = c は波数によりません。数値解では位相速度が c(1−1−ν224(kh)2)c\bigl(1 - \frac{1-\nu^2}{24}(kh)^2\bigr) で、波長が短いほど遅く進みます(数値分散)。時刻 tt までの位相の誤差は (ωh−ck)t≈−1−ν224c k3h2t(\omega_h - ck)t \approx -\frac{1-\nu^2}{24}c\,k^3h^2t で、tt に比例して増えます。波長あたりの格子点の数を nλ=2π/(kh)n_\lambda = 2\pi/(kh) とすると、位相の誤差を ε\varepsilon 以下に保つには、波が進む波長の数 ckt/(2π)ckt/(2\pi) が 3nλ2επ3(1−ν2)\frac{3n_\lambda^2\varepsilon}{\pi^3(1-\nu^2)} 以下でなければなりません(nλ=20n_\lambda = 20、ν=0.5\nu = 0.5、ε=0.1\varepsilon = 0.1 なら約 5 波長)。長い距離を伝わる波の計算で、2 次の差分より高次の差分やスペクトル法が使われる理由です。

leapfrog 法が振幅を保つことは、対称行列の線形系に限らない構造から来ています。その構造とは、位置と運動量の組 (q,p)(q, p) を相空間の 1 点とみたとき、1 ステップの写像が体積を保つだけでなく、正準 2 形式という量までまるごと保つこと(シンプレクティック性。d=1d = 1 では面積の保存と同じことです)です。次の命題は、leapfrog 法がこの性質をもつことと、調和振動子で数値解がどのような振動になるかを示します。

命題 5.2(leapfrog 法のシンプレクティック性)✓

AA を dd 次の実対称行列とし、R2d\mathbb{R}^{2d} 上の写像 ΦΔt:(q,p)↦(q′,p′)\Phi_{\Delta t} : (q, p) \mapsto (q', p') を

p1/2=p−Δt2Aq,q′=q+Δt p1/2,p′=p1/2−Δt2Aq′p^{1/2} = p - \tfrac{\Delta t}{2}Aq,\qquad q' = q + \Delta t\,p^{1/2},\qquad p' = p^{1/2} - \tfrac{\Delta t}{2}Aq'

で定める(速度 Verlet 法)。(qn+1,pn+1)=ΦΔt(qn,pn)(q^{n+1}, p^{n+1}) = \Phi_{\Delta t}(q^n, p^n) とする。

  1. qnq^n は leapfrog 法の式 qn+1−2qn+qn−1=−Δt2Aqnq^{n+1} - 2q^n + q^{n-1} = -\Delta t^2Aq^n(n≥1n \ge 1)を満たす。
  2. ΦΔt\Phi_{\Delta t} は線形で、その行列は J=(0I−I0)J = \begin{pmatrix}0 & I\\ -I & 0\end{pmatrix} について ΦΔtTJΦΔt=J\Phi_{\Delta t}^{\mathsf T}J\Phi_{\Delta t} = J を満たし(シンプレクティック)、det⁡ΦΔt=1\det\Phi_{\Delta t} = 1、Φ−Δt=ΦΔt−1\Phi_{-\Delta t} = \Phi_{\Delta t}^{-1}(時間反転対称)である。
  3. d=1d = 1、A=ω2A = \omega^2、0<ωΔt<20 \lt \omega\Delta t \lt 2 のとき、qnq^n は振動数 ω~=2Δtarcsin⁡ωΔt2\tilde\omega = \frac{2}{\Delta t}\arcsin\frac{\omega\Delta t}{2} の調和振動 qn=acos⁡ω~tn+bsin⁡ω~tnq^n = a\cos\tilde\omega t_n + b\sin\tilde\omega t_n で、p2+ω2(1−ω2Δt24)q2p^2 + \omega^2\bigl(1 - \frac{\omega^2\Delta t^2}{4}\bigr)q^2 は ΦΔt\Phi_{\Delta t} で不変である。
証明(命題 5.2)
  1. 第 nn ステップの中間の値を pn+1/2p^{n+1/2} と書くと、qn+1−qn=Δt pn+1/2q^{n+1} - q^n = \Delta t\,p^{n+1/2}、qn−qn−1=Δt pn−1/2q^n - q^{n-1} = \Delta t\,p^{n-1/2} です。pn=pn−1/2−Δt2Aqnp^n = p^{n-1/2} - \frac{\Delta t}{2}Aq^n、pn+1/2=pn−Δt2Aqnp^{n+1/2} = p^n - \frac{\Delta t}{2}Aq^n から pn+1/2−pn−1/2=−ΔtAqnp^{n+1/2} - p^{n-1/2} = -\Delta tAq^n で、差をとると主張の式です。

  2. 3 つの段階はそれぞれ線形で、行列は

L=(I0−Δt2AI),W=(IΔt I0I),ΦΔt=L W LL = \begin{pmatrix}I & 0\\ -\frac{\Delta t}{2}A & I\end{pmatrix},\qquad W = \begin{pmatrix}I & \Delta t\,I\\ 0 & I\end{pmatrix},\qquad \Phi_{\Delta t} = L\,W\,L

です。CC を対称行列として LC=(I0CI)L_C = \begin{pmatrix}I & 0\\ C & I\end{pmatrix} とすると

LCTJLC=(IC0I)(0I−I0)(I0CI)=(−CI−I0)(I0CI)=(0I−I0)L_C^{\mathsf T}JL_C = \begin{pmatrix}I & C\\ 0 & I\end{pmatrix}\begin{pmatrix}0 & I\\ -I & 0\end{pmatrix}\begin{pmatrix}I & 0\\ C & I\end{pmatrix} = \begin{pmatrix}-C & I\\ -I & 0\end{pmatrix}\begin{pmatrix}I & 0\\ C & I\end{pmatrix} = \begin{pmatrix}0 & I\\ -I & 0\end{pmatrix}

で、同様に WB=(IB0I)W_B = \begin{pmatrix}I & B\\ 0 & I\end{pmatrix}(BB は対称)について WBTJWB=(0I−IB)(IB0I)=JW_B^{\mathsf T}JW_B = \begin{pmatrix}0 & I\\ -I & B\end{pmatrix}\begin{pmatrix}I & B\\ 0 & I\end{pmatrix} = J です。XTJX=JX^{\mathsf T}JX = J、YTJY=JY^{\mathsf T}JY = J なら (XY)TJ(XY)=YTJY=J(XY)^{\mathsf T}J(XY) = Y^{\mathsf T}JY = J なので、積 LWLLWL もこの式を満たします。LL と WW は対角成分が 1 のブロック三角行列なので行列式は 1 です。LC−1=L−CL_C^{-1} = L_{-C}、WB−1=W−BW_B^{-1} = W_{-B} なので、Δt\Delta t を −Δt-\Delta t に替えた Φ−Δt=L−1W−1L−1=(LWL)−1\Phi_{-\Delta t} = L^{-1}W^{-1}L^{-1} = (LWL)^{-1} です。

  1. 1 と 補題 3.2 の 1(μ=ω2Δt2<4\mu = \omega^2\Delta t^2 \lt 4)から、qnq^n は cos⁡nφ\cos n\varphi と sin⁡nφ\sin n\varphi の 1 次結合で、cos⁡φ=1−ω2Δt2/2\cos\varphi = 1 - \omega^2\Delta t^2/2 です。1−cos⁡φ=2sin⁡2(φ/2)1 - \cos\varphi = 2\sin^2(\varphi/2) から sin⁡(φ/2)=ωΔt/2\sin(\varphi/2) = \omega\Delta t/2、φ=ω~Δt\varphi = \tilde\omega\Delta t で、nφ=ω~tnn\varphi = \tilde\omega t_n です。不変量: s=ω2Δt2/2s = \omega^2\Delta t^2/2、κ=ω2(1−s/2)\kappa = \omega^2(1 - s/2) とおくと、定義から q′=(1−s)q+Δt pq' = (1 - s)q + \Delta t\,p、p′=−Δt κ q+(1−s)pp' = -\Delta t\,\kappa\,q + (1 - s)p で、
p′2+κq′2=κ(κΔt2+(1−s)2)q2+((1−s)2+κΔt2)p2p'^2 + \kappa q'^2 = \kappa\bigl(\kappa\Delta t^2 + (1-s)^2\bigr)q^2 + \bigl((1-s)^2 + \kappa\Delta t^2\bigr)p^2

です(pqpq の項は p′2p'^2 から −2Δt κ(1−s)pq-2\Delta t\,\kappa(1-s)pq、κq′2\kappa q'^2 から +2Δt κ(1−s)pq+2\Delta t\,\kappa(1-s)pq が出て消える)。κΔt2=2s(1−s/2)=2s−s2\kappa\Delta t^2 = 2s(1 - s/2) = 2s - s^2 なので (1−s)2+κΔt2=1(1-s)^2 + \kappa\Delta t^2 = 1 で、右辺は κq2+p2\kappa q^2 + p^2 です。

2 の ΦTJΦ=J\Phi^{\mathsf T}J\Phi = J は、相空間の正準 2 形式 ∑jdqj∧dpj\sum_jdq_j\wedge dp_j を保つことを意味します。連続の流れ(Hamilton 系の解)がもつ性質で、行列式が 1 であること(相空間の体積の保存。連続の場合は 定理 2.3[線形微分方程式系])より強い条件です。3 は、leapfrog 法の数値解が「振動数を ω~=ω(1+ω2Δt2/24+⋯ )\tilde\omega = \omega(1 + \omega^2\Delta t^2/24 + \cdots) に取り替えた調和振動子」の厳密解であることを言っています。誤差を「少し違う問題を厳密に解いている」と読む見方(後退誤差解析)の最も簡単な場合で、保存量 p2+ω2(1−ω2Δt2/4)q2p^2 + \omega^2(1 - \omega^2\Delta t^2/4)q^2 は修正されたエネルギーです。もとのエネルギー p2+ω2q2p^2 + \omega^2q^2 は保存されませんが、この不変量があるので O(Δt2)O(\Delta t^2) の幅で振動するだけで、時間とともにずれていくことはありません。

注意 5.3(非線形の系での後退誤差解析(文献))

非線形のポテンシャル q′′=−∇V(q)q'' = -\nabla V(q) でも、速度 Verlet 法はシンプレクティックで時間反転対称です。このとき数値解は、修正されたハミルトニアン H~=H+Δt2H2+⋯\tilde H = H + \Delta t^2H_2 + \cdots の流れに指数的に小さい誤差で従い、エネルギーの誤差は指数的に長い時間 O(Δt2)O(\Delta t^2) にとどまります(Benettin–Giorgilli、Hairer–Lubich)。証明は Hairer・Lubich・Wanner の教科書(参考文献 [1])の第 IX 章にあります。この章では線形の場合に限り、定理環境にはしません。

6. Schrödinger 方程式:Cayley 変換と陽的 Euler 法

Section titled “6. Schrödinger 方程式:Cayley 変換と陽的 Euler 法”

定義 6.1(Crank–Nicolson 法(Cayley 変換))↗

半離散の Schrödinger 方程式に対し

ψn+1=CΔtψn,CΔt=(I+iΔt2H)−1(I−iΔt2H)\psi^{n+1} = C_{\Delta t}\psi^n,\qquad C_{\Delta t} = \Bigl(I + \frac{i\Delta t}{2}H\Bigr)^{-1}\Bigl(I - \frac{i\Delta t}{2}H\Bigr)

で定まる方法を Crank–Nicolson 法といい、CΔtC_{\Delta t} を HH の Cayley 変換という。ψn+1=(I−iΔtH)ψn\psi^{n+1} = (I - i\Delta tH)\psi^n を陽的 Euler 法、ψn+1=(I+iΔtH)−1ψn\psi^{n+1} = (I + i\Delta tH)^{-1}\psi^n を陰的 Euler 法という。

Crank–Nicolson 法は、i(ψn+1−ψn)/Δt=H(ψn+1+ψn)/2i(\psi^{n+1} - \psi^n)/\Delta t = H(\psi^{n+1} + \psi^n)/2 を ψn+1\psi^{n+1} について解いたものです。熱方程式に対する θ=1/2\theta = 1/2 の θ\theta 法(定理 4.2[楕円型・放物型方程式の差分法])と同じ形で、係数が純虚数になっています。HH が三重対角なら、1 ステップは三重対角の連立方程式 1 回です。

補題 6.2(Cayley 変換のスカラーの評価)✓

実数 xx について r(x)=1−ix/21+ix/2r(x) = \dfrac{1 - ix/2}{1 + ix/2} とおくと、∣r(x)∣=1|r(x)| = 1、r(x)=e−2iarctan⁡(x/2)r(x) = e^{-2i\arctan(x/2)} で、

∣r(x)−e−ix∣≤∣x∣312\bigl|r(x) - e^{-ix}\bigr| \le \frac{|x|^3}{12}

である。

証明(補題 6.2)

1−ix/2=1+x2/4 e−iarctan⁡(x/2)1 - ix/2 = \sqrt{1 + x^2/4}\,e^{-i\arctan(x/2)} で、1+ix/21 + ix/2 はその複素共役なので、r(x)=e−2iarctan⁡(x/2)r(x) = e^{-2i\arctan(x/2)}、∣r(x)∣=1|r(x)| = 1 です。実数 a,ba, b について ∣e−ia−e−ib∣=∣∫bae−isds∣≤∣a−b∣|e^{-ia} - e^{-ib}| = \bigl|\int_b^ae^{-is}ds\bigr| \le |a - b| なので、∣r(x)−e−ix∣≤∣x−2arctan⁡(x/2)∣|r(x) - e^{-ix}| \le |x - 2\arctan(x/2)| です。f(x)=x−2arctan⁡(x/2)f(x) = x - 2\arctan(x/2) は f(0)=0f(0) = 0、

f′(x)=1−11+x2/4=x2/41+x2/4∈[0,x24]f'(x) = 1 - \frac{1}{1 + x^2/4} = \frac{x^2/4}{1 + x^2/4} \in \Bigl[0, \frac{x^2}{4}\Bigr]

なので ∣f(x)∣≤∣∫0xs2/4 ds∣=∣x∣3/12|f(x)| \le \bigl|\int_0^xs^2/4\,ds\bigr| = |x|^3/12 です。

定理 6.3(Crank–Nicolson 法のユニタリ性と誤差)✓

HH をエルミート行列、Δt>0\Delta t \gt 0 とする。

  1. CΔtC_{\Delta t} はユニタリで HH と可換である。したがって ∥ψn∥=∥ψ0∥\|\psi^n\| = \|\psi_0\|、⟨ψn,Hψn⟩=⟨ψ0,Hψ0⟩\langle\psi^n, H\psi^n\rangle = \langle\psi_0, H\psi_0\rangle(すべての nn)。
  2. tn=nΔtt_n = n\Delta t について ∥ψn−e−itnHψ0∥≤tn Δt212 ∥H3ψ0∥.\bigl\|\psi^n - e^{-it_nH}\psi_0\bigr\| \le \frac{t_n\,\Delta t^2}{12}\,\|H^3\psi_0\|.
証明(定理 6.3)

H=UΛU∗H = U\Lambda U^{*}、Λ=diag(μk)\Lambda = \mathrm{diag}(\mu_k) とします(定理 4.2[スペクトル定理])。I±iΔt2H=U(I±iΔt2Λ)U∗I \pm \frac{i\Delta t}{2}H = U(I \pm \frac{i\Delta t}{2}\Lambda)U^{*} で、1+iΔtμk/2≠01 + i\Delta t\mu_k/2 \ne 0 なので逆行列が存在し、CΔt=U diag(r(Δtμk))U∗C_{\Delta t} = U\,\mathrm{diag}\bigl(r(\Delta t\mu_k)\bigr)U^{*} です。

  1. 補題 6.2 から ∣r(Δtμk)∣=1|r(\Delta t\mu_k)| = 1 なので CΔtC_{\Delta t} はユニタリです(定理 8.1[スペクトル定理])。HH と同じ UU で対角化されるので可換で、⟨CΔtψ,HCΔtψ⟩=⟨CΔtψ,CΔtHψ⟩=⟨ψ,Hψ⟩\langle C_{\Delta t}\psi, HC_{\Delta t}\psi\rangle = \langle C_{\Delta t}\psi, C_{\Delta t}H\psi\rangle = \langle\psi, H\psi\rangle(命題 3.2[スペクトル定理])です。

  2. ψ0=∑kckqk\psi_0 = \sum_kc_kq_k(qkq_k は UU の列)と展開すると、補題 2.2 から

ψn−e−itnHψ0=∑kck(r(Δtμk)n−e−inΔtμk)qk\psi^n - e^{-it_nH}\psi_0 = \sum_kc_k\bigl(r(\Delta t\mu_k)^n - e^{-in\Delta t\mu_k}\bigr)q_k

です。絶対値 1 の複素数 a,ba, b について ∣an−bn∣≤n∣a−b∣|a^n - b^n| \le n|a - b|(補題 2.2 の最後の主張の 1×11\times1 の場合)なので、補題 6.2 から各係数の絶対値は ∣ck∣ n∣Δtμk∣3/12|c_k|\,n|\Delta t\mu_k|^3/12 以下です。よって

∥ψn−e−itnHψ0∥2≤(nΔt312)2∑kμk6∣ck∣2=(tnΔt212)2∥H3ψ0∥2\bigl\|\psi^n - e^{-it_nH}\psi_0\bigr\|^2 \le \Bigl(\frac{n\Delta t^3}{12}\Bigr)^2\sum_k\mu_k^6|c_k|^2 = \Bigl(\frac{t_n\Delta t^2}{12}\Bigr)^2\|H^3\psi_0\|^2

です。

誤差の評価には ∥H∥\|H\| ではなく ∥H3ψ0∥\|H^3\psi_0\| が現れます。HH が微分作用素の離散化なら ∥H∥=O(h−2)\|H\| = O(h^{-2}) ですが、ψ0\psi_0 が滑らかな関数の格子値なら ∥H3ψ0∥\|H^3\psi_0\| は hh によらず有界で(ψ0\psi_0 の 6 階までの導関数で抑えられる)、hh と Δt\Delta t を独立に小さくできます。安定性に刻み幅の条件がないこと(無条件安定)と合わせて、これが陰的な方法の利点です。一方、高い波数の成分については Δtμk\Delta t\mu_k が大きく、r(Δtμk)→−1r(\Delta t\mu_k) \to -1 となって位相がまったく合いません。Crank–Nicolson 法は高い波数の成分を減衰させず、間違った位相で保ち続けます(熱方程式の場合の 命題 5.1[楕円型・放物型方程式の差分法] と同じ現象です)。

命題 6.4(陽的 Euler 法と陰的 Euler 法)✓

HH をエルミート行列、ϱ=max⁡k∣μk∣\varrho = \max_k|\mu_k| をそのスペクトル半径とする。

  1. ∥(I−iΔtH)n∥=(1+Δt2ϱ2)n/2\|(I - i\Delta tH)^n\| = (1 + \Delta t^2\varrho^2)^{n/2}。H≠0H \ne 0 なら、どんな Δt>0\Delta t \gt 0 でも n→∞n \to \infty で発散する。nΔt=tn\Delta t = t を固定すると (1+Δt2ϱ2)n/2≤etΔtϱ2/2(1 + \Delta t^2\varrho^2)^{n/2} \le e^{t\Delta t\varrho^2/2} である。
  2. ∥(I+iΔtH)−nψ∥≤∥ψ∥\|(I + i\Delta tH)^{-n}\psi\| \le \|\psi\| で、Hψ=μψH\psi = \mu\psi(μ≠0\mu \ne 0)なら ∥(I+iΔtH)−nψ∥=(1+Δt2μ2)−n/2∥ψ∥\|(I + i\Delta tH)^{-n}\psi\| = (1 + \Delta t^2\mu^2)^{-n/2}\|\psi\| である。
証明(命題 6.4)

H=UΛU∗H = U\Lambda U^{*} から (I−iΔtH)n=U diag((1−iΔtμk)n)U∗(I - i\Delta tH)^n = U\,\mathrm{diag}\bigl((1 - i\Delta t\mu_k)^n\bigr)U^{*} で、ユニタリ行列を掛けても 2 ノルムは変わらないので、ノルムは max⁡k∣1−iΔtμk∣n=(1+Δt2ϱ2)n/2\max_k|1 - i\Delta t\mu_k|^n = (1 + \Delta t^2\varrho^2)^{n/2} です。1+y≤ey1 + y \le e^y から (1+Δt2ϱ2)n/2≤enΔt2ϱ2/2=etΔtϱ2/2(1 + \Delta t^2\varrho^2)^{n/2} \le e^{n\Delta t^2\varrho^2/2} = e^{t\Delta t\varrho^2/2} です。陰的 Euler 法では対角成分が (1+iΔtμk)−n(1 + i\Delta t\mu_k)^{-n} で、絶対値は (1+Δt2μk2)−n/2≤1(1 + \Delta t^2\mu_k^2)^{-n/2} \le 1 です。

陽的 Euler 法の増幅因子 1−iΔtμ1 - i\Delta t\mu は、単位円周上の点 e−iΔtμe^{-i\Delta t\mu} を接線の方向に近似したもので、必ず円の外に出ます。ϱ=O(h−2)\varrho = O(h^{-2}) なので、時刻 tt までノルムの増大を抑えるには Δt=O(h4)\Delta t = O(h^4) が要り、実用になりません。陰的 Euler 法は逆に円の内側に入り、ノルムが減ります。どちらも確率の保存を壊します。

単位円(絶対値 1)実軸虚軸厳密Crank–Nicolson陰的 Euler陽的 Euler
1 ステップの増幅因子(刻み幅と固有値の積が 1.5 の場合)。厳密な解は単位円周上に載り、Crank–Nicolson 法も円周上(位相だけがずれる)、陽的 Euler 法は円の外、陰的 Euler 法は円の内側に載る。

例 6.5(2 準位系の Rabi 振動)

H=Ω2(0110)H = \frac\Omega2\begin{pmatrix}0 & 1\\ 1 & 0\end{pmatrix}、ψ0=(1,0)\psi_0 = (1, 0) とすると、固有値は ±Ω/2\pm\Omega/2 で、第 2 成分の確率は ∣ψ2(t)∣2=sin⁡2(Ωt/2)|\psi_2(t)|^2 = \sin^2(\Omega t/2)(Rabi 振動)です。Ω=1\Omega = 1、T=10T = 10 で 3 つの方法のノルムを比べます。

# Python 3.9.6 / NumPy 2.0.2
import numpy as np
Omega, T = 1.0, 10.0
H = 0.5 * Omega * np.array([[0, 1], [1, 0]], dtype=complex) # 固有値 ±Omega/2
I = np.eye(2)
print(" steps explicit Euler ||psi|| (1 + dt^2 Omega^2/4)^(n/2) implicit Euler ||psi|| Crank-Nicolson ||psi|| P_2 error (CN)")
for steps in [100, 1000, 10000]:
dt = T / steps
pe = pi = pc = np.array([1.0, 0.0], dtype=complex)
Mi = np.linalg.inv(I + 1j * dt * H)
Mc = np.linalg.solve(I + 0.5j * dt * H, I - 0.5j * dt * H)
for _ in range(steps):
pe, pi, pc = pe - 1j * dt * (H @ pe), Mi @ pi, Mc @ pc
print(f"{steps:6d} {np.linalg.norm(pe):.10f} {(1 + dt**2 * Omega**2 / 4) ** (steps / 2):.10f}"
f" {np.linalg.norm(pi):.10f} {np.linalg.norm(pc):.10f}"
f" {abs(abs(pc[1])**2 - np.sin(Omega * T / 2)**2):.2e}")
steps explicit Euler ||psi|| (1 + dt^2 Omega^2/4)^(n/2) implicit Euler ||psi|| Crank-Nicolson ||psi|| P_2 error (CN)
100 1.1329717069 1.1329717069 0.8826345741 1.0000000000 5.66e-04
1000 1.0125782933 1.0125782933 0.9875779548 1.0000000000 5.67e-06
10000 1.0012507814 1.0012507814 0.9987507811 1.0000000000 5.67e-08

この例では 2 つの固有値の絶対値が等しいので、陽的 Euler 法のノルムは 命題 6.4 の式 (1+Δt2Ω2/4)n/2(1 + \Delta t^2\Omega^2/4)^{n/2} に一致します。ノルムのずれは Δt\Delta t に比例して減るだけで、100 ステップでは確率の総和が 1.132≈1.281.13^2 \approx 1.28 になります。Crank–Nicolson 法はノルムを保ち、確率 ∣ψ2∣2|\psi_2|^2 の誤差はステップ数を 10 倍にするごとに 1/1001/100 です。

H=A+BH = A + B で、e−iτAe^{-i\tau A} と e−iτBe^{-i\tau B} はそれぞれ安く計算できるが e−iτ(A+B)e^{-i\tau(A+B)} はそうでない、という状況がよくあります。典型は AA が運動エネルギー(Fourier 変換で対角化される)、BB がポテンシャル(位置の表示で対角)の場合です。

定義 7.1(Lie–Trotter 分割と Strang 分割)↗

エルミート行列 A,BA, B と τ>0\tau \gt 0 について

S1(τ)=e−iτAe−iτB,S2(τ)=e−iτB/2 e−iτA e−iτB/2S_1(\tau) = e^{-i\tau A}e^{-i\tau B},\qquad S_2(\tau) = e^{-i\tau B/2}\,e^{-i\tau A}\,e^{-i\tau B/2}

を Lie–Trotter 分割、Strang 分割(対称分割)という。t=nτt = n\tau のとき、S1(τ)nS_1(\tau)^n、S2(τ)nS_2(\tau)^n を e−it(A+B)e^{-it(A+B)} の近似とする。

S1(τ)S_1(\tau) と S2(τ)S_2(\tau) は、ユニタリ行列(補題 2.2)の積なのでユニタリです。したがって、分割法はどんな τ\tau でもノルムを厳密に保存します。S2(τ)nS_2(\tau)^n では隣り合う e−iτB/2e^{-i\tau B/2} がまとまって e−iτBe^{-i\tau B} になるので、最初と最後の半ステップを除けば、1 ステップの手間は S1S_1 と同じです。

補題 7.2(共役による変化と交換子)✓

AA をエルミート行列、XX を同じ次数の行列、ss を実数とすると

∥eisAXe−isA−X∥≤∣s∣ ∥[A,X]∥\bigl\|e^{isA}Xe^{-isA} - X\bigr\| \le |s|\,\|[A, X]\|

である。

証明(補題 7.2)

Y(s)=eisAXe−isAY(s) = e^{isA}Xe^{-isA} とおくと、命題 4.2[線形微分方程式系] の 3 から Y′(s)=eisA(iAX−iXA)e−isA=i eisA[A,X]e−isAY'(s) = e^{isA}(iAX - iXA)e^{-isA} = i\,e^{isA}[A, X]e^{-isA} です。e±isAe^{\pm isA} はユニタリなので ∥Y′(s)∥=∥[A,X]∥\|Y'(s)\| = \|[A, X]\| で、Y(s)−X=∫0sY′(σ) dσY(s) - X = \int_0^sY'(\sigma)\,d\sigma から主張が出ます。

次の定理は、2 つの因子を交互に掛けたときの誤差を AA と BB の交換子で評価します。AA と BB が可換なら分割は厳密で、可換からのずれの大きさが誤差になる、というのが直感です。1 は誤差を積分で直接評価し、2 は経路積分 Monte Carlo 法の章の定理に iAiA、iBiB を代入して得ます。

定理 7.3(ユニタリな分割の誤差)✓

A,BA, B を dd 次のエルミート行列、t≥0t \ge 0、n≥1n \ge 1、τ=t/n\tau = t/n とする。

  1. ∥S1(τ)n−e−it(A+B)∥≤t τ2 ∥[A,B]∥\bigl\|S_1(\tau)^n - e^{-it(A+B)}\bigr\| \le \dfrac{t\,\tau}{2}\,\|[A, B]\|。
  2. ∥S2(τ)n−e−it(A+B)∥≤t τ2(∥[A,[A,B]]∥12+∥[B,[B,A]]∥24)\bigl\|S_2(\tau)^n - e^{-it(A+B)}\bigr\| \le t\,\tau^2\Bigl(\dfrac{\|[A,[A,B]]\|}{12} + \dfrac{\|[B,[B,A]]\|}{24}\Bigr)。
  3. [A,B]=0[A, B] = 0 なら S1(τ)n=S2(τ)n=e−it(A+B)S_1(\tau)^n = S_2(\tau)^n = e^{-it(A+B)} である。
証明(定理 7.3)
  1. F(s)=e−isAe−isBF(s) = e^{-isA}e^{-isB} とおきます。命題 4.2[線形微分方程式系] の 3 から
F′(s)=−iAF(s)−ie−isABe−isB=−i(A+B)F(s)+R(s),R(s)=i(Be−isA−e−isAB)e−isBF'(s) = -iAF(s) - ie^{-isA}Be^{-isB} = -i(A + B)F(s) + R(s),\qquad R(s) = i\bigl(Be^{-isA} - e^{-isA}B\bigr)e^{-isB}

です。F(0)=IF(0) = I なので、定数変化法(定理 3.1[線形微分方程式系] を各列に使う。基本解行列は e−is(A+B)e^{-is(A+B)})から

F(τ)−e−iτ(A+B)=∫0τe−i(τ−s)(A+B)R(s) dsF(\tau) - e^{-i\tau(A+B)} = \int_0^\tau e^{-i(\tau - s)(A+B)}R(s)\,ds

です。ユニタリ行列を掛けてもノルムは変わらないので、補題 7.2(X=BX = B)から ∥R(s)∥=∥Be−isA−e−isAB∥=∥eisABe−isA−B∥≤s∥[A,B]∥\|R(s)\| = \|Be^{-isA} - e^{-isA}B\| = \|e^{isA}Be^{-isA} - B\| \le s\|[A, B]\| で、

∥S1(τ)−e−iτ(A+B)∥≤∫0τs ∥[A,B]∥ ds=τ22∥[A,B]∥\bigl\|S_1(\tau) - e^{-i\tau(A+B)}\bigr\| \le \int_0^\tau s\,\|[A, B]\|\,ds = \frac{\tau^2}{2}\|[A, B]\|

です。S1(τ)S_1(\tau) と e−iτ(A+B)e^{-i\tau(A+B)} はユニタリなので、補題 2.2 の最後の主張から ∥S1(τ)n−e−it(A+B)∥≤nτ2∥[A,B]∥/2=tτ∥[A,B]∥/2\|S_1(\tau)^n - e^{-it(A+B)}\| \le n\tau^2\|[A,B]\|/2 = t\tau\|[A,B]\|/2 です。

  1. 定理 3.2[経路積分 Monte Carlo] の 1 を、その定理の AA、BB、β\beta、MM として iBiB、iAiA、tt、nn をとって使います(参照先の定理では外側に半ステップで置く行列が AA なので、こちらで外側に置く BB を向こうの AA に対応させます)。iAiA、iBiB、i(A+B)i(A+B) は反エルミート行列で、e−s(iA)=e−isAe^{-s(iA)} = e^{-isA} などはユニタリなのでノルムは 1 です。したがって、その定理の仮定である 3 つの半群の縮小性 ∥e−s(iB)∥≤1\|e^{-s(iB)}\| \le 1、∥e−s(iA)∥≤1\|e^{-s(iA)}\| \le 1、∥e−s(iA+iB)∥≤1\|e^{-s(iA + iB)}\| \le 1(s≥0s \ge 0)が満たされます(補題 2.2[経路積分 Monte Carlo] の 2)。参照先の対称分割 e−τ(iB)/2e−τ(iA)e−τ(iB)/2e^{-\tau(iB)/2}e^{-\tau(iA)}e^{-\tau(iB)/2} は S2(τ)S_2(\tau) で、その nn 乗が S2(τ)nS_2(\tau)^n です。参照先の評価では外側の行列の二重交換子に 1/241/24、内側の行列の二重交換子に 1/121/12 が付きます。交換子は [iB,[iB,iA]]=i3[B,[B,A]][iB, [iB, iA]] = i^3[B,[B,A]]、[iA,[iA,iB]]=i3[A,[A,B]][iA,[iA,iB]] = i^3[A,[A,B]] なので、右辺は
t3n2(∥[B,[B,A]]∥24+∥[A,[A,B]]∥12)=t τ2(∥[A,[A,B]]∥12+∥[B,[B,A]]∥24)\frac{t^3}{n^2}\Bigl(\frac{\|[B,[B,A]]\|}{24} + \frac{\|[A,[A,B]]\|}{12}\Bigr) = t\,\tau^2\Bigl(\frac{\|[A,[A,B]]\|}{12} + \frac{\|[B,[B,A]]\|}{24}\Bigr)

です。

  1. AA と BB が可換なら e−iτ(A+B)=e−iτAe−iτBe^{-i\tau(A+B)} = e^{-i\tau A}e^{-i\tau B}(命題 4.2[線形微分方程式系] の 1)で、e−iτB/2e^{-i\tau B/2} は e−iτAe^{-i\tau A} と可換(AA と可換な BB は AA の冪級数 e−iτAe^{-i\tau A} とも可換)なので S2(τ)=e−iτAe−iτBS_2(\tau) = e^{-i\tau A}e^{-i\tau B} です。

1 は参照先の定理の 2(対称でない分割。β22M∥[A,B]∥\frac{\beta^2}{2M}\|[A,B]\|)に iAiA、iBiB、β=t\beta = t、M=nM = n を入れたものと同じ評価で、上の証明はそれをユニタリな場合に直接書いたものです。2 では、半ステップで外側に置く BB(分割演算子法ではポテンシャル)の二重交換子 [B,[B,A]][B,[B,A]] に 1/241/24、内側の AA(運動項)の二重交換子 [A,[A,B]][A,[A,B]] に 1/121/12 が付きます。誤差の定数が ∥A∥\|A\|、∥B∥\|B\| ではなく交換子で書けることが重要です。AA と BB が「ほとんど可換」なら、それぞれのノルムが大きくても誤差は小さくなります。対称分割で誤差の次数が 1 つ上がるのは、S2(−τ)=S2(τ)−1S_2(-\tau) = S_2(\tau)^{-1}(時間反転対称。命題 5.2 の ΦΔt=LWL\Phi_{\Delta t} = LWL と同じ構造)のため、1 ステップの誤差の τ2\tau^2 の項が消えるからです。実際、速度 Verlet 法は、q′=pq' = p と p′=−Aqp' = -Aq のそれぞれの厳密な流れを Strang の順に合成したものです。

例 7.4(分割の誤差と交換子による上界)

乱数で作った 6 次のエルミート行列 A,BA, B と、可換な組(B=A2−2AB = A^2 - 2A)について、t=1t = 1 での誤差を上界と比べます。参照は scipy.linalg.expm です。

# Python 3.9.6 / NumPy 2.0.2 / SciPy 1.13.1
import numpy as np
from scipy.linalg import expm
rng = np.random.default_rng(1)
def hermitian(n):
X = rng.normal(size=(n, n)) + 1j * rng.normal(size=(n, n))
return (X + X.conj().T) / 2
comm = lambda X, Y: X @ Y - Y @ X
norm2 = lambda X: np.linalg.norm(X, 2)
def report(A, B, t=1.0):
exact = expm(-1j * t * (A + B))
c1 = norm2(comm(A, B))
c2 = norm2(comm(A, comm(A, B))) / 12 + norm2(comm(B, comm(B, A))) / 24
print(" n Lie-Trotter bound t tau c1/2 Strang bound t tau^2 c2")
for n in [10, 20, 40, 80, 160]:
tau = t / n
lie = np.linalg.matrix_power(expm(-1j * tau * A) @ expm(-1j * tau * B), n)
half = expm(-0.5j * tau * B)
strang = np.linalg.matrix_power(half @ expm(-1j * tau * A) @ half, n)
print(f"{n:6d} {norm2(lie - exact):.3e} {t * tau * c1 / 2:.3e} "
f"{norm2(strang - exact):.3e} {t * tau**2 * c2:.3e}")
A, B = hermitian(6), hermitian(6)
print("random Hermitian A, B (6 x 6)")
report(A, B)
print("commuting case: B = A^2 - 2A")
report(A, A @ A - 2 * A)
random Hermitian A, B (6 x 6)
n Lie-Trotter bound t tau c1/2 Strang bound t tau^2 c2
10 2.095e-01 4.804e-01 1.345e-02 4.802e-02
20 1.051e-01 2.402e-01 3.355e-03 1.200e-02
40 5.268e-02 1.201e-01 8.382e-04 3.001e-03
80 2.637e-02 6.005e-02 2.095e-04 7.503e-04
160 1.319e-02 3.002e-02 5.238e-05 1.876e-04
commuting case: B = A^2 - 2A
n Lie-Trotter bound t tau c1/2 Strang bound t tau^2 c2
10 2.214e-15 3.199e-16 2.919e-15 5.675e-17
20 3.928e-15 1.599e-16 3.692e-15 1.419e-17
40 4.076e-15 7.996e-17 6.807e-15 3.547e-18
80 5.594e-15 3.998e-17 1.138e-14 8.866e-19
160 2.686e-14 1.999e-17 3.370e-14 2.217e-19

誤差は上界の 1/21/2〜1/41/4 程度で、nn を 2 倍にすると Lie–Trotter は 1/21/2、Strang は 1/41/4 になります。可換な場合は誤差が丸めの大きさです(上界の列も、交換子を浮動小数点数で計算した丸め誤差だけが残っています。誤差が上界より大きく見えるのは、行列指数関数と冪の計算の丸め誤差です)。

定義 7.5(分割演算子 Fourier 法)↗

区間 [−L,L)[-L, L) を周期的とみなし、NN 点の格子 xj=−L+jΔxx_j = -L + j\Delta x(Δx=2L/N\Delta x = 2L/N、j=0,…,N−1j = 0, \ldots, N-1)と波数 κm=πm/L\kappa_m = \pi m/L(mm は NN 個の連続する整数。NN が奇数なら ∣m∣≤(N−1)/2|m| \le (N-1)/2)をとる。FF を Fmj=N−1/2e−iκmxjF_{mj} = N^{-1/2}e^{-i\kappa_mx_j} で定まる行列(離散 Fourier 変換)とし、

TN=F∗ diag(12κm2) F,VN=diag(V(xj))T_N = F^{*}\,\mathrm{diag}\bigl(\tfrac12\kappa_m^2\bigr)\,F,\qquad V_N = \mathrm{diag}\bigl(V(x_j)\bigr)

とおく。iψt=−12ψxx+V(x)ψi\psi_t = -\frac12\psi_{xx} + V(x)\psi の近似として iψ′=(TN+VN)ψi\psi' = (T_N + V_N)\psi を Strang 分割

ψn+1=e−iτVN/2 F∗ diag(e−iτκm2/2) F e−iτVN/2 ψn\psi^{n+1} = e^{-i\tau V_N/2}\,F^{*}\,\mathrm{diag}\bigl(e^{-i\tau\kappa_m^2/2}\bigr)\,F\,e^{-i\tau V_N/2}\,\psi^n

で進める方法を分割演算子 Fourier 法(split-step Fourier 法)という。

TNT_N は、スペクトル法の 2 階のスペクトル微分行列(命題 5.2[スペクトル法] の 4。区間の長さを 2π2\pi から 2L2L に変えたもの)の −12-\frac12 倍です。空間の離散化の誤差は、その章の補間誤差の評価に従います。

命題 7.6(分割演算子 Fourier 法の性質)✓

定義 7.5 について次が成り立つ。

  1. FF はユニタリで、TNT_N はエルミート、e−iτTN=F∗diag(e−iτκm2/2)Fe^{-i\tau T_N} = F^{*}\mathrm{diag}(e^{-i\tau\kappa_m^2/2})F である。1 ステップの行列は S2(τ)S_2(\tau)(A=TNA = T_N、B=VNB = V_N)で、ユニタリである。したがって ∥ψn∥=∥ψ0∥\|\psi^n\| = \|\psi^0\|。
  2. t=nτt = n\tau について ∥ψn−e−it(TN+VN)ψ0∥≤t τ2(∥[TN,[TN,VN]]∥12+∥[VN,[VN,TN]]∥24)∥ψ0∥.\bigl\|\psi^n - e^{-it(T_N + V_N)}\psi^0\bigr\| \le t\,\tau^2\Bigl(\frac{\|[T_N,[T_N,V_N]]\|}{12} + \frac{\|[V_N,[V_N,T_N]]\|}{24}\Bigr)\|\psi^0\|.
  3. 連続の作用素 T=−12d2dx2T = -\frac12\frac{d^2}{dx^2} と C4C^4 級の関数 VV について、C4C^4 級の関数 ψ\psi に対し [T,V]ψ=−12V′′ψ−V′ψ′,[V,[V,T]]ψ=−(V′)2ψ[T, V]\psi = -\tfrac12V''\psi - V'\psi',\qquad [V,[V,T]]\psi = -(V')^2\psi である。
証明(命題 7.6)
  1. (FF∗)mm′=1N∑je−i(κm−κm′)xj=1Nei(κm−κm′)L∑j=0N−1e−2πi(m−m′)j/N(FF^{*})_{mm'} = \frac1N\sum_je^{-i(\kappa_m - \kappa_{m'})x_j} = \frac1Ne^{i(\kappa_m - \kappa_{m'})L}\sum_{j=0}^{N-1}e^{-2\pi i(m - m')j/N} で、m,m′m, m' は NN 個の連続する整数の中にあるので m≠m′m \ne m' なら m−m′m - m' は NN の倍数でなく、和は 0(等比数列の和の公式)、m=m′m = m' なら 1 です。よって FF はユニタリです。TNT_N は実対角行列のユニタリ共役なのでエルミートで、補題 2.2 の証明と同じく e−iτTN=F∗diag(e−iτκm2/2)Fe^{-i\tau T_N} = F^{*}\mathrm{diag}(e^{-i\tau\kappa_m^2/2})F です。VNV_N は実対角行列で e−iτVN/2=diag(e−iτV(xj)/2)e^{-i\tau V_N/2} = \mathrm{diag}(e^{-i\tau V(x_j)/2}) なので、1 ステップの行列は e−iτVN/2e−iτTNe−iτVN/2e^{-i\tau V_N/2}e^{-i\tau T_N}e^{-i\tau V_N/2} です。

  2. 定理 7.3 の 2 です。

  3. T(Vψ)=−12(V′′ψ+2V′ψ′+Vψ′′)T(V\psi) = -\frac12(V''\psi + 2V'\psi' + V\psi'')、V(Tψ)=−12Vψ′′V(T\psi) = -\frac12V\psi'' の差が最初の式です。[V,T]=−[T,V][V, T] = -[T, V] なので [V,T]ψ=12V′′ψ+V′ψ′[V, T]\psi = \frac12V''\psi + V'\psi' で、

[V,[V,T]]ψ=V(12V′′ψ+V′ψ′)−(12V′′Vψ+V′(Vψ)′)=VV′ψ′−V′(V′ψ+Vψ′)=−(V′)2ψ[V,[V,T]]\psi = V\bigl(\tfrac12V''\psi + V'\psi'\bigr) - \bigl(\tfrac12V''V\psi + V'(V\psi)'\bigr) = VV'\psi' - V'(V'\psi + V\psi') = -(V')^2\psi

です。

1 ステップの演算量は、離散 Fourier 変換 2 回(FFT で各 O(Nlog⁡N)O(N\log N))と、長さ NN のベクトルの成分ごとの積 3 回です。行列を作る必要も連立方程式を解く必要もありません。

2 の右辺の交換子のノルムは、NN を大きくすると増えます(∥TN∥=O(N2)\|T_N\| = O(N^2) なので)。しかし 3 が示すように、交換子は「VV の導関数 × 低階の微分作用素」で、[V,[V,T]][V,[V,T]] は微分を含まない掛け算です。そのため、滑らかな VV と滑らかな波動関数については、誤差は NN によらず O(τ2)O(\tau^2) になります。これを作用素ノルムではなく ψ\psi の滑らかさ(Sobolev ノルム)で評価する定理は、非有界作用素の分割についての Jahnke–Lubich の結果(参考文献 [4])で、証明には作用素の定義域の議論が要るので、ここでは定理環境にしません。次数のつかない収束だけなら、自己共役作用素の Trotter 積公式(定理 6.1[1 径数ユニタリ群と強連続半群])と、行列の場合の Lie–Trotter の積公式(命題 2.2[行列 Lie 群と指数写像])から従います。

次の例のコヒーレント状態は、形を変えずに古典的な粒子のように揺れる波束のことで、厳密解が分かっているので誤差を測るのに向いています。

例 7.7(調和振動子のコヒーレント状態)

H=−12d2dx2+12x2H = -\frac12\frac{d^2}{dx^2} + \frac12x^2 の初期値 ψ0(x)=π−1/4e−(x−x0)2/2\psi_0(x) = \pi^{-1/4}e^{-(x - x_0)^2/2} に対する解は

ψ(x,t)=π−1/4exp⁡(−12(x−x0cos⁡t)2−ix0xsin⁡t−i2t+i4x02sin⁡2t)\psi(x, t) = \pi^{-1/4}\exp\Bigl(-\tfrac12(x - x_0\cos t)^2 - ix_0x\sin t - \tfrac{i}{2}t + \tfrac{i}{4}x_0^2\sin2t\Bigr)

で、形を変えずに古典的な軌道 x0cos⁡tx_0\cos t の上を往復します(代入して確かめられます)。x0=1x_0 = 1、T=2T = 2 とし、(a) 3 点差分の HH に対する Crank–Nicolson 法を、同じ行列 HH の厳密な時間発展と比べ、(b) 分割演算子 Fourier 法を、上の厳密解と比べます。

# Python 3.9.6 / NumPy 2.0.2 / SciPy 1.13.1
import numpy as np
from scipy.linalg import eigh_tridiagonal, solve_banded
x0 = 1.0
def coherent(x, t):
"""H = -(1/2) d^2/dx^2 + x^2/2 のコヒーレント状態(t = 0 で中心 x0 の Gauss 関数)。"""
return np.pi ** -0.25 * np.exp(-0.5 * (x - x0 * np.cos(t)) ** 2 - 1j * x0 * x * np.sin(t)
- 0.5j * t + 0.25j * x0**2 * np.sin(2 * t))
T = 2.0
# (a) Crank–Nicolson(3 点差分)。参照は同じ行列 H の厳密な時間発展(固有分解)。
L, M = 10.0, 400
h = 2 * L / M
x = -L + h * np.arange(1, M)
d, e = 1.0 / h**2 + 0.5 * x**2, -0.5 / h**2 * np.ones(M - 2)
lam, U = eigh_tridiagonal(d, e)
psi0 = coherent(x, 0.0).astype(complex)
ref = U @ (np.exp(-1j * lam * T) * (U.T @ psi0))
H = lambda v: d * v + np.concatenate(([0], e * v[:-1])) + np.concatenate((e * v[1:], [0]))
H3 = np.sqrt(h) * np.linalg.norm(H(H(H(psi0))))
norm = lambda v: np.sqrt(h) * np.linalg.norm(v)
print("Crank-Nicolson: steps | ||psi|| - 1 | |<H> - <H>_0| error order bound T dt^2 ||H^3 psi_0|| / 12")
prev = None
for steps in [100, 200, 400, 800]:
dt = T / steps
ab = np.zeros((3, M - 1), dtype=complex) # I + i dt H / 2 の帯行列
ab[0, 1:], ab[1], ab[2, :-1] = 0.5j * dt * e, 1 + 0.5j * dt * d, 0.5j * dt * e
psi = psi0.copy()
for _ in range(steps):
psi = solve_banded((1, 1), ab, psi - 0.5j * dt * H(psi))
err = norm(psi - ref)
dE = abs(h * np.vdot(psi, H(psi)) - h * np.vdot(psi0, H(psi0)))
print(f" {steps:5d} {abs(norm(psi) - norm(psi0)):.1e} {dE:.1e} {err:.3e} "
+ (" " if prev is None else f"{np.log2(prev / err):.2f}") + f" {T * dt**2 * H3 / 12:.3e}")
prev = err
# (b) 分割演算子 Fourier 法(Strang)。参照は連続の厳密解。
N = 128
h = 2 * L / N
x = -L + h * np.arange(N)
k = 2 * np.pi * np.fft.fftfreq(N, d=h)
V = 0.5 * x**2
print("split-operator: steps | ||psi|| - 1 | error order")
prev = None
for steps in [25, 50, 100, 200, 400]:
dt = T / steps
half, kin = np.exp(-0.5j * dt * V), np.exp(-0.5j * dt * k**2)
psi = coherent(x, 0.0).astype(complex)
for _ in range(steps):
psi = half * np.fft.ifft(kin * np.fft.fft(half * psi))
err = np.sqrt(h) * np.linalg.norm(psi - coherent(x, T))
print(f" {steps:5d} {abs(np.sqrt(h) * np.linalg.norm(psi) - 1):.1e} {err:.3e} "
+ ("" if prev is None else f"{np.log2(prev / err):.2f}"))
prev = err
Crank-Nicolson: steps | ||psi|| - 1 | |<H> - <H>_0| error order bound T dt^2 ||H^3 psi_0|| / 12
100 5.8e-15 1.4e-14 5.325e-04 5.329e-04
200 1.3e-15 1.6e-15 1.332e-04 2.00 1.332e-04
400 4.3e-15 4.1e-15 3.331e-05 2.00 3.331e-05
800 6.9e-15 1.6e-14 8.327e-06 2.00 8.327e-06
split-operator: steps | ||psi|| - 1 | error order
25 1.3e-15 1.141e-03
50 1.6e-15 2.853e-04 2.00
100 3.8e-15 7.131e-05 2.00
200 6.9e-15 1.783e-05 2.00
400 1.6e-14 4.457e-06 2.00

どちらもノルムは丸めの大きさで保存され、誤差の次数は 2 です。Crank–Nicolson 法の誤差は 定理 6.3 の上界とほぼ一致しています。補題 6.2 の不等式は x→0x \to 0 で等号に近づき(x−2arctan⁡(x/2)=x3/12+O(x5)x - 2\arctan(x/2) = x^3/12 + O(x^5))、この例では ψ0\psi_0 の主な成分が Δtμk≪1\Delta t\mu_k \ll 1 の範囲にあるからです。(a) は時間の誤差だけを見ています。連続の解との差には、これに 3 点差分の空間の誤差 O(h2)O(h^2) が加わります。(b) は N=128N = 128 点で空間の誤差が 10−610^{-6} より十分小さいので、連続の解との差がそのまま時間の誤差になっています。同じステップ数で比べると、分割演算子法の誤差は Crank–Nicolson 法の約 1/71/7 です(100 ステップで 7.1×10−57.1\times10^{-5} と 5.3×10−45.3\times10^{-4})。

全空間の問題を計算するには、有限の区間で打ち切ります。打ち切りの誤差は、波動関数が箱の端に届くまでは小さく、届いた分だけ生じます。

次の命題は、箱の中だけで計算した解と真の解の差が、箱の内側と外側をつなぐ項の時間積分で抑えられることを示します。PP は箱の中の成分だけを残す直交射影、Q=I−PQ = I - P は箱の外の成分だけを残す射影です。

命題 8.1(箱による切断の誤差)✓

HH を dd 次のエルミート行列、PP を直交射影(P=P∗=P2P = P^{*} = P^2)、Q=I−PQ = I - P とし、HP=PHPH_P = PHP とおく。ψ(t)=e−itHψ0\psi(t) = e^{-itH}\psi_0、φ(t)=e−itHPPψ0\varphi(t) = e^{-itH_P}P\psi_0 とすると、t≥0t \ge 0 について

∥Pψ(t)−φ(t)∥≤∫0t∥PHQ ψ(s)∥ ds,∥ψ(t)−φ(t)∥≤∥Qψ(t)∥+∫0t∥PHQ ψ(s)∥ ds\|P\psi(t) - \varphi(t)\| \le \int_0^t\|PHQ\,\psi(s)\|\,ds,\qquad \|\psi(t) - \varphi(t)\| \le \|Q\psi(t)\| + \int_0^t\|PHQ\,\psi(s)\|\,ds

が成り立つ。H=12h2tridiag(−1,2,−1)+diag(Vj)H = \frac{1}{2h^2}\mathrm{tridiag}(-1,2,-1) + \mathrm{diag}(V_j)(格子点 j=−J′,…,J′j = -J', \ldots, J')で、PP が ∣j∣≤J|j| \le J(J<J′J \lt J')の成分への射影のとき、

∥PHQ ψ(s)∥=12h2(∣ψJ+1(s)∣2+∣ψ−J−1(s)∣2)1/2\|PHQ\,\psi(s)\| = \frac{1}{2h^2}\bigl(|\psi_{J+1}(s)|^2 + |\psi_{-J-1}(s)|^2\bigr)^{1/2}

である。

証明(命題 8.1)

HPH_P はエルミートで、PHP=HPP=HPPH_P = H_PP = H_P なので e−itHPe^{-itH_P} は PP と可換で、φ(t)=Pφ(t)\varphi(t) = P\varphi(t) です。w(t)=Pψ(t)−φ(t)w(t) = P\psi(t) - \varphi(t) とおくと、ψ′=−iHψ\psi' = -iH\psi、φ′=−iHPφ\varphi' = -iH_P\varphi、I=P+QI = P + Q から

w′=−iPH(P+Q)ψ+iHPφ=−iHP(Pψ−φ)−iPHQψ=−iHPw−iPHQψ,w(0)=0w' = -iPH(P + Q)\psi + iH_P\varphi = -iH_P(P\psi - \varphi) - iPHQ\psi = -iH_Pw - iPHQ\psi,\qquad w(0) = 0

です(PHPψ=HPPψPHP\psi = H_PP\psi を使った)。定数変化法(定理 3.1[線形微分方程式系])から w(t)=−i∫0te−i(t−s)HPPHQψ(s) dsw(t) = -i\int_0^te^{-i(t-s)H_P}PHQ\psi(s)\,ds で、e−i(t−s)HPe^{-i(t-s)H_P} はユニタリ(補題 2.2)なので最初の不等式が出ます。2 番目は ψ−φ=Qψ+w\psi - \varphi = Q\psi + w と三角不等式です。

三重対角の場合、(HQψ)j=∑lHjl(Qψ)l(HQ\psi)_j = \sum_lH_{jl}(Q\psi)_l で、∣j∣≤J|j| \le J かつ ∣l∣>J|l| \gt J で Hjl≠0H_{jl} \ne 0 となるのは (j,l)=(J,J+1),(−J,−J−1)(j, l) = (J, J+1), (-J, -J-1) だけで、その値は −1/(2h2)-1/(2h^2) です。よって PHQψPHQ\psi の 0 でない成分は j=±Jj = \pm J の −ψ±(J+1)/(2h2)-\psi_{\pm(J+1)}/(2h^2) だけです。

φ\varphi は、箱の中だけで(箱の外を 0 とする Dirichlet 境界条件で)計算した解です。命題は、その誤差が、箱のすぐ外の格子点での真の解の大きさ ∣ψ±(J+1)(s)∣|\psi_{\pm(J+1)}(s)| の時間積分で抑えられることを言っています。波動関数の裾が時刻 tt まで箱の端で小さければ、切断の誤差は小さいままです。逆に、波束が端に届くと、Dirichlet 境界でも周期境界でも反射や回り込みが起こり、誤差は O(1)O(1) になります。散乱の計算で端に吸収ポテンシャルを置くのはこのためです。

例 8.2(自由な Gauss 波束と箱の大きさ)

自由粒子(V=0V = 0)の初期値 ψ0(x)=(2πσ2)−1/4e−x2/(4σ2)+ik0x\psi_0(x) = (2\pi\sigma^2)^{-1/4}e^{-x^2/(4\sigma^2) + ik_0x} に対する解は、確率密度が平均 k0tk_0t、分散 σt2=σ2+t2/(4σ2)\sigma_t^2 = \sigma^2 + t^2/(4\sigma^2) の正規分布になります(Fourier 変換で ψ^(ξ,t)=e−itξ2/2ψ^0(ξ)\hat\psi(\xi, t) = e^{-it\xi^2/2}\hat\psi_0(\xi) とし、Gauss 関数の Fourier 変換 命題 3.1[ℝⁿ 上のフーリエ変換] を使う。ノルムの保存は 定理 4.1[ℝⁿ 上のフーリエ変換])。L>∣k0∣tL \gt |k_0|t のとき、箱 [−L,L][-L, L] の外にある確率は、正規分布の裾の評価から e−(L−∣k0∣t)2/(2σt2)e^{-(L - |k_0|t)^2/(2\sigma_t^2)} 以下です。σ=1\sigma = 1、k0=2k_0 = 2、t=3t = 3 で、周期境界の箱で(運動項だけなので時間の誤差なしに)計算した解と厳密解の差を、裾の確率の上界の平方根と比べます。

# Python 3.9.6 / NumPy 2.0.2
import numpy as np
sigma, k0, T, steps = 1.0, 2.0, 3.0, 600
def packet(x, t):
"""自由粒子(H = -(1/2) d^2/dx^2)の Gauss 波束。t = 0 で幅 sigma、平均運動量 k0。"""
s = sigma**2 + 0.5j * t
return (2 * np.pi * sigma**2) ** -0.25 * np.sqrt(sigma**2 / s) * np.exp(
-(x - k0 * t) ** 2 / (4 * s) + 1j * k0 * x - 0.5j * k0**2 * t)
print(" L N error at t = 3 sqrt of the tail bound exp(-(L - k0 t)^2 / (2 sigma_t^2))")
for L in [8.0, 10.0, 12.0, 16.0, 20.0]:
N = int(16 * L)
h = 2 * L / N
x = -L + h * np.arange(N)
k = 2 * np.pi * np.fft.fftfreq(N, d=h)
psi = packet(x, 0.0)
kin = np.exp(-0.5j * (T / steps) * k**2)
for _ in range(steps):
psi = np.fft.ifft(kin * np.fft.fft(psi)) # V = 0 なので運動項だけ(時間の誤差はない)
err = np.sqrt(h) * np.linalg.norm(psi - packet(x, T))
st2 = sigma**2 + T**2 / (4 * sigma**2)
print(f" {L:4.1f} {N:4d} {err:.3e} {np.exp(-(L - k0 * T) ** 2 / (4 * st2)):.3e}")
L N error at t = 3 sqrt of the tail bound exp(-(L - k0 t)^2 / (2 sigma_t^2))
8.0 128 3.758e-01 7.351e-01
10.0 160 1.203e-01 2.921e-01
12.0 192 2.222e-02 6.271e-02
16.0 256 1.326e-04 4.563e-04
20.0 320 7.256e-08 2.833e-07

時刻 3 で波束の中心は x=6x = 6、幅は σ3≈1.8\sigma_3 \approx 1.8 です。L=8L = 8 では裾が端を越えて反対側から回り込み、誤差は 0.380.38 です。L=20L = 20 では 10−710^{-7} です。誤差は裾の確率の平方根(振幅の大きさ)と同じ減り方をしています。必要な箱の大きさは、初期の幅ではなく、最終時刻での位置 ∣k0∣t|k_0|t と広がった幅 σt\sigma_t で決まります。

注意 8.3(この章で扱わなかった方法)

行列指数関数の作用 e−itHψe^{-itH}\psi を Krylov 部分空間で近似する方法(Hochbruck–Lubich、参考文献 [5])、Chebyshev 多項式で展開する方法(Tal-Ezer–Kosloff)、4 次以上の分割(Suzuki、Yoshida の合成法)、吸収境界と複素吸収ポテンシャルは、Lubich のモノグラフ(参考文献 [2])と Hairer・Lubich・Wanner の教科書(参考文献 [1])にあります。分割の誤差を τ\tau の冪級数として形式的に求めるには Baker–Campbell–Hausdorff の公式(定理 6.2[行列 Lie 群と指数写像])が使えますが、定理 7.3 のような τ\tau の大きさによらない上界は、この章のように積分表示から導きます。

演習 9.1易

調和振動子 q′′=−ω2qq'' = -\omega^2q に leapfrog 法を ωΔt=1\omega\Delta t = 1 で使う。数値解の振動数 ω~\tilde\omega と、厳密な 1 周期 2π/ω2\pi/\omega のあいだに生じる位相の誤差を求めよ。

解答

命題 5.2 の 3 から ω~=2Δtarcsin⁡12=2Δt⋅π6=π3ω≈1.0472 ω\tilde\omega = \frac{2}{\Delta t}\arcsin\frac12 = \frac{2}{\Delta t}\cdot\frac\pi6 = \frac{\pi}{3}\omega \approx 1.0472\,\omega です。1 周期 t=2π/ωt = 2\pi/\omega のあいだの位相の誤差は (ω~−ω)t=2π(π/3−1)≈0.297(\tilde\omega - \omega)t = 2\pi(\pi/3 - 1) \approx 0.297 ラジアン(約 17 度)で、数値解は進みすぎます。ωΔt=1\omega\Delta t = 1 は安定条件 ωΔt<2\omega\Delta t \lt 2 を十分に満たしていますが、1 周期あたり 2π≈6.32\pi \approx 6.3 ステップしかなく、位相の精度は低いです。先頭項の近似 ω2Δt2/24=1/24≈0.0417\omega^2\Delta t^2/24 = 1/24 \approx 0.0417 は、正確な相対誤差 0.04720.0472 より少し小さい値を与えます。

演習 9.2標準

Crank–Nicolson 法について、ψn+1−ψn\psi^{n+1} - \psi^n と ψn+1+ψn\psi^{n+1} + \psi^n の内積を使って、固有分解を使わずに ∥ψn+1∥=∥ψn∥\|\psi^{n+1}\| = \|\psi^n\| を示せ。同じ方法で、陰的 Euler 法では ∥ψn+1∥2=∥ψn∥2−∥ψn+1−ψn∥2\|\psi^{n+1}\|^2 = \|\psi^n\|^2 - \|\psi^{n+1} - \psi^n\|^2 となることを示せ。

解答

Crank–Nicolson 法の式は ψn+1−ψn=−iΔt2H(ψn+1+ψn)\psi^{n+1} - \psi^n = -\frac{i\Delta t}{2}H(\psi^{n+1} + \psi^n) です。ϕ=ψn+1+ψn\phi = \psi^{n+1} + \psi^n との内積をとると ⟨ϕ,ψn+1−ψn⟩=−iΔt2⟨ϕ,Hϕ⟩\langle\phi, \psi^{n+1} - \psi^n\rangle = -\frac{i\Delta t}{2}\langle\phi, H\phi\rangle で、HH がエルミートなので ⟨ϕ,Hϕ⟩\langle\phi, H\phi\rangle は実数、右辺は純虚数です。左辺の実部は Re⟨ψn+1+ψn,ψn+1−ψn⟩=∥ψn+1∥2−∥ψn∥2\mathrm{Re}\langle\psi^{n+1} + \psi^n, \psi^{n+1} - \psi^n\rangle = \|\psi^{n+1}\|^2 - \|\psi^n\|^2(交差項 ⟨ψn,ψn+1⟩−⟨ψn+1,ψn⟩\langle\psi^n, \psi^{n+1}\rangle - \langle\psi^{n+1}, \psi^n\rangle は純虚数)なので、これが 0 です。

陰的 Euler 法は ψn+1−ψn=−iΔtHψn+1\psi^{n+1} - \psi^n = -i\Delta tH\psi^{n+1} です。ψn+1\psi^{n+1} との内積の実部をとると Re⟨ψn+1,ψn+1−ψn⟩=0\mathrm{Re}\langle\psi^{n+1}, \psi^{n+1} - \psi^n\rangle = 0 です。恒等式 2Re⟨a,a−b⟩=∥a∥2−∥b∥2+∥a−b∥22\mathrm{Re}\langle a, a - b\rangle = \|a\|^2 - \|b\|^2 + \|a - b\|^2 から ∥ψn+1∥2−∥ψn∥2+∥ψn+1−ψn∥2=0\|\psi^{n+1}\|^2 - \|\psi^n\|^2 + \|\psi^{n+1} - \psi^n\|^2 = 0 です。このエネルギー法の議論は HH が変数係数でも、時間に依存しても通ります(命題 5.2[楕円型・放物型方程式の差分法] と同じ考え方です)。

演習 9.3標準

T=−12d2dx2T = -\frac12\frac{d^2}{dx^2}、V=12x2V = \frac12x^2 について、滑らかな関数に作用する作用素として [T,[T,V]]=−2T[T,[T,V]] = -2T、[V,[V,T]]=−2V[V,[V,T]] = -2V を示せ。これから、調和振動子の分割演算子法の誤差の定数が、作用素のノルムではなく状態のエネルギーの大きさで決まることを説明せよ。

解答

命題 7.6 の 3 で V′=xV' = x、V′′=1V'' = 1 とすると [T,V]ψ=−12ψ−xψ′[T, V]\psi = -\frac12\psi - x\psi'、[V,[V,T]]ψ=−x2ψ=−2Vψ[V,[V,T]]\psi = -x^2\psi = -2V\psi です。次に [T,xddx][T, x\frac{d}{dx}] を計算します。d2dx2(xψ′)=2ψ′′+xψ′′′\frac{d^2}{dx^2}(x\psi') = 2\psi'' + x\psi'''、xddxψ′′=xψ′′′x\frac{d}{dx}\psi'' = x\psi''' なので [d2dx2,xddx]=2d2dx2[\frac{d^2}{dx^2}, x\frac{d}{dx}] = 2\frac{d^2}{dx^2}、[T,xddx]=−d2dx2=2T[T, x\frac{d}{dx}] = -\frac{d^2}{dx^2} = 2T です。定数 −12-\frac12 との交換子は 0 なので [T,[T,V]]=−[T,xddx]=−2T[T,[T,V]] = -[T, x\frac{d}{dx}] = -2T です。

したがって 定理 7.3 の 2 の形の評価で交換子を状態 ψ\psi に作用させたものは ∥Tψ∥\|T\psi\| と ∥Vψ∥\|V\psi\| の大きさで、どちらも ψ\psi の運動エネルギーと位置エネルギーの程度です。例 7.7 のコヒーレント状態ではこれらは 1 の程度なので、誤差は tτ2×O(1)t\tau^2 \times O(1) で、格子を細かくしても増えません。行列 TNT_N のノルムは O(N2)O(N^2) ですが、それは波動関数がほとんど成分をもたない高い波数から来ています。

演習 9.4難

定理 4.1 の離散エネルギーを、命題 5.2 の (qn,pn)(q^n, p^n) を使って En=12∥pn+1/2∥2+12⟨qn+1,Aqn⟩E^n = \frac12\|p^{n+1/2}\|^2 + \frac12\langle q^{n+1}, Aq^n\rangle と書く。AA が Δt2λd<4\Delta t^2\lambda_d \lt 4 を満たすとき、E~(q,p)=12∥p∥2+12⟨q,A(I−Δt24A)q⟩\tilde E(q, p) = \frac12\|p\|^2 + \frac12\langle q, A(I - \frac{\Delta t^2}{4}A)q\rangle が ΦΔt\Phi_{\Delta t} の不変量であることを、AA の固有分解で 命題 5.2 の 3 に帰着させて示せ。また E~(qn,pn)=En\tilde E(q^n, p^n) = E^n を確かめよ。

解答

AA の正規直交固有基底 qkq_k(固有値 λk=ωk2\lambda_k = \omega_k^2)で q=∑kakqkq = \sum_ka_kq_k、p=∑kbkqkp = \sum_kb_kq_k と展開すると、ΦΔt\Phi_{\Delta t} は AA とスカラー倍だけからなるので、各 kk の成分 (ak,bk)(a_k, b_k) に、d=1d = 1、A=ωk2A = \omega_k^2 の場合の写像として作用します。E~=∑k12(bk2+ωk2(1−ωk2Δt2/4)ak2)\tilde E = \sum_k\frac12\bigl(b_k^2 + \omega_k^2(1 - \omega_k^2\Delta t^2/4)a_k^2\bigr) で、各項は 命題 5.2 の 3 の不変量の 1/21/2 倍です(その証明の計算は ωΔt<2\omega\Delta t \lt 2 を使っていないので、κ\kappa の符号によらず成り立ちます)。

EnE^n との一致: pn+1/2=pn−Δt2Aqnp^{n+1/2} = p^n - \frac{\Delta t}{2}Aq^n、qn+1=qn+Δt pn+1/2=(I−Δt22A)qn+Δt pnq^{n+1} = q^n + \Delta t\,p^{n+1/2} = (I - \frac{\Delta t^2}{2}A)q^n + \Delta t\,p^n を代入すると

12∥pn+1/2∥2=12∥pn∥2−Δt2⟨pn,Aqn⟩+Δt28∥Aqn∥2,12⟨qn+1,Aqn⟩=12⟨qn,Aqn⟩−Δt24∥Aqn∥2+Δt2⟨pn,Aqn⟩\tfrac12\|p^{n+1/2}\|^2 = \tfrac12\|p^n\|^2 - \tfrac{\Delta t}{2}\langle p^n, Aq^n\rangle + \tfrac{\Delta t^2}{8}\|Aq^n\|^2,\qquad \tfrac12\langle q^{n+1}, Aq^n\rangle = \tfrac12\langle q^n, Aq^n\rangle - \tfrac{\Delta t^2}{4}\|Aq^n\|^2 + \tfrac{\Delta t}{2}\langle p^n, Aq^n\rangle

で、和は 12∥pn∥2+12⟨qn,Aqn⟩−Δt28∥Aqn∥2=E~(qn,pn)\frac12\|p^n\|^2 + \frac12\langle q^n, Aq^n\rangle - \frac{\Delta t^2}{8}\|Aq^n\|^2 = \tilde E(q^n, p^n) です。Δt2λd<4\Delta t^2\lambda_d \lt 4 は A(I−Δt24A)A(I - \frac{\Delta t^2}{4}A) が正定値である条件で、定理 4.1 の 2 の正定値性の条件と同じです。離散エネルギーは、時刻 tnt_n の位置と運動量で書くと、ポテンシャルを O(Δt2)O(\Delta t^2) だけ修正したエネルギーになっています。

  1. E. Hairer, C. Lubich, G. Wanner, Geometric Numerical Integration: Structure-Preserving Algorithms for Ordinary Differential Equations, 2nd ed., Springer, 2006 — Störmer–Verlet 法、シンプレクティック性、後退誤差解析(第 IX 章)。
  2. C. Lubich, From Quantum to Classical Molecular Dynamics: Reduced Models and Numerical Analysis, European Mathematical Society, 2008 — Schrödinger 方程式の時間積分(分割法・Krylov 法・Chebyshev 法)。
  3. R. J. LeVeque, Finite Difference Methods for Ordinary and Partial Differential Equations, SIAM, 2007 — 波動方程式の差分法、数値分散。
  4. T. Jahnke, C. Lubich, “Error bounds for exponential operator splittings”, BIT Numerical Mathematics 40 (2000), 735–744.
  5. M. Hochbruck, C. Lubich, “On Krylov subspace approximations to the matrix exponential operator”, SIAM Journal on Numerical Analysis 34 (1997), 1911–1925.
  6. G. Strang, “On the construction and comparison of difference schemes”, SIAM Journal on Numerical Analysis 5 (1968), 506–517.

このテーマの 100 本ノック(50 問)

執筆: Claude Code(Opus 5.5)、Claude Code(Sonnet 5.5)・監査 2 回(Claude Code)・最終 2026-10-12

この記事の誤りを報告する ・運営: 夢現技研合同会社 ・料金 ・利用条件 ・特定商取引法に基づく表記

© 2026 夢現技研合同会社 ・コード例は MIT ライセンスです。