コンテンツにスキップ

楕円型・放物型方程式の差分法:離散最大値原理と θ 法

対象読者: 本テーマ第 1 章の整合性・安定性・収束と、ラプラス方程式の最大値原理、熱方程式の基本的性質を学んだ人。行列のノルムと条件数も知っているものとします。

前提となる記事:差分法の整合性・安定性・収束:Lax の同等定理と von Neumann 解析、ラプラス方程式と調和関数:平均値の性質・最大値原理・Harnack の不等式・Green 関数、熱方程式:基本解・放物型最大値原理・熱半群 e^{tΔ}・Feynman–Kac 公式、行列のノルムと線形方程式の条件数:誘導ノルム・後退誤差・特異行列までの距離

生 Markdown

金属板の温度分布や、棒を伝わる熱のように、連続的に広がる量をコンピュータで扱うには、場所と時間を格子の点に区切って近似します。この記事で調べるのは、そうして作った近似が本当に元の方程式の解に近づくのか、近づくために時間の刻み幅をどう選べばよいのか、という素朴な疑問です。読み終えると、板の定常な温度を求める計算と、熱の広がりを時間順に追う計算のそれぞれで、近似の誤差が格子幅に応じてどれだけ小さくなるか、どの刻み幅なら計算が壊れないかを説明できるようになります。

  • Poisson 方程式 −Δu=f-\Delta u = f の 5 点差分は、連続の場合と同じ形の最大値原理を満たします。そこから、境界で 00 の格子関数について ∥u∥∞≤18∥Δhu∥∞\|u\|_\infty \le \frac18\|\Delta_hu\|_\infty(安定性)が出て、打ち切り誤差(差分近似が元の微分とずれる大きさ)O(h2)O(h^2)(整合性)と合わせて ∥u−uh∥∞≤h296(∥∂x4u∥∞+∥∂y4u∥∞)\|u - u_h\|_\infty \le \frac{h^2}{96}\bigl(\|\partial_x^4u\|_\infty + \|\partial_y^4u\|_\infty\bigr) が従います。
  • 離散 Laplace 作用素の固有値は閉じた形で分かり、最小固有値は 2π22\pi^2 に近い値です。これは ℓ2\ell^2 ノルムでの安定性と、連立方程式を反復法で解くときの条件数 O(h−2)O(h^{-2}) を与えます。
  • 熱方程式 ut=uxxu_t = u_{xx} の θ 法は、θ≥1/2\theta \ge 1/2 なら無条件に、θ<1/2\theta < 1/2 なら格子比(時間刻みと格子幅の 2 乗の比)μ=Δt/h2≤12(1−2θ)\mu = \Delta t/h^2 \le \frac{1}{2(1 - 2\theta)} のときに限り ℓ2\ell^2 で安定です。陽的 Euler(θ=0\theta = 0)では Δt≤h2/2\Delta t \le h^2/2 です。
  • μ(1−θ)≤1/2\mu(1 - \theta) \le 1/2 なら θ 法は離散最大値原理を満たします。Crank–Nicolson(θ=1/2\theta = 1/2)は ℓ2\ell^2 では無条件に安定ですが、最大値原理が保証されるのは μ≤1\mu \le 1 のときです。
  • 誤差は θ≠1/2\theta \ne 1/2 で O(Δt+h2)O(\Delta t + h^2)、θ=1/2\theta = 1/2 で O(Δt2+h2)O(\Delta t^2 + h^2) です。Crank–Nicolson は高波数の成分をほとんど減衰させない(1 ステップで波の大きさが何倍になるかを表す増幅因子が −1-1 に近い)ので、角や跳びのある初期値では振動が残ります。最初の数ステップを陰的 Euler にすると消えます。

前章では、発展方程式の差分スキームについて「整合性と安定性から収束が従う」ことを示しました。この章では、同じ枠組みを 2 つの基本的な方程式に適用します。時間によらない Poisson 方程式(楕円型)と、熱方程式(放物型)です。

定常問題には時間ステップがないので、安定性の意味が変わります。差分方程式 −Δhuh=f-\Delta_hu_h = f は連立一次方程式で、安定性とは「逆行列のノルムが格子幅によらず有界」ということです。誤差 e=u−uhe = u - u_h は打ち切り誤差 τ\tau を右辺とする同じ差分方程式 −Δhe=τ-\Delta_he = \tau を満たすので、∥e∥≤∥(−Δh)−1∥∥τ∥\|e\| \le \|(-\Delta_h)^{-1}\|\|\tau\| となります。逆行列のノルムを抑える道具が、最大値ノルムでは離散最大値原理、ℓ2\ell^2 ノルムでは固有値です。

熱方程式では、もう 1 つ問題が現れます。陽的な方法の安定条件 Δt≤h2/2\Delta t \le h^2/2 は、格子を 2 倍細かくすると時間ステップを 4 倍細かくすることを要求します。これを避けるには陰的な方法を使いますが、陰的な方法の中でも、高波数の成分の扱いに違いがあります。θ 法は、陽的 Euler・陰的 Euler・Crank–Nicolson を 1 つのパラメータでつなぐ族で、この違いを 1 つの式で調べられます。

方程式そのものの性質(Laplace 方程式 の最大値原理、熱方程式 の最大値原理と平滑化)は既存の章で証明されています。この章で示すのは、差分スキームがそれらの性質をどこまで受け継ぐか、です。

定義 2.1(格子領域と離散 Laplace 作用素)↗

d∈{1,2}d \in \{1, 2\}、h>0h > 0 とし、e1,…,ed\boldsymbol{e}_1, \ldots, \boldsymbol{e}_d を Rd\mathbb{R}^d の標準基底とする。格子 hZdh\mathbb{Z}^d の点 PP の隣接点を P±hekP \pm h\boldsymbol{e}_k(k=1,…,dk = 1, \ldots, d)とし、その集合を N(P)N(P) と書く(2d2d 個)。hZdh\mathbb{Z}^d の空でない有限部分集合 Ωh\Omega_h を内部の格子点の集合とし、

Γh={Q∉Ωh:Q∈N(P) となる P∈Ωh がある},Ωˉh=Ωh∪Γh\Gamma_h = \{Q \notin \Omega_h : Q \in N(P)\ \text{となる}\ P \in \Omega_h\ \text{がある}\},\qquad \bar\Omega_h = \Omega_h \cup \Gamma_h

を境界の格子点の集合、格子領域という。Ωˉh\bar\Omega_h 上の実数値関数 uu に対し

Δhu(P)=1h2∑Q∈N(P)(u(Q)−u(P))(P∈Ωh)\Delta_hu(P) = \frac{1}{h^2}\sum_{Q \in N(P)}\bigl(u(Q) - u(P)\bigr)\qquad(P \in \Omega_h)

を離散 Laplace 作用素という。d=1d = 1 では Δhu(x)=u(x+h)−2u(x)+u(x−h)h2\Delta_hu(x) = \frac{u(x+h) - 2u(x) + u(x-h)}{h^2}(3 点差分)、d=2d = 2 では

Δhu(x,y)=u(x+h,y)+u(x−h,y)+u(x,y+h)+u(x,y−h)−4u(x,y)h2\Delta_hu(x,y) = \frac{u(x+h,y) + u(x-h,y) + u(x,y+h) + u(x,y-h) - 4u(x,y)}{h^2}

(5 点差分)である。Ωh\Omega_h のどの 2 点も、Ωh\Omega_h の点だけを通って隣接点をたどる列で結べるとき、Ωh\Omega_h は連結であるという。

以下では主に、h=1/(m+1)h = 1/(m+1)(m≥1m \ge 1)として、単位区間 Ωh={ih:1≤i≤m}\Omega_h = \{ih : 1 \le i \le m\} と単位正方形 Ωh={(ih,jh):1≤i,j≤m}\Omega_h = \{(ih, jh) : 1 \le i, j \le m\} を扱います。単位正方形では Γh\Gamma_h は 4 辺の上の格子点(4 隅を除く)です。4 隅は内部の点の隣接点ではないので、5 点差分には現れません。

Δhu(P)≥0\Delta_hu(P) \ge 0 は「u(P)u(P) が隣接点での値の平均以下」ということです。調和関数の平均値の性質の離散版で、最大値原理はここから出ます。

定理 2.2(離散最大値原理)✓

uu を格子領域 Ωˉh\bar\Omega_h 上の実数値関数とし、すべての P∈ΩhP \in \Omega_h で −Δhu(P)≤0-\Delta_hu(P) \le 0 とする。

  1. max⁡Ωˉhu=max⁡Γhu\max_{\bar\Omega_h}u = \max_{\Gamma_h}u。
  2. Ωh\Omega_h が連結で、uu が Ωh\Omega_h の点で最大値 max⁡Ωˉhu\max_{\bar\Omega_h}u をとるならば、uu は Ωˉh\bar\Omega_h で定数である。

−Δhu≥0-\Delta_hu \ge 0 のときは、最大を最小に置き換えた主張が成り立つ。

証明(定理 2.2)

M=max⁡ΩˉhuM = \max_{\bar\Omega_h}u とおきます(Ωˉh\bar\Omega_h は有限集合なので最大値があります)。

鍵になる事実. P∈ΩhP \in \Omega_h で u(P)=Mu(P) = M ならば、すべての Q∈N(P)Q \in N(P) で u(Q)=Mu(Q) = M です。実際、Δhu(P)≥0\Delta_hu(P) \ge 0 から ∑Q∈N(P)(u(Q)−M)≥0\sum_{Q\in N(P)}(u(Q) - M) \ge 0 ですが、各項は u(Q)−M≤0u(Q) - M \le 0 なので、すべての項が 00 でなければなりません。

1. u(P)=Mu(P) = M となる P∈ΩˉhP \in \bar\Omega_h をとります。P∈ΓhP \in \Gamma_h なら示すことはありません。P∈ΩhP \in \Omega_h のとき、点列 Pk=P+khe1P_k = P + kh\boldsymbol{e}_1(k=0,1,2,…k = 0, 1, 2, \ldots)を考えます。Ωh\Omega_h は有限集合なので、Pk∉ΩhP_k \notin \Omega_h となる最小の k≥1k \ge 1 があります。P0,…,Pk−1∈ΩhP_0, \ldots, P_{k-1} \in \Omega_h で、鍵になる事実をくり返し使うと u(P1)=⋯=u(Pk)=Mu(P_1) = \cdots = u(P_k) = M です。PkP_k は Pk−1∈ΩhP_{k-1} \in \Omega_h の隣接点で Ωh\Omega_h に属さないので Pk∈ΓhP_k \in \Gamma_h です。したがって max⁡Γhu≥M\max_{\Gamma_h}u \ge M で、逆向きの不等式は自明です。

2. u(P)=Mu(P) = M、P∈ΩhP \in \Omega_h とします。任意の P′∈ΩhP' \in \Omega_h に対し、連結性から Ωh\Omega_h の中の隣接点の列 P=R0,R1,…,Rs=P′P = R_0, R_1, \ldots, R_s = P' があり、鍵になる事実を順に使うと u(R1)=⋯=u(P′)=Mu(R_1) = \cdots = u(P') = M です。したがって uu は Ωh\Omega_h で MM で、Γh\Gamma_h の各点は Ωh\Omega_h のある点の隣接点なので、再び鍵になる事実から Γh\Gamma_h でも MM です。

最小についての主張は −u-u に適用すれば得られます。

連続の場合の弱最大値原理(系 4.2[ラプラス方程式と調和関数])では、劣調和関数 −Δu≤0-\Delta u \le 0 の最大が境界でとられます。その証明は、劣調和関数の平均値の性質(球の中心での値は球の上の平均以下)から、内部の最大点のまわりで uu が定数になることを示すものでした。離散版では「u(P)u(P) が隣接点での値の平均以下」がその役をし、上の証明の「鍵になる事実」が同じ議論になっています。

系 2.3(離散 Dirichlet 問題の一意可解性)✓

格子領域 Ωˉh\bar\Omega_h と、Ωh\Omega_h 上の関数 ff、Γh\Gamma_h 上の関数 gg に対し、−Δhuh=f-\Delta_hu_h = f(Ωh\Omega_h)、uh=gu_h = g(Γh\Gamma_h)を満たす uhu_h がただ 1 つ存在する。

証明(系 2.3)

Γh\Gamma_h での値を代入すると、未知数(Ωh\Omega_h での値)と方程式がどちらも #Ωh\#\Omega_h 個の連立一次方程式です。f=0f = 0、g=0g = 0 のとき、定理 2.2 の 1 を uhu_h と −uh-u_h に使うと max⁡uh≤0\max u_h \le 0、min⁡uh≥0\min u_h \ge 0 なので uh=0u_h = 0 です。同次方程式の解が 00 だけなので係数行列は正則で、任意の ff、gg について解がただ 1 つあります。

これは連続の場合の一意性(系 4.3[ラプラス方程式と調和関数])に対応します。有限次元なので、一意性から存在も従います。

定理 2.4(最大値ノルムでの安定性)✓

Ωˉh\bar\Omega_h を単位区間(d=1d = 1)または単位正方形(d=2d = 2)の格子領域(h=1/(m+1)h = 1/(m+1))とする。Γh\Gamma_h で u=0u = 0 である格子関数 uu は

max⁡Ωˉh∣u∣≤18max⁡Ωh∣Δhu∣\max_{\bar\Omega_h}|u| \le \frac18\max_{\Omega_h}|\Delta_hu|

を満たす。

証明(定理 2.4)

d=2d = 2 の場合を書きます。比較関数

w(x,y)=14((x−12)2+(y−12)2)w(x,y) = \frac14\Bigl(\bigl(x - \tfrac12\bigr)^2 + \bigl(y - \tfrac12\bigr)^2\Bigr)

をとります。2 次関数 p(x)=(x−12)2p(x) = (x - \frac12)^2 では p(x+h)−2p(x)+p(x−h)=2h2p(x+h) - 2p(x) + p(x-h) = 2h^2 が正確に成り立つので、Δhw=14(2+2)=1\Delta_hw = \frac14(2 + 2) = 1 です。また [0,1]2[0,1]^2 で 0≤w≤14(14+14)=180 \le w \le \frac14(\frac14 + \frac14) = \frac18 です。

F=max⁡Ωh∣Δhu∣F = \max_{\Omega_h}|\Delta_hu| とし、v=u+Fwv = u + Fw とおくと、Δhv=Δhu+F≥0\Delta_hv = \Delta_hu + F \ge 0 です。定理 2.2 の 1 から、Γh\Gamma_h で u=0u = 0 であることを使って

max⁡Ωˉhv=max⁡Γhv=Fmax⁡Γhw≤F8\max_{\bar\Omega_h}v = \max_{\Gamma_h}v = F\max_{\Gamma_h}w \le \frac{F}{8}

です。w≥0w \ge 0 なので u≤v≤F/8u \le v \le F/8 です。−u-u も同じ仮定を満たすので −u≤F/8-u \le F/8 で、合わせて ∣u∣≤F/8|u| \le F/8 です。

d=1d = 1 では w(x)=12(x−12)2w(x) = \frac12(x - \frac12)^2 とすれば、Δhw=1\Delta_hw = 1、0≤w≤180 \le w \le \frac18 で、同じ議論が成り立ちます。

この定理は、−Δh-\Delta_h を行列とみたとき、最大値ノルムから誘導されるノルムで ∥(−Δh)−1∥∞≤1/8\|(-\Delta_h)^{-1}\|_\infty \le 1/8 であることを述べています。hh によらないことが要点で、これが定常問題での「安定性」です。

定理 2.5(5 点差分の収束)✓

Ω\Omega を単位区間 (0,1)(0,1) または単位正方形 (0,1)2(0,1)^2、u∈C4(Ωˉ)u \in C^4(\bar\Omega) とし、f=−Δuf = -\Delta u、g=u∣∂Ωg = u|_{\partial\Omega} とおく。uhu_h を −Δhuh=f-\Delta_hu_h = f(Ωh\Omega_h)、uh=gu_h = g(Γh\Gamma_h)の解とすると

max⁡Ωˉh∣u−uh∣≤h296(max⁡Ωˉ∣∂x4u∣+max⁡Ωˉ∣∂y4u∣)\max_{\bar\Omega_h}|u - u_h| \le \frac{h^2}{96}\Bigl(\max_{\bar\Omega}|\partial_x^4u| + \max_{\bar\Omega}|\partial_y^4u|\Bigr)

が成り立つ(d=1d = 1 では右辺は h296max⁡∣u(4)∣\frac{h^2}{96}\max|u^{(4)}|)。

証明(定理 2.5)

d=2d = 2 で書きます。Mx=max⁡∣∂x4u∣M_x = \max|\partial_x^4u|、My=max⁡∣∂y4u∣M_y = \max|\partial_y^4u| とします。

整合性. P=(x,y)∈ΩhP = (x,y) \in \Omega_h で、yy を固定して xx の関数とみた 2 階中心差分に 補題 2.3[差分法の整合性・安定性・収束] の 3 を使うと、∣u(x+h,y)−2u(x,y)+u(x−h,y)h2−uxx(x,y)∣≤h212Mx\bigl|\frac{u(x+h,y) - 2u(x,y) + u(x-h,y)}{h^2} - u_{xx}(x,y)\bigr| \le \frac{h^2}{12}M_x で、yy 方向も同様です(この補題の証明は閉区間 [x−h,x+h][x-h, x+h] での C4C^4 級だけを使うので、境界に隣り合う点でも使えます)。したがって τ=Δhu−Δu\tau = \Delta_hu - \Delta u は ∣τ(P)∣≤h212(Mx+My)|\tau(P)| \le \frac{h^2}{12}(M_x + M_y) を満たします。

誤差の方程式. e=u−uhe = u - u_h とおくと、Γh\Gamma_h で e=g−g=0e = g - g = 0 で、Ωh\Omega_h で

Δhe=Δhu−Δhuh=(Δu+τ)+f=τ\Delta_he = \Delta_hu - \Delta_hu_h = (\Delta u + \tau) + f = \tau

です(Δu=−f\Delta u = -f)。

安定性. 定理 2.4 から max⁡∣e∣≤18max⁡∣τ∣≤h296(Mx+My)\max|e| \le \frac18\max|\tau| \le \frac{h^2}{96}(M_x + M_y) です。d=1d = 1 も同じです。

証明の 3 段(整合性・誤差の方程式・安定性)は、前章の 定理 4.2[差分法の整合性・安定性・収束] と同じ構造です。u∈C4u \in C^4 の仮定は、右辺 ff が滑らかで領域に角がなければ満たされますが、正方形では角での整合条件が要ります。解の滑らかさが足りないと次数が下がることを §6 の数値実験で見ます。

注意 2.6(一般の領域)

定理 2.2 は任意の格子領域で成り立つので、比較関数さえ作れば安定性の評価は一般の有界領域に拡張できます(Ω\Omega が半径 RR の球に含まれるなら、w=(R2−∣x−x0∣2)/(2d)w = (R^2 - |x - x_0|^2)/(2d) で定数 R2/(2d)R^2/(2d))。曲がった境界では格子点が境界に乗らないので、境界の近くで不等間隔の差分(Shortley–Weller の近似)を使います。その場合も最大値原理による証明がそのまま通り、O(h2)O(h^2) の収束が得られます。Hackbusch(参考文献)に詳しい扱いがあります。

3. 離散 Laplace 作用素の固有値と ℓ² での安定性

Section titled “3. 離散 Laplace 作用素の固有値と ℓ² での安定性”

この節の目標は、離散 Laplace 作用素の固有値と固有ベクトルを具体的に書き下し、最小の固有値が hh によらず連続の場合の値の近くにあることを確かめることです。次の命題の 3 の不等式の連鎖は、λ1=4h2sin⁡2πh2\lambda_1 = \frac{4}{h^2}\sin^2\frac{\pi h}{2} を、sin⁡x\sin x を xx とその 3 次の項で上下から挟んで π2\pi^2 に近いと示すための評価です。

境界で 00 の格子関数を Ωh\Omega_h 上の関数と同一視し、単位正方形(d=2d = 2)では内積とノルムを

⟨v,w⟩h=h2∑i,j=1mvijwij,∥v∥h=⟨v,v⟩h1/2\langle v, w\rangle_h = h^2\sum_{i,j=1}^{m}v_{ij}w_{ij},\qquad \|v\|_h = \langle v, v\rangle_h^{1/2}

で定めます(vij=v(ih,jh)v_{ij} = v(ih, jh))。単位区間では ⟨v,w⟩h=h∑iviwi\langle v, w\rangle_h = h\sum_iv_iw_i です。m2h2<1m^2h^2 < 1 なので ∥v∥h≤∥v∥∞\|v\|_h \le \|v\|_\infty です。

命題 3.1(離散 Laplace 作用素のスペクトル)✓

h=1/(m+1)h = 1/(m+1)、λk=4h2sin⁡2kπh2\lambda_k = \dfrac{4}{h^2}\sin^2\dfrac{k\pi h}{2}(1≤k≤m1 \le k \le m)とおく。

  1. 単位区間では、φk(ih)=sin⁡(ikπh)\varphi_k(ih) = \sin(ik\pi h) が −Δhφk=λkφk-\Delta_h\varphi_k = \lambda_k\varphi_k を満たし、{φk}k=1m\{\varphi_k\}_{k=1}^m は ⟨⋅,⋅⟩h\langle\cdot,\cdot\rangle_h について直交する基底である。
  2. 単位正方形では、φkl(ih,jh)=sin⁡(ikπh)sin⁡(jlπh)\varphi_{kl}(ih, jh) = \sin(ik\pi h)\sin(jl\pi h)(1≤k,l≤m1 \le k, l \le m)が −Δhφkl=(λk+λl)φkl-\Delta_h\varphi_{kl} = (\lambda_k + \lambda_l)\varphi_{kl} を満たし、{φkl}\{\varphi_{kl}\} は直交する基底である。したがって境界で 00 の格子関数の空間の上で −Δh-\Delta_h は対称で正定値であり、固有値は λk+λl\lambda_k + \lambda_l の全体である。
  3. 4≤π2(1−π2h212)≤λ1≤π24 \le \pi^2\bigl(1 - \frac{\pi^2h^2}{12}\bigr) \le \lambda_1 \le \pi^2 である。したがって、境界で 00 の格子関数 vv について、d=1,2d = 1, 2 で ∥v∥h≤1dλ1∥Δhv∥h≤14d∥Δhv∥h\|v\|_h \le \dfrac{1}{d\lambda_1}\|\Delta_hv\|_h \le \dfrac{1}{4d}\|\Delta_hv\|_h と 1dλ1≤1dπ2(1−π2h212)−1\dfrac{1}{d\lambda_1} \le \dfrac{1}{d\pi^2}\Bigl(1 - \dfrac{\pi^2h^2}{12}\Bigr)^{-1} が成り立つ。
  4. 定理 2.5 の設定で ∥u−uh∥h≤h248d(max⁡∣∂x4u∣+max⁡∣∂y4u∣)\|u - u_h\|_h \le \frac{h^2}{48d}\bigl(\max|\partial_x^4u| + \max|\partial_y^4u|\bigr)(d=1d = 1 では括弧の中は max⁡∣u(4)∣\max|u^{(4)}|)。
証明(命題 3.1)

1. 境界で 00 の格子関数 v=(v1,…,vm)v = (v_1, \ldots, v_m) に対し、−h2Δhv-h^2\Delta_hv は、対角成分が 22、副対角成分が −1-1 の三重対角行列 TT を掛けることです(v0=vm+1=0v_0 = v_{m+1} = 0)。補題 8.3[行列のノルムと線形方程式の条件数] を α=2\alpha = 2、β=−1\beta = -1、n=mn = m、θk=kπ/(m+1)=kπh\theta_k = k\pi/(m+1) = k\pi h で使うと、Tφk=(2−2cos⁡kπh)φk=4sin⁡2kπh2φkT\varphi_k = (2 - 2\cos k\pi h)\varphi_k = 4\sin^2\frac{k\pi h}{2}\varphi_k で、固有値は相異なります(系 8.4[行列のノルムと線形方程式の条件数] の形)。TT は対称なので、k≠k′k \ne k' のとき λk⟨φk,φk′⟩h=⟨−Δhφk,φk′⟩h=⟨φk,−Δhφk′⟩h=λk′⟨φk,φk′⟩h\lambda_k\langle\varphi_k, \varphi_{k'}\rangle_h = \langle-\Delta_h\varphi_k, \varphi_{k'}\rangle_h = \langle\varphi_k, -\Delta_h\varphi_{k'}\rangle_h = \lambda_{k'}\langle\varphi_k, \varphi_{k'}\rangle_h と λk≠λk′\lambda_k \ne \lambda_{k'} から ⟨φk,φk′⟩h=0\langle\varphi_k, \varphi_{k'}\rangle_h = 0 です。00 でない互いに直交する mm 個のベクトルなので基底です。

2. 5 点差分は xx 方向の 3 点差分と yy 方向の 3 点差分の和です。φkl\varphi_{kl} は xx について φk\varphi_k の定数倍、yy について φl\varphi_l の定数倍で、辺の上では sin⁡0=sin⁡kπ=0\sin0 = \sin k\pi = 0 から 00 なので、1 から −Δhφkl=λkφkl+λlφkl-\Delta_h\varphi_{kl} = \lambda_k\varphi_{kl} + \lambda_l\varphi_{kl} です。内積は

⟨φkl,φk′l′⟩h=(h∑iφk(ih)φk′(ih))(h∑jφl(jh)φl′(jh))\langle\varphi_{kl}, \varphi_{k'l'}\rangle_h = \Bigl(h\sum_i\varphi_k(ih)\varphi_{k'}(ih)\Bigr)\Bigl(h\sum_j\varphi_l(jh)\varphi_{l'}(jh)\Bigr)

と積に分かれ、1 から (k,l)≠(k′,l′)(k,l) \ne (k',l') のとき 00 です。00 でない互いに直交する m2m^2 個のベクトルなので、m2m^2 次元の空間の基底です。直交する固有ベクトルの基底をもち固有値が実数なので −Δh-\Delta_h は対称で、固有値はすべて正なので正定値です。行列の言葉では、自然な順序で −h2Δh=I⊗T+T⊗I-h^2\Delta_h = I \otimes T + T \otimes I です。

3. x=πh/2∈(0,π/4]x = \pi h/2 \in (0, \pi/4] とします。sin⁡x≤x\sin x \le x から λ1≤4h2x2=π2\lambda_1 \le \frac{4}{h^2}x^2 = \pi^2 です。sin⁡\sin の 3 次までの Taylor 展開の剰余は x5120cos⁡c≥0\frac{x^5}{120}\cos c \ge 0(0<c<x≤π/40 < c < x \le \pi/4)なので sin⁡x≥x−x36\sin x \ge x - \frac{x^3}{6} で、

λ1≥4h2x2(1−x26)2=π2(1−π2h224)2≥π2(1−π2h212)\lambda_1 \ge \frac{4}{h^2}x^2\Bigl(1 - \frac{x^2}{6}\Bigr)^2 = \pi^2\Bigl(1 - \frac{\pi^2h^2}{24}\Bigr)^2 \ge \pi^2\Bigl(1 - \frac{\pi^2h^2}{12}\Bigr)

です((1−s)2≥1−2s(1-s)^2 \ge 1 - 2s)。h≤1/2h \le 1/2 なので右辺は π2(1−π2/48)>9.86×0.79>4\pi^2(1 - \pi^2/48) > 9.86 \times 0.79 > 4 です。v=∑cklφklv = \sum c_{kl}\varphi_{kl} と展開すると、直交性から ∥Δhv∥h2=∑(λk+λl)2ckl2∥φkl∥h2≥(2λ1)2∥v∥h2\|\Delta_hv\|_h^2 = \sum(\lambda_k + \lambda_l)^2c_{kl}^2\|\varphi_{kl}\|_h^2 \ge (2\lambda_1)^2\|v\|_h^2 で、d=2d = 2 の主張を得ます。d=1d = 1 も同じです。

4. 定理 2.5 の証明のとおり Δhe=τ\Delta_he = \tau、e∣Γh=0e|_{\Gamma_h} = 0、max⁡∣τ∣≤h212(Mx+My)\max|\tau| \le \frac{h^2}{12}(M_x + M_y) です。3 と ∥τ∥h≤max⁡∣τ∣\|\tau\|_h \le \max|\tau| から ∥e∥h≤14d⋅h212(Mx+My)\|e\|_h \le \frac{1}{4d}\cdot\frac{h^2}{12}(M_x + M_y) です。

連続の問題では、単位正方形の Dirichlet ラプラシアンの最小固有値は 2π22\pi^2(固有関数 sin⁡πxsin⁡πy\sin\pi x\sin\pi y)です。3 は、離散化しても最小固有値が 2λ1=2π2(1+O(h2))2\lambda_1 = 2\pi^2(1 + O(h^2)) にとどまることを示しています。固有値の離散化誤差そのものは、このテーマの最後の章で扱います。

最大固有値は 2λm=8h2cos⁡2πh22\lambda_m = \frac{8}{h^2}\cos^2\frac{\pi h}{2} なので、条件数は λm/λ1=cot⁡2πh2≈4π2h2\lambda_m/\lambda_1 = \cot^2\frac{\pi h}{2} \approx \frac{4}{\pi^2h^2} で、1 次元と同じです(系 8.4[行列のノルムと線形方程式の条件数])。条件数が大きいほど、反復法は解に近づくのが遅くなります。このため、連立方程式 −Δhuh=f-\Delta_hu_h = f を反復法で解くと、格子を細かくするほど収束が遅くなります。Jacobi 法と Gauss–Seidel 法では反復回数が h−2h^{-2} に、最適な SOR 法(Gauss–Seidel 法に緩和係数を入れて加速した反復法)では h−1h^{-1} に比例し(命題 5.1[定常反復法])、共役勾配法では κ≈2πh\sqrt{\kappa} \approx \frac{2}{\pi h} に比例します(定理 5.4[Krylov 部分空間法 I])。反復回数が hh によらない方法(多重格子法)は Hackbusch(参考文献)を見てください。

熱方程式の初期値境界値問題

ut=uxx(0<x<1, 0<t≤T),u(0,t)=u(1,t)=0,u(x,0)=u0(x)u_t = u_{xx}\quad(0 < x < 1,\ 0 < t \le T),\qquad u(0,t) = u(1,t) = 0,\qquad u(x,0) = u_0(x)

を考えます。h=1/(m+1)h = 1/(m+1)、xj=jhx_j = jh とし、AA を −Δh-\Delta_h(境界で 00)の行列、すなわち対角成分が 2/h22/h^2、副対角成分が −1/h2-1/h^2 の mm 次三重対角行列とします。

定義 4.1(θ 法)↗

0≤θ≤10 \le \theta \le 1、Δt>0\Delta t > 0 とする。un∈Rmu^n \in \mathbb{R}^m から un+1u^{n+1} を

un+1−unΔt=−A(θun+1+(1−θ)un),すなわち(I+θΔtA)un+1=(I−(1−θ)ΔtA)un\frac{u^{n+1} - u^n}{\Delta t} = -A\bigl(\theta u^{n+1} + (1-\theta)u^n\bigr),\qquad\text{すなわち}\qquad(I + \theta\Delta tA)u^{n+1} = \bigl(I - (1-\theta)\Delta tA\bigr)u^n

で定める方法を θ 法という。θ=0\theta = 0 を陽的 Euler 法、θ=1\theta = 1 を陰的 Euler 法、θ=1/2\theta = 1/2 を Crank–Nicolson 法という。μ=Δt/h2\mu = \Delta t/h^2 を格子比という。Bθ=I+θΔtAB_\theta = I + \theta\Delta tA、Eθ=I−(1−θ)ΔtAE_\theta = I - (1-\theta)\Delta tA、Cθ=Bθ−1EθC_\theta = B_\theta^{-1}E_\theta と書く。

AA は正定値(命題 3.1)なので BθB_\theta は正則です。成分で書くと、jj 番目の式は

−θμuj−1n+1+(1+2θμ)ujn+1−θμuj+1n+1=(1−θ)μuj−1n+(1−2(1−θ)μ)ujn+(1−θ)μuj+1n-\theta\mu u^{n+1}_{j-1} + (1 + 2\theta\mu)u^{n+1}_j - \theta\mu u^{n+1}_{j+1} = (1-\theta)\mu u^n_{j-1} + \bigl(1 - 2(1-\theta)\mu\bigr)u^n_j + (1-\theta)\mu u^n_{j+1}

です(u0=um+1=0u_0 = u_{m+1} = 0)。θ>0\theta > 0 では毎ステップ三重対角の連立方程式を解きます。

次の定理のねらいは、1 ステップで各固有成分が gθ(σk)g_\theta(\sigma_k) 倍になる(これが増幅因子です)と見て、その絶対値が 1 を超えないための条件を調べることです。不安定を示す 3 の後半は、∣gθ∣|g_\theta| が 1 を超える範囲に最も細かい波 k=mk = m が入ってしまうことを、補助の数 σ′\sigma' を使って「hh を小さくすれば確実に入る」と言い直したものです。増幅因子の様子は次の図でも確かめられます。

10-1σg(σ)2468陽的 EulerCrank–Nicolson陰的 Euler
増幅因子 g(σ) の曲線。縦軸の 1 と -1 の線を超えない範囲が安定。陽的 Euler(θ = 0)は σ > 2 で -1 を下回る。Crank–Nicolson(θ = 1/2)は -1 に近づくだけで超えず、陰的 Euler(θ = 1)は 0 に近づく。

定理 4.2(θ 法の ℓ² 安定性)✓

0≤θ≤10 \le \theta \le 1 とし、gθ(σ)=1−(1−θ)σ1+θσg_\theta(\sigma) = \dfrac{1 - (1-\theta)\sigma}{1 + \theta\sigma}、σk=Δtλk=4μsin⁡2kπh2\sigma_k = \Delta t\lambda_k = 4\mu\sin^2\dfrac{k\pi h}{2} とおく。

  1. CθC_\theta の固有値は gθ(σk)g_\theta(\sigma_k)(1≤k≤m1 \le k \le m)で、∥⋅∥h\|\cdot\|_h から誘導されるノルムについて ∥Cθn∥=max⁡k∣gθ(σk)∣n\|C_\theta^n\| = \max_k|g_\theta(\sigma_k)|^n。
  2. 12≤θ≤1\frac12 \le \theta \le 1 ならば、すべての μ>0\mu > 0 と hh で ∥Cθ∥≤1\|C_\theta\| \le 1(無条件安定)。
  3. 0≤θ<120 \le \theta < \frac12 とする。μ≤12(1−2θ)\mu \le \dfrac{1}{2(1-2\theta)} ならばすべての hh で ∥Cθ∥≤1\|C_\theta\| \le 1。μ>12(1−2θ)\mu > \dfrac{1}{2(1-2\theta)} ならば、μ\mu を固定して h→0h \to 0 としたとき sup⁡{∥Cθn∥:nΔt≤T}→∞\sup\{\|C_\theta^n\| : n\Delta t \le T\} \to \infty で、安定でない。
証明(定理 4.2)

1. 命題 3.1 の 1 から Aφk=λkφkA\varphi_k = \lambda_k\varphi_k なので、Bθφk=(1+θσk)φkB_\theta\varphi_k = (1 + \theta\sigma_k)\varphi_k、Eθφk=(1−(1−θ)σk)φkE_\theta\varphi_k = (1 - (1-\theta)\sigma_k)\varphi_k で、Cθφk=gθ(σk)φkC_\theta\varphi_k = g_\theta(\sigma_k)\varphi_k です。{φk}\{\varphi_k\} は直交する基底なので、v=∑kckφkv = \sum_kc_k\varphi_k について ∥Cθnv∥h2=∑k∣gθ(σk)∣2nck2∥φk∥h2≤max⁡k∣gθ(σk)∣2n∥v∥h2\|C_\theta^nv\|_h^2 = \sum_k|g_\theta(\sigma_k)|^{2n}c_k^2\|\varphi_k\|_h^2 \le \max_k|g_\theta(\sigma_k)|^{2n}\|v\|_h^2 で、最大を与える kk の φk\varphi_k で等号になります。

増幅因子の性質. σ>0\sigma > 0 で 1+θσ>01 + \theta\sigma > 0 です。gθ(σ)≤1g_\theta(\sigma) \le 1 は 1−(1−θ)σ≤1+θσ1 - (1-\theta)\sigma \le 1 + \theta\sigma、すなわち −σ≤0-\sigma \le 0 と同値で、常に成り立ちます。gθ(σ)≥−1g_\theta(\sigma) \ge -1 は 1−(1−θ)σ≥−1−θσ1 - (1-\theta)\sigma \ge -1 - \theta\sigma、すなわち

(1−2θ)σ≤2(1 - 2\theta)\sigma \le 2

と同値です。また gθ′(σ)=−(1−θ)(1+θσ)−θ(1−(1−θ)σ)(1+θσ)2=−1(1+θσ)2<0g_\theta'(\sigma) = \dfrac{-(1-\theta)(1+\theta\sigma) - \theta(1 - (1-\theta)\sigma)}{(1+\theta\sigma)^2} = \dfrac{-1}{(1+\theta\sigma)^2} < 0 なので gθg_\theta は減少関数です。

2. θ≥12\theta \ge \frac12 なら (1−2θ)σ≤0≤2(1-2\theta)\sigma \le 0 \le 2 なので、すべての σ>0\sigma > 0 で ∣gθ(σ)∣≤1|g_\theta(\sigma)| \le 1 です。

3. θ<12\theta < \frac12 とし、σ∗=21−2θ\sigma^{*} = \frac{2}{1-2\theta} とおくと、∣gθ(σ)∣≤1|g_\theta(\sigma)| \le 1 は σ≤σ∗\sigma \le \sigma^{*} と同値です。σk<4μ\sigma_k < 4\mu なので、4μ≤σ∗4\mu \le \sigma^{*}、すなわち μ≤12(1−2θ)\mu \le \frac{1}{2(1-2\theta)} ならば ∥Cθ∥≤1\|C_\theta\| \le 1 です。逆に 4μ>σ∗4\mu > \sigma^{*} とし、σ∗<σ′<4μ\sigma^{*} < \sigma' < 4\mu となる σ′\sigma' をとって q=−gθ(σ′)q = -g_\theta(\sigma') とおくと、gθg_\theta は減少で gθ(σ∗)=−1g_\theta(\sigma^{*}) = -1 なので q>1q > 1 です。σm=4μsin⁡2mπh2=4μcos⁡2πh2→4μ\sigma_m = 4\mu\sin^2\frac{m\pi h}{2} = 4\mu\cos^2\frac{\pi h}{2} \to 4\mu(h→0h \to 0)なので、十分小さい hh で σm≥σ′\sigma_m \ge \sigma'、したがって gθ(σm)≤−qg_\theta(\sigma_m) \le -q です。1 から ∥Cθn∥≥qn\|C_\theta^n\| \ge q^n で、n=⌊T/Δt⌋=⌊T/(μh2)⌋→∞n = \lfloor T/\Delta t\rfloor = \lfloor T/(\mu h^2)\rfloor \to \infty なので有界ではありません。

不安定になるのは最も細かい波 k=mk = m(格子点ごとに符号が変わる成分)です。陽的 Euler では μ≤1/2\mu \le 1/2、すなわち Δt≤h2/2\Delta t \le h^2/2 が条件です。全空間の格子 hZh\mathbb{Z} では、前章の 定理 5.5[差分法の整合性・安定性・収束] の増幅因子が gθ(4μsin⁡2(θ′/2))g_\theta(4\mu\sin^2(\theta'/2))(θ′\theta' は波数)になり、同じ条件が出ます。有界な区間では、Fourier 変換の代わりに固有ベクトル φk\varphi_k での展開が同じ役をします。

定理 4.3(θ 法の離散最大値原理)✓

0≤θ≤10 \le \theta \le 1、μ(1−θ)≤12\mu(1 - \theta) \le \frac12 とする。θ 法の解は、すべての jj について

min⁡(0,min⁡iuin)≤ujn+1≤max⁡(0,max⁡iuin)\min\bigl(0, \min_iu^n_i\bigr) \le u^{n+1}_j \le \max\bigl(0, \max_iu^n_i\bigr)

を満たす。特に ∥un+1∥∞≤∥un∥∞\|u^{n+1}\|_\infty \le \|u^n\|_\infty で、un≥0u^n \ge 0 なら un+1≥0u^{n+1} \ge 0 である。また、μ\mu によらず、Bθv=wB_\theta v = w ならば ∥v∥∞≤∥w∥∞\|v\|_\infty \le \|w\|_\infty である。

証明(定理 4.3)

M=max⁡(0,max⁡iuin)M = \max(0, \max_iu^n_i) とおき、w=Eθunw = E_\theta u^n とします。

陽的な部分. wj=(1−θ)μuj−1n+(1−2(1−θ)μ)ujn+(1−θ)μuj+1nw_j = (1-\theta)\mu u^n_{j-1} + (1 - 2(1-\theta)\mu)u^n_j + (1-\theta)\mu u^n_{j+1} の 3 つの係数は、仮定 2(1−θ)μ≤12(1-\theta)\mu \le 1 から非負で、和は 11 です。uin≤Mu^n_i \le M(境界の u0n=um+1n=0u^n_0 = u^n_{m+1} = 0 も M≥0M \ge 0 から MM 以下)なので wj≤Mw_j \le M です。

陰的な部分. Bθun+1=wB_\theta u^{n+1} = w の jj 番目の式は (1+2θμ)ujn+1=wj+θμ(uj−1n+1+uj+1n+1)(1 + 2\theta\mu)u^{n+1}_j = w_j + \theta\mu(u^{n+1}_{j-1} + u^{n+1}_{j+1}) です。M′=max⁡iuin+1M' = \max_iu^{n+1}_i とし、M′≤0M' \le 0 なら M′≤MM' \le M です。M′>0M' > 0 のとき、ujn+1=M′u^{n+1}_j = M' となる jj をとると、隣の値は(境界の 00 も含めて)M′M' 以下なので

(1+2θμ)M′≤wj+2θμM′≤M+2θμM′(1 + 2\theta\mu)M' \le w_j + 2\theta\mu M' \le M + 2\theta\mu M'

で、M′≤MM' \le M です。どちらの場合も ujn+1≤Mu^{n+1}_j \le M です。下からの評価は −un-u^n、−un+1-u^{n+1} に同じ議論を使います。∥un+1∥∞≤∥un∥∞\|u^{n+1}\|_\infty \le \|u^n\|_\infty と非負性はここから従います。

最後の主張. Bθv=wB_\theta v = w とし、∣vj∣=∥v∥∞|v_j| = \|v\|_\infty となる jj をとると、(1+2θμ)∣vj∣≤∣wj∣+θμ(∣vj−1∣+∣vj+1∣)≤∥w∥∞+2θμ∣vj∣(1 + 2\theta\mu)|v_j| \le |w_j| + \theta\mu(|v_{j-1}| + |v_{j+1}|) \le \|w\|_\infty + 2\theta\mu|v_j| から ∥v∥∞≤∥w∥∞\|v\|_\infty \le \|w\|_\infty です。

これは連続の場合の放物型の最大値原理(定理 3.1[熱方程式]。最大は初期時刻か側面の境界でとられる)の離散版です。BθB_\theta は非対角成分が 00 以下の正定値対称行列、つまり Stieltjes 行列(定義 6.1[Krylov 部分空間法 II])で、上の証明の「陰的な部分」は、その逆行列の成分が非負であることを直接示したものです。条件 μ(1−θ)≤1/2\mu(1-\theta) \le 1/2 は、陽的 Euler で μ≤1/2\mu \le 1/2(ℓ2\ell^2 の安定条件と同じ)、Crank–Nicolson で μ≤1\mu \le 1、陰的 Euler では無条件です。

例 4.4(Crank–Nicolson の最大値原理は μ > 1 で破れうる)

m=1m = 1(h=1/2h = 1/2、未知数は中点の値 1 つ)では A=2/h2A = 2/h^2、ΔtA=2μ\Delta tA = 2\mu で、Crank–Nicolson は un+1=1−μ1+μunu^{n+1} = \frac{1 - \mu}{1 + \mu}u^n です。μ>1\mu > 1 なら正の値が 1 ステップで負になり、定理 4.3 の結論が成り立ちません。したがって、すべての格子で成り立つ条件としては μ≤1\mu \le 1 を緩められません。一方、∣un+1∣≤∣un∣|u^{n+1}| \le |u^n| は保たれています。格子が細かいときの様子を、C1/2C_{1/2} の成分の最小値と行和のノルム(∥C∥∞\|C\|_\infty。命題 4.2[行列のノルムと線形方程式の条件数] の 2)で調べます。

# Python 3.9.6 / NumPy 2.0.2(arm64)
import numpy as np
def cn_matrix(m, mu): # Crank–Nicolson の C = B^{-1} E
T = 2 * np.eye(m) - np.eye(m, k=1) - np.eye(m, k=-1)
return np.linalg.solve(np.eye(m) + 0.5 * mu * T, np.eye(m) - 0.5 * mu * T)
for m in (1, 2, 50):
for mu in (1.0, 1.1, 1.2, 1.5, 1.6):
C = cn_matrix(m, mu)
print(f"m={m:2d} mu={mu:3.1f} 最小成分={C.min():8.4f}"
f" 行和ノルム={np.abs(C).sum(axis=1).max():6.4f}")
m= 1 mu=1.0 最小成分= 0.0000 行和ノルム=0.0000
m= 1 mu=1.1 最小成分= -0.0476 行和ノルム=0.0476
m= 1 mu=1.2 最小成分= -0.0909 行和ノルム=0.0909
m= 1 mu=1.5 最小成分= -0.2000 行和ノルム=0.2000
m= 1 mu=1.6 最小成分= -0.2308 行和ノルム=0.2308
m= 2 mu=1.0 最小成分= 0.0667 行和ノルム=0.3333
m= 2 mu=1.1 最小成分= 0.0225 行和ノルム=0.2903
m= 2 mu=1.2 最小成分= -0.0179 行和ノルム=0.2857
m= 2 mu=1.5 最小成分= -0.1209 行和ノルム=0.3846
m= 2 mu=1.6 最小成分= -0.1503 行和ノルム=0.4118
m=50 mu=1.0 最小成分= 0.0000 行和ノルム=1.0000
m=50 mu=1.1 最小成分= 0.0000 行和ノルム=1.0000
m=50 mu=1.2 最小成分= -0.0109 行和ノルム=1.0000
m=50 mu=1.5 最小成分= -0.1111 行和ノルム=1.0000
m=50 mu=1.6 最小成分= -0.1397 行和ノルム=1.0482

m=1m = 1 の行は 1−μ1+μ\frac{1-\mu}{1+\mu}(μ=1.1\mu = 1.1 で −0.0476-0.0476)と一致します。m=2m = 2 では CC の対角成分は 12(g(μ)+g(3μ))\frac12\bigl(g(\mu) + g(3\mu)\bigr)(g=g1/2g = g_{1/2}。固有値 σ=μ,3μ\sigma = \mu, 3\mu から)で、これが 00 になるのは μ=2/3≈1.155\mu = 2/\sqrt3 \approx 1.155 です。表の符号の変わり目と合います。m=50m = 50 でも μ=1.2\mu = 1.2 で負の成分が現れ、非負性は μ≤1\mu \le 1 を少し超えたところで失われます(m=50m = 50、μ=1.1\mu = 1.1 の最小成分は 1.3×10−271.3\times10^{-27} で正です)。つまり、C1/2C_{1/2} の成分が非負である μ\mu の範囲は格子点の数 mm によって変わり、m=1m = 1 では μ≤1\mu \le 1 ちょうど、m=2m = 2 では μ≤2/3\mu \le 2/\sqrt3 で、m=50m = 50 でも μ=1.1\mu = 1.1 では非負です。定理 4.3 が μ(1−θ)≤12\mu(1-\theta) \le \frac12 を十分条件としてだけ述べているのはこのためです。一方、行和のノルムはこの表では μ=1.5\mu = 1.5 まで 11 以下です。Crank–Nicolson が最大値ノルムで縮小的であるための格子比の限界を調べた研究に Kraaijevanger の論文(参考文献)があります。ここでは、ℓ2\ell^2 での無条件安定性が最大値原理を意味しないことを確認するにとどめます。

次の定理のねらいは、熱方程式の厳密解を格子点で測った値 wnw^n と θ 法の計算値 unu^n の差が、Δt\Delta t と hh のどんな冪で小さくなるかを調べることです。証明は、厳密解を差分式に代入したときに残るずれ(打ち切り誤差 τ\tau)を Taylor 展開で評価し、それを安定性で足し合わせる、という前章と同じ流れです。長い剰余項は、最終的に τˉ\bar\tau の 3 つの項(Δt\Delta t の 1 次、Δt2\Delta t^2、h2h^2)にまとまります。

定理 4.5(θ 法の収束の次数)✓

uu を熱方程式の初期値境界値問題の解とし、uu、utu_t、uttu_{tt}、utttu_{ttt}、∂xku\partial_x^ku(k≤4k \le 4)と uxxtu_{xxt}、uxxttu_{xxtt} が [0,1]×[0,T][0,1]\times[0,T] で連続とする。Mk=max⁡∣∂tku∣M_k = \max|\partial_t^ku| とおく。uj0=u0(xj)u^0_j = u_0(x_j) から θ 法で計算した unu^n と wjn=u(xj,tn)w^n_j = u(x_j, t_n) について、次が成り立つ(tn≤Tt_n \le T)。

  1. ℓ2\ell^2 の安定条件(θ≥12\theta \ge \frac12、または μ≤12(1−2θ)\mu \le \frac{1}{2(1-2\theta)})のもとで ∥wn−un∥h≤tnτˉ\|w^n - u^n\|_h \le t_n\bar\tau。ここで τˉ=∣θ−12∣Δt M2+Δt26M3+h212M2\bar\tau = \bigl|\theta - \tfrac12\bigr|\Delta t\,M_2 + \dfrac{\Delta t^2}{6}M_3 + \dfrac{h^2}{12}M_2。
  2. μ(1−θ)≤12\mu(1-\theta) \le \frac12 のもとでは、同じ評価が ∥wn−un∥∞\|w^n - u^n\|_\infty についても成り立つ。
  3. θ=0\theta = 0、μ=16\mu = \frac16 で、さらに ∂x6u\partial_x^6u が連続ならば、∥wn−un∥∞≤tnh4135M3\|w^n - u^n\|_\infty \le \dfrac{t_nh^4}{135}M_3。
証明(定理 4.5)

打ち切り誤差. t∗=tn+Δt/2t^{*} = t_n + \Delta t/2 とし、格子点 x=xjx = x_j で

τjn=u(x,tn+1)−u(x,tn)Δt−θ D+D−u(x,tn+1)−(1−θ)D+D−u(x,tn)\tau^n_j = \frac{u(x,t_{n+1}) - u(x,t_n)}{\Delta t} - \theta\,D_+D_-u(x,t_{n+1}) - (1-\theta)D_+D_-u(x,t_n)

とおきます(D+D−D_+D_- は xx についての 2 階中心差分)。補題 2.3[差分法の整合性・安定性・収束] の 2 を、t∗t^{*} を中心に刻み Δt/2\Delta t/2 で使うと、第 1 項は ut(x,t∗)+Rau_t(x,t^{*}) + R_a、∣Ra∣≤(Δt/2)26M3=Δt224M3|R_a| \le \frac{(\Delta t/2)^2}{6}M_3 = \frac{\Delta t^2}{24}M_3 です。同じ補題の 3 から D+D−u(x,t)=uxx(x,t)+Rb(t)D_+D_-u(x,t) = u_{xx}(x,t) + R_b(t)、∣Rb∣≤h212max⁡∣∂x4u∣|R_b| \le \frac{h^2}{12}\max|\partial_x^4u| です。uxxu_{xx} を tt について t∗t^{*} のまわりで 2 階の剰余まで展開すると(定理 5.3[平均値の定理とテイラーの定理])

uxx(x,t∗±Δt2)=uxx(x,t∗)±Δt2uxxt(x,t∗)+Δt28uxxtt(x,c±)u_{xx}\bigl(x, t^{*} \pm \tfrac{\Delta t}{2}\bigr) = u_{xx}(x,t^{*}) \pm \frac{\Delta t}{2}u_{xxt}(x,t^{*}) + \frac{\Delta t^2}{8}u_{xxtt}(x,c_\pm)

なので、θuxx(tn+1)+(1−θ)uxx(tn)=uxx(t∗)+(θ−12)Δt uxxt(t∗)+Rc\theta u_{xx}(t_{n+1}) + (1-\theta)u_{xx}(t_n) = u_{xx}(t^{*}) + (\theta - \frac12)\Delta t\,u_{xxt}(t^{*}) + R_c、∣Rc∣≤Δt28max⁡∣uxxtt∣|R_c| \le \frac{\Delta t^2}{8}\max|u_{xxtt}| です。以上から

τjn=ut−uxx⏟=0−(θ−12)Δt uxxt(x,t∗)+Ra−Rc−θRb(tn+1)−(1−θ)Rb(tn)\tau^n_j = \underbrace{u_t - u_{xx}}_{=0} - \bigl(\theta - \tfrac12\bigr)\Delta t\,u_{xxt}(x,t^{*}) + R_a - R_c - \theta R_b(t_{n+1}) - (1-\theta)R_b(t_n)

です。uxx=utu_{xx} = u_t を tt で微分して uxxt=uttu_{xxt} = u_{tt}、uxxtt=utttu_{xxtt} = u_{ttt}、xx で 2 回微分して ∂x4u=∂x2ut=∂tuxx=utt\partial_x^4u = \partial_x^2u_t = \partial_tu_{xx} = u_{tt} なので

∣τjn∣≤∣θ−12∣Δt M2+(124+18)Δt2M3+h212M2=:τˉ|\tau^n_j| \le \bigl|\theta - \tfrac12\bigr|\Delta t\,M_2 + \Bigl(\frac{1}{24} + \frac18\Bigr)\Delta t^2M_3 + \frac{h^2}{12}M_2 =: \bar\tau

です。

誤差の方程式. τn\tau^n の定義は Bθwn+1−Eθwn=Δt τnB_\theta w^{n+1} - E_\theta w^n = \Delta t\,\tau^n と書けます(境界条件 u(0,t)=u(1,t)=0u(0,t) = u(1,t) = 0 から、D+D−D_+D_- は −A-A を掛けることに一致します)。したがって wn+1=Cθwn+Δt Bθ−1τnw^{n+1} = C_\theta w^n + \Delta t\,B_\theta^{-1}\tau^n です。

1. Bθ−1B_\theta^{-1} の固有値は 1/(1+θσk)∈(0,1]1/(1 + \theta\sigma_k) \in (0, 1] なので ∥Bθ−1τn∥h≤∥τn∥h≤max⁡j∣τjn∣≤τˉ\|B_\theta^{-1}\tau^n\|_h \le \|\tau^n\|_h \le \max_j|\tau^n_j| \le \bar\tau です。定理 4.2 から ∥Cθn∥≤1\|C_\theta^n\| \le 1 なので、補題 4.1[差分法の整合性・安定性・収束] を K=1K = 1、e0=0e^0 = 0、局所誤差 Bθ−1τnB_\theta^{-1}\tau^n で使って ∥wn−un∥h≤tnτˉ\|w^n - u^n\|_h \le t_n\bar\tau です。

2. 定理 4.3 から、最大値ノルムで ∥Cθv∥∞≤∥v∥∞\|C_\theta v\|_\infty \le \|v\|_\infty、∥Bθ−1τn∥∞≤∥τn∥∞≤τˉ\|B_\theta^{-1}\tau^n\|_\infty \le \|\tau^n\|_\infty \le \bar\tau です。同じ補題を最大値ノルムで使えば結論を得ます。

3. θ=0\theta = 0 のときは tnt_n のまわりで展開します。u(tn+1)−u(tn)Δt=ut+Δt2utt+Δt26uttt(x,c)\frac{u(t_{n+1}) - u(t_n)}{\Delta t} = u_t + \frac{\Delta t}{2}u_{tt} + \frac{\Delta t^2}{6}u_{ttt}(x,c) です。6 階の剰余までの展開 u(x±h)=∑k=05(±h)kk!∂xku+h6720∂x6u(c±)u(x\pm h) = \sum_{k=0}^{5}\frac{(\pm h)^k}{k!}\partial_x^ku + \frac{h^6}{720}\partial_x^6u(c_\pm) の和から D+D−u=uxx+h212∂x4u+RD_+D_-u = u_{xx} + \frac{h^2}{12}\partial_x^4u + R、∣R∣≤h4360max⁡∣∂x6u∣|R| \le \frac{h^4}{360}\max|\partial_x^6u| です。∂x4u=utt\partial_x^4u = u_{tt}、∂x6u=uttt\partial_x^6u = u_{ttt} なので

τjn=(Δt2−h212)utt+Δt26uttt(x,c)−R\tau^n_j = \Bigl(\frac{\Delta t}{2} - \frac{h^2}{12}\Bigr)u_{tt} + \frac{\Delta t^2}{6}u_{ttt}(x,c) - R

で、Δt=h2/6\Delta t = h^2/6 なら第 1 項が消えて ∣τjn∣≤(1216+1360)h4M3=h4135M3|\tau^n_j| \le \bigl(\frac{1}{216} + \frac{1}{360}\bigr)h^4M_3 = \frac{h^4}{135}M_3 です。μ=16\mu = \frac16 は μ(1−θ)≤12\mu(1-\theta) \le \frac12 を満たすので、2 と同じ議論で結論を得ます。

Crank–Nicolson が 2 次なのは、t∗=tn+Δt/2t^{*} = t_n + \Delta t/2 について時間の差分が中心差分になり、空間の項も tnt_n と tn+1t_{n+1} の平均で t∗t^{*} での値を 2 次の精度で近似するからです。μ=1/6\mu = 1/6 の陽的 Euler では、時間と空間の誤差の先頭項が uxxxx=uttu_{xxxx} = u_{tt} のおかげで打ち消し合います。熱方程式に特有の偶然で、低階の項や変数係数があると成り立ちません。

5. 高波数の減衰、エネルギー法、演算量

Section titled “5. 高波数の減衰、エネルギー法、演算量”

熱方程式の厳密解では、固有関数 sin⁡kπx\sin k\pi x の成分は Δt\Delta t のあいだに e−k2π2Δte^{-k^2\pi^2\Delta t} 倍になり、kk が大きいほど速く減衰します。初期値に角や跳びがあっても、t>0t > 0 では解が滑らかになるのはこのためです(定理 4.2[熱方程式] の 4 は全空間での同じ性質です)。差分スキームがこの減衰を再現するかどうかは、σ→∞\sigma \to \infty での増幅因子 gθ(σ)g_\theta(\sigma) の振る舞いで決まります。

命題 5.1(Crank–Nicolson と陰的 Euler の高波数での増幅因子)✓

  1. Crank–Nicolson の増幅因子は g1/2(σ)=−1+42+σg_{1/2}(\sigma) = -1 + \dfrac{4}{2 + \sigma} で、σ→∞\sigma \to \infty で −1-1 に近づく。σ≥2\sigma \ge 2 のとき ∣g1/2(σ)∣n≥1−4n2+σ|g_{1/2}(\sigma)|^n \ge 1 - \dfrac{4n}{2 + \sigma}。特に h≤12h \le \frac12 のとき、最も細かい波 k=mk = m について ∣g1/2(σm)∣n≥1−2n1+μ|g_{1/2}(\sigma_m)|^n \ge 1 - \dfrac{2n}{1 + \mu}。
  2. 陰的 Euler の増幅因子は g1(σ)=11+σ∈(0,1)g_1(\sigma) = \dfrac{1}{1 + \sigma} \in (0, 1) で、σ→∞\sigma \to \infty で 00 に近づく。
  3. 最初の n0n_0 ステップを陰的 Euler、その後を Crank–Nicolson とする方法では、固有成分 φk\varphi_k は nn ステップ後に (1+σk)−n0g1/2(σk)n−n0(1 + \sigma_k)^{-n_0}g_{1/2}(\sigma_k)^{n - n_0} 倍になる。定理 4.5 の仮定のもとで、誤差は
∥wn−un∥h≤n0Δt(Δt2M2+Δt26M3+h212M2)+tn(Δt26M3+h212M2)\|w^n - u^n\|_h \le n_0\Delta t\Bigl(\frac{\Delta t}{2}M_2 + \frac{\Delta t^2}{6}M_3 + \frac{h^2}{12}M_2\Bigr) + t_n\Bigl(\frac{\Delta t^2}{6}M_3 + \frac{h^2}{12}M_2\Bigr)

を満たし、n0n_0 を固定すれば O(Δt2+h2)O(\Delta t^2 + h^2) のままである。

証明(命題 5.1)

1. g1/2(σ)=1−σ/21+σ/2=2−σ2+σ=−1+42+σg_{1/2}(\sigma) = \frac{1 - \sigma/2}{1 + \sigma/2} = \frac{2 - \sigma}{2 + \sigma} = -1 + \frac{4}{2+\sigma} です。σ≥2\sigma \ge 2 なら ∣g1/2(σ)∣=1−42+σ∈[0,1)|g_{1/2}(\sigma)| = 1 - \frac{4}{2+\sigma} \in [0, 1) で、Bernoulli の不等式 (1−s)n≥1−ns(1 - s)^n \ge 1 - ns(0≤s≤10 \le s \le 1)から ∣g1/2(σ)∣n≥1−4n2+σ|g_{1/2}(\sigma)|^n \ge 1 - \frac{4n}{2+\sigma} です。h≤12h \le \frac12 なら σm=4μcos⁡2πh2≥4μcos⁡2π4=2μ\sigma_m = 4\mu\cos^2\frac{\pi h}{2} \ge 4\mu\cos^2\frac{\pi}{4} = 2\mu です。s↦1−4n2+ss \mapsto 1 - \frac{4n}{2+s} は増加なので、σm≥2\sigma_m \ge 2 のとき ∣g1/2(σm)∣n≥1−4n2+2μ=1−2n1+μ|g_{1/2}(\sigma_m)|^n \ge 1 - \frac{4n}{2 + 2\mu} = 1 - \frac{2n}{1+\mu} です。σm<2\sigma_m < 2 のときは μ<1\mu < 1 で右辺は n≥1n \ge 1 について負なので、不等式は自明です。

2. g1(σ)=1−01+σg_1(\sigma) = \frac{1 - 0}{1 + \sigma} です。

3. 定理 4.2 の 1 のとおり C1φk=g1(σk)φkC_1\varphi_k = g_1(\sigma_k)\varphi_k、C1/2φk=g1/2(σk)φkC_{1/2}\varphi_k = g_{1/2}(\sigma_k)\varphi_k なので、倍率は積です。誤差について、ステップ kk で使う θ を θk\theta_k(k<n0k < n_0 で 11、それ以外は 12\frac12)とすると、定理 4.5 の証明から ek+1=Cθkek+Δt Bθk−1τke^{k+1} = C_{\theta_k}e^k + \Delta t\,B_{\theta_k}^{-1}\tau^k、∥Cθk∥≤1\|C_{\theta_k}\| \le 1、∥Bθk−1∥≤1\|B_{\theta_k}^{-1}\| \le 1 なので ∥ek+1∥h≤∥ek∥h+Δt∥τk∥h\|e^{k+1}\|_h \le \|e^k\|_h + \Delta t\|\tau^k\|_h です。e0=0e^0 = 0 から ∥en∥h≤Δt∑k<n∥τk∥h\|e^n\|_h \le \Delta t\sum_{k<n}\|\tau^k\|_h で、τk\tau^k の評価(θ=1\theta = 1 で ∣θ−12∣=12|\theta - \frac12| = \frac12、θ=12\theta = \frac12 で 00)を代入すれば主張を得ます。第 1 項は n0Δt⋅O(Δt+h2)=O(Δt2+Δt h2)n_0\Delta t\cdot O(\Delta t + h^2) = O(\Delta t^2 + \Delta t\,h^2) です。

Crank–Nicolson を Δt=ch\Delta t = ch のように hh に比例させて使うと μ=c/h\mu = c/h は大きく、1 から、最も細かい成分が半分になるまでに少なくとも (1+μ)/4(1+\mu)/4 ステップかかります(1−2n1+μ≤121 - \frac{2n}{1+\mu} \le \frac12 となるのは n≥1+μ4n \ge \frac{1+\mu}{4} のときです)。しかも符号が毎ステップ反転します。滑らかな初期値ではこの成分がもともと小さいので問題になりませんが、跳びのある初期値では振動として見えます(§6)。陰的 Euler は高波数を 1 ステップで 1/(1+σ)1/(1+\sigma) 倍にするので、最初の 2 ステップ程度を陰的 Euler にすれば、3 のとおり 2 次精度を保ったまま高波数を落とせます。常微分方程式の数値解法の言葉では、陰的 Euler は L 安定、Crank–Nicolson は A 安定だが L 安定でない、と表現されます(L 安定は、A 安定に加えて、非常に速く減衰する成分を 1 ステップで 0 の近くまで落とせる性質です)。

固有値が閉じた形で分からない問題でも、次のエネルギー法なら安定性を示せます。

命題 5.2(エネルギー法による安定性と変数係数への拡張)✓

aa は [0,1][0,1] 上の関数で 0<a0≤a(x)≤a10 < a_0 \le a(x) \le a_1 とし、aj+1/2=a((j+12)h)a_{j+1/2} = a((j + \frac12)h)(0≤j≤m0 \le j \le m)とおく。境界で 00(v0=vm+1=0v_0 = v_{m+1} = 0)の格子関数に作用する

(Aav)j=−1h2(aj+1/2(vj+1−vj)−aj−1/2(vj−vj−1))(1≤j≤m)(A_av)_j = -\frac{1}{h^2}\Bigl(a_{j+1/2}(v_{j+1} - v_j) - a_{j-1/2}(v_j - v_{j-1})\Bigr)\qquad(1 \le j \le m)

(−(aux)x-(au_x)_x の差分近似)について、次が成り立つ。

  1. (部分和分)⟨Aav,w⟩h=h∑j=0maj+1/2vj+1−vjh⋅wj+1−wjh\langle A_av, w\rangle_h = h\displaystyle\sum_{j=0}^{m}a_{j+1/2}\frac{v_{j+1} - v_j}{h}\cdot\frac{w_{j+1} - w_j}{h}。したがって AaA_a は対称で正定値。
  2. AaA_a の固有値は Λ=4a1/h2\Lambda = 4a_1/h^2 以下で、∥Aaw∥h2≤Λ⟨Aaw,w⟩h\|A_aw\|_h^2 \le \Lambda\langle A_aw, w\rangle_h。
  3. θ 法 vn+1−vnΔt=−Aa(θvn+1+(1−θ)vn)\frac{v^{n+1} - v^n}{\Delta t} = -A_a(\theta v^{n+1} + (1-\theta)v^n) の解は、w=θvn+1+(1−θ)vnw = \theta v^{n+1} + (1-\theta)v^n として
∥vn+1∥h2−∥vn∥h2=−2Δt⟨Aaw,w⟩h−(2θ−1)Δt2∥Aaw∥h2\|v^{n+1}\|_h^2 - \|v^n\|_h^2 = -2\Delta t\langle A_aw, w\rangle_h - (2\theta - 1)\Delta t^2\|A_aw\|_h^2

を満たす。θ≥12\theta \ge \frac12、または θ<12\theta < \frac12 かつ a1μ≤12(1−2θ)a_1\mu \le \frac{1}{2(1-2\theta)} ならば ∥vn+1∥h≤∥vn∥h\|v^{n+1}\|_h \le \|v^n\|_h。

証明(命題 5.2)

1. pj=aj+1/2(vj+1−vj)p_j = a_{j+1/2}(v_{j+1} - v_j)(0≤j≤m0 \le j \le m)とおくと (Aav)j=−(pj−pj−1)/h2(A_av)_j = -(p_j - p_{j-1})/h^2 です。w0=wm+1=0w_0 = w_{m+1} = 0 を使って

∑j=1m(pj−pj−1)wj=∑j=0mpjwj−∑j=0mpjwj+1=−∑j=0mpj(wj+1−wj)\sum_{j=1}^{m}(p_j - p_{j-1})w_j = \sum_{j=0}^{m}p_jw_j - \sum_{j=0}^{m}p_jw_{j+1} = -\sum_{j=0}^{m}p_j(w_{j+1} - w_j)

です(第 1 の和に p0w0=0p_0w_0 = 0 を、第 2 の和に pmwm+1=0p_mw_{m+1} = 0 を足し、第 2 の和の添字を 1 つずらしました)。したがって ⟨Aav,w⟩h=h∑j=1m(Aav)jwj=1h∑j=0mpj(wj+1−wj)\langle A_av, w\rangle_h = h\sum_{j=1}^m(A_av)_jw_j = \frac1h\sum_{j=0}^{m}p_j(w_{j+1} - w_j) で、主張の式です。右辺は vv と ww について対称で、w=vw = v のとき a0h∑j(vj+1−vjh)2a_0h\sum_j\bigl(\frac{v_{j+1} - v_j}{h}\bigr)^2 以上です。これが 00 なら vj+1=vjv_{j+1} = v_j(すべての jj)で、v0=0v_0 = 0 から v=0v = 0 です。したがって正定値です。

2. AaA_a の第 jj 行は、対角成分が (aj+1/2+aj−1/2)/h2(a_{j+1/2} + a_{j-1/2})/h^2、非対角成分の絶対値の和がそれ以下です。定理 2.2[行列の固有値評価と不等式] から、固有値は 2(aj+1/2+aj−1/2)/h2≤4a1/h2=Λ2(a_{j+1/2} + a_{j-1/2})/h^2 \le 4a_1/h^2 = \Lambda 以下です。AaA_a は実対称なので、系 4.3[スペクトル定理] から固有ベクトルからなる正規直交基底 {qk}\{q_k\}(固有値 0<κk≤Λ0 < \kappa_k \le \Lambda)があります。w=∑kckqkw = \sum_kc_kq_k とすると、∥Aaw∥2=∑kκk2ck2≤Λ∑kκkck2=Λ⟨Aaw,w⟩\|A_aw\|^2 = \sum_k\kappa_k^2c_k^2 \le \Lambda\sum_k\kappa_kc_k^2 = \Lambda\langle A_aw, w\rangle(Euclid 内積で。両辺に hh を掛ければ ⟨⋅,⋅⟩h\langle\cdot,\cdot\rangle_h での式)です。

3. I+θΔtAaI + \theta\Delta tA_a は正定値なので vn+1v^{n+1} は一意に定まります。w=12(vn+1+vn)+(θ−12)(vn+1−vn)w = \frac12(v^{n+1} + v^n) + (\theta - \frac12)(v^{n+1} - v^n) と書けるので

⟨vn+1−vn,w⟩h=12(∥vn+1∥h2−∥vn∥h2)+(θ−12)∥vn+1−vn∥h2\langle v^{n+1} - v^n, w\rangle_h = \tfrac12\bigl(\|v^{n+1}\|_h^2 - \|v^n\|_h^2\bigr) + \bigl(\theta - \tfrac12\bigr)\|v^{n+1} - v^n\|_h^2

です。スキームから vn+1−vn=−ΔtAawv^{n+1} - v^n = -\Delta tA_aw なので、左辺は −Δt⟨Aaw,w⟩h-\Delta t\langle A_aw, w\rangle_h、右辺の最後の項は (θ−12)Δt2∥Aaw∥h2(\theta - \frac12)\Delta t^2\|A_aw\|_h^2 で、2 倍して整理すると主張の等式です。θ≥12\theta \ge \frac12 なら右辺は 00 以下です。θ<12\theta < \frac12 のとき、2 から

−(2θ−1)Δt2∥Aaw∥h2≤(1−2θ)Δt2Λ⟨Aaw,w⟩h-(2\theta - 1)\Delta t^2\|A_aw\|_h^2 \le (1 - 2\theta)\Delta t^2\Lambda\langle A_aw, w\rangle_h

なので、(1−2θ)ΔtΛ≤2(1-2\theta)\Delta t\Lambda \le 2、すなわち a1μ≤12(1−2θ)a_1\mu \le \frac{1}{2(1-2\theta)} ならば右辺全体が 00 以下です。

a=1a = 1 のとき Aa=AA_a = A で、3 は 定理 4.2 の十分条件を固有値の式なしで再現します。⟨Aav,v⟩h\langle A_av, v\rangle_h は連続の問題のエネルギー ∫a∣ux∣2dx\int a|u_x|^2dx の離散版で、θ≥1/2\theta \ge 1/2 では「∥vn∥h2\|v^n\|_h^2 が減る速さは散逸 2Δt⟨Aaw,w⟩h2\Delta t\langle A_aw, w\rangle_h 以上」という、熱方程式のエネルギー等式 ddt∥u∥2=−2∫∣ux∣2dx\frac{d}{dt}\|u\|^2 = -2\int|u_x|^2dx の離散版になっています。部分和分は部分積分の離散版です。

命題 5.3(陽的な方法と陰的な方法の演算量)✓

熱方程式を時刻 TT まで解くとする。

  1. 陽的 Euler 法は、安定であるために Δt≤h2/2\Delta t \le h^2/2 が必要で、ステップ数は 2T/h22T/h^2 以上である。1 ステップは mm 個の成分の更新なので、演算量は h−3h^{-3} に比例する。
  2. θ>0\theta > 0 の θ 法の 1 ステップは、mm 次の正定値対称な三重対角行列 BθB_\theta を係数とする連立方程式で、Cholesky 分解(最初に 1 回、演算量 6m6m 以下)と前進・後退代入(演算量は mm に比例)で解ける。演算量は m⋅T/Δtm\cdot T/\Delta t、すなわち h−1Δt−1h^{-1}\Delta t^{-1} に比例する。
  3. 誤差を O(h2)O(h^2) にするのに、陽的 Euler は h−3h^{-3} に比例する演算量を要し、Crank–Nicolson は Δt\Delta t を hh に比例させて h−2h^{-2} に比例する演算量で足りる。
証明(命題 5.3)

1. 定理 4.2 の 3(θ=0\theta = 0)から、μ>12\mu > \frac12 を固定すると安定でないので Δt≤h2/2\Delta t \le h^2/2 が必要です。ステップ数は T/Δt≥2T/h2T/\Delta t \ge 2T/h^2、1 ステップは各 jj で定数回の演算(m=1/h−1m = 1/h - 1 個)です。

2. Bθ=I+θΔtAB_\theta = I + \theta\Delta tA は対称で、固有値 1+θσk>01 + \theta\sigma_k > 0 なので正定値、帯幅は上下とも 11 です。定理 5.1[Cholesky 分解と帯行列・疎行列の直接法] の 2 を p=1p = 1、n=mn = m で使うと、Cholesky 因子も上帯幅 11 で、分解の演算量は m(1+1)(2+1)=6mm(1+1)(2+1) = 6m 以下です。BθB_\theta は nn によらないので分解は 1 回で済み、各ステップは右辺 EθunE_\theta u^n の計算(mm に比例)と、帯幅 11 の三角行列 2 つによる代入(各行で定数回の演算)です。

3. 定理 4.5 から、陽的 Euler の誤差は Δt≤h2/2\Delta t \le h^2/2 のもとで O(Δt+h2)=O(h2)O(\Delta t + h^2) = O(h^2)、Crank–Nicolson の誤差は O(Δt2+h2)O(\Delta t^2 + h^2) で、Δt=ch\Delta t = ch とすれば O(h2)O(h^2) です。1 と 2 に代入します。

安定性のために必要な時間刻みが、精度のために必要な時間刻みよりずっと小さい問題を硬い問題といいます。拡散を含む方程式は、格子を細かくするほど硬くなります。2 次元では BθB_\theta が三重対角でなくなり、1 ステップが 5 点差分の連立方程式になります。これを 1 次元の三重対角の方程式の列に分ける方法が交互方向陰解法(ADI)で、Strikwerda(参考文献)に解説があります。

まず、単位正方形の Poisson 方程式を 5 点差分で解きます。滑らかな解 u=sin⁡πxsin⁡πyu = \sin\pi x\sin\pi y と、中心からの距離 rr の関数 u=r3/2u = r^{3/2}(f=−94r−1/2f = -\frac94r^{-1/2} は中心で非有界で、uu は C2C^2 級でさえない)を比べます。mm を偶数にして、中心 (12,12)(\frac12, \frac12) が格子点に乗らないようにしています。

# Python 3.9.6 / NumPy 2.0.2 / SciPy 1.13.1(arm64)
import numpy as np
import scipy.sparse as sp
from scipy.sparse.linalg import spsolve
def poisson(m, u, f):
"""単位正方形で -Δu = f、境界値は u。内部 m×m 点の 5 点差分。"""
h = 1.0 / (m + 1)
x = h * np.arange(1, m + 1)
X, Y = np.meshgrid(x, x, indexing="ij")
T = sp.diags([-1, 2, -1], [-1, 0, 1], shape=(m, m))
I = sp.identity(m)
A = (sp.kron(I, T) + sp.kron(T, I)).tocsr() / h**2
b = f(X, Y)
b[0, :] += u(0.0, x) / h**2 # 境界値を右辺へ
b[-1, :] += u(1.0, x) / h**2
b[:, 0] += u(x, 0.0) / h**2
b[:, -1] += u(x, 1.0) / h**2
uh = spsolve(A, b.ravel()).reshape(m, m)
return np.max(np.abs(uh - u(X, Y)))
pi = np.pi
r = lambda x, y: np.sqrt((x - 0.5)**2 + (y - 0.5)**2)
u1 = lambda x, y: np.sin(pi * x) * np.sin(pi * y)
f1 = lambda x, y: 2 * pi**2 * u1(x, y)
u2 = lambda x, y: r(x, y)**1.5 # Δ r^α = α² r^(α-2)
f2 = lambda x, y: -2.25 * r(x, y)**(-0.5)
for name, u, f in [("sin*sin", u1, f1), ("r^1.5", u2, f2)]:
e = [poisson(m, u, f) for m in (16, 32, 64, 128, 256)]
o = [np.log2(e[i] / e[i + 1]) for i in range(4)]
print(f"{name:8s}" + " ".join(f"{v:9.2e}" for v in e)
+ " |" + " ".join(f"{v:5.2f}" for v in o))
print("上界 (h^2/96) * 2π^4(m = 16):", f"{(1 / 17)**2 / 96 * 2 * pi**4:.2e}")
sin*sin 2.83e-03 7.54e-04 1.95e-04 4.94e-05 1.25e-05 | 1.91 1.95 1.98 1.99
r^1.5 3.12e-03 1.54e-03 7.07e-04 3.09e-04 1.30e-04 | 1.02 1.12 1.19 1.24
上界 (h^2/96) * 2π^4(m = 16): 7.02e-03

検算. (a) 参照解は製造解(uu を決めて f=−Δuf = -\Delta u を計算したもの)です。2 次元で Δrα=α2rα−2\Delta r^\alpha = \alpha^2r^{\alpha-2} であることは、極座標の Δ=∂r2+r−1∂r\Delta = \partial_r^2 + r^{-1}\partial_r から α(α−1)+α=α2\alpha(\alpha - 1) + \alpha = \alpha^2 です。(b) 滑らかな解では観測次数(hh を半分にしたときの誤差の比 e(h)/e(h/2)e(h)/e(h/2) の log⁡2\log_2。表の | の右の列)が 22 に近づき、m=16m = 16 の誤差 2.83×10−32.83\times10^{-3} は 定理 2.5 の上界 7.02×10−37.02\times10^{-3}(∂x4u\partial_x^4u と ∂y4u\partial_y^4u の最大はどちらも π4\pi^4)の内側です。(c) 別の方法として、sin⁡πxsin⁡πy\sin\pi x\sin\pi y は離散 Laplace 作用素の固有ベクトル φ11\varphi_{11} なので、離散解は閉じた形 uh=2π22λ1φ11u_h = \frac{2\pi^2}{2\lambda_1}\varphi_{11} で求まり、誤差の最大は (π2λ1−1)max⁡φ11(\frac{\pi^2}{\lambda_1} - 1)\max\varphi_{11} です。m=16m = 16(h=1/17h = 1/17)では λ1=4⋅172sin⁡2(π/34)=9.8415\lambda_1 = 4\cdot17^2\sin^2(\pi/34) = 9.8415 で π2λ1−1=2.85×10−3\frac{\pi^2}{\lambda_1} - 1 = 2.85\times10^{-3}、mm が偶数のとき格子点での φ11\varphi_{11} の最大は cos⁡2(πh/2)=0.9915\cos^2(\pi h/2) = 0.9915 なので、積は 2.83×10−32.83\times10^{-3} で表と一致します。(d) u=r3/2u = r^{3/2} は 定理 2.5 の仮定 u∈C4u \in C^4 を満たさず、観測次数は 1.01.0〜1.21.2 にとどまります。

次に、熱方程式を初期値 u0=sin⁡πx+12sin⁡3πxu_0 = \sin\pi x + \frac12\sin3\pi x(厳密解は e−π2tsin⁡πx+12e−9π2tsin⁡3πxe^{-\pi^2t}\sin\pi x + \frac12e^{-9\pi^2t}\sin3\pi x)で T=0.1T = 0.1 まで解き、ℓ2\ell^2 誤差を表にします。FE は陽的 Euler、BE は陰的 Euler、CN は Crank–Nicolson です。

# Python 3.9.6 / NumPy 2.0.2(arm64)
import numpy as np
def theta_step_matrix(m, dt, theta):
h = 1.0 / (m + 1)
A = (2 * np.eye(m) - np.eye(m, k=1) - np.eye(m, k=-1)) / h**2
B = np.eye(m) + theta * dt * A
E = np.eye(m) - (1 - theta) * dt * A
return np.linalg.solve(B, E) # C = B^{-1} E
def heat_error(m, dt, theta, T=0.1):
h = 1.0 / (m + 1)
x = h * np.arange(1, m + 1)
n = round(T / dt)
dt = T / n # T をちょうど n 等分する
u = np.sin(np.pi * x) + 0.5 * np.sin(3 * np.pi * x)
C = theta_step_matrix(m, dt, theta)
for _ in range(n):
u = C @ u
ex = (np.exp(-np.pi**2 * T) * np.sin(np.pi * x)
+ 0.5 * np.exp(-9 * np.pi**2 * T) * np.sin(3 * np.pi * x))
return np.sqrt(h * np.sum((u - ex)**2))
def table(label, theta, dt_of_h, ms=(9, 19, 39, 79, 159)): # h = 1/10, ..., 1/160
e = [heat_error(m, dt_of_h(1.0 / (m + 1)), theta) for m in ms]
o = [np.log2(e[i] / e[i + 1]) for i in range(len(ms) - 1)]
print(f"{label:11s}" + " ".join(f"{v:9.2e}" for v in e)
+ " |" + " ".join(f"{v:7.2f}" for v in o))
table("FE mu=0.4", 0.0, lambda h: 0.4 * h**2) # FE: 陽的 Euler
table("BE mu=0.4", 1.0, lambda h: 0.4 * h**2) # BE: 陰的 Euler
table("CN mu=0.4", 0.5, lambda h: 0.4 * h**2)
table("FE mu=1/6", 0.0, lambda h: h**2 / 6)
table("BE dt=h/4", 1.0, lambda h: h / 4)
table("CN dt=h/4", 0.5, lambda h: h / 4)
table("FE mu=0.55", 0.0, lambda h: 0.55 * h**2, ms=(9, 19, 39, 79))
FE mu=0.4 3.04e-03 7.51e-04 1.87e-04 4.68e-05 1.17e-05 | 2.01 2.00 2.00 2.00
BE mu=0.4 7.15e-03 1.81e-03 4.54e-04 1.14e-04 2.84e-05 | 1.98 2.00 2.00 2.00
CN mu=0.4 2.11e-03 5.33e-04 1.34e-04 3.34e-05 8.36e-06 | 1.98 2.00 2.00 2.00
FE mu=1/6 4.78e-06 2.97e-07 1.85e-08 1.16e-09 7.25e-11 | 4.01 4.00 4.00 4.00
BE dt=h/4 3.13e-02 1.58e-02 7.95e-03 3.99e-03 2.00e-03 | 0.99 0.99 0.99 1.00
CN dt=h/4 8.36e-04 2.08e-04 5.20e-05 1.30e-05 3.25e-06 | 2.01 2.00 2.00 2.00
FE mu=0.55 5.10e-03 1.23e-03 1.48e+06 1.41e+74 | 2.05 -30.17 -225.82

検算. (a) 参照解は固有関数展開の閉じた形です。(b) μ\mu を固定すると Δt=μh2\Delta t = \mu h^2 なので、O(Δt+h2)O(\Delta t + h^2) も O(Δt2+h2)O(\Delta t^2 + h^2) も O(h2)O(h^2) で、最初の 3 行の次数 22 はこれに合います。Δt=h/4\Delta t = h/4 では陰的 Euler が 11 次、Crank–Nicolson が 22 次で、定理 4.5 の 1 の ∣θ−12∣Δt|\theta - \frac12|\Delta t の項の有無に対応します。μ=1/6\mu = 1/6 の陽的 Euler は次数 44 で、同じ定理の 3 と合います。(c) μ=0.55>12\mu = 0.55 > \frac12 の陽的 Euler は、h=1/40h = 1/40 以下で発散します。最も細かい成分の増幅因子は g0(σm)=1−2.2cos⁡2(πh/2)g_0(\sigma_m) = 1 - 2.2\cos^2(\pi h/2) で、h=1/80h = 1/80 では ∣g∣=1.1992|g| = 1.1992、ステップ数は n=1164n = 1164 なので ∣g∣n≈1092|g|^n \approx 10^{92} です。初期値のこの成分は丸め誤差の大きさ(10−1710^{-17} 程度)なので、107510^{75} 程度まで育つ計算になり、表の 1.4×10741.4\times10^{74} と桁が合います。h=1/10h = 1/10、1/201/20 で発散が見えないのは、ステップ数が少なく(n=18n = 18、7373)、丸め誤差がまだ育ちきっていないからで、安定なわけではありません。

例 6.1(階段状の初期値での Crank–Nicolson の振動)

初期値を (14,34)(\frac14, \frac34) で 11、それ以外で 00 とし、h=1/200h = 1/200、Δt=h\Delta t = h(μ=200\mu = 200)で解きます。厳密解は Fourier 正弦級数 ∑kbke−k2π2tsin⁡kπx\sum_kb_ke^{-k^2\pi^2t}\sin k\pi x、bk=2kπ(cos⁡kπ4−cos⁡3kπ4)b_k = \frac{2}{k\pi}\bigl(\cos\frac{k\pi}{4} - \cos\frac{3k\pi}{4}\bigr) です。t>0t > 0 では係数が指数的に小さくなるので級数は一様に絶対収束します。4000 項で打ち切って参照解とします。解のぎざぎざの大きさを、2 階差分の絶対値の最大 max⁡j∣uj+1−2uj+uj−1∣\max_j|u_{j+1} - 2u_j + u_{j-1}| で測ります。

# Python 3.9.6 / NumPy 2.0.2(arm64)
import numpy as np
m = 199
h = 1.0 / (m + 1)
x = h * np.arange(1, m + 1)
A = (2 * np.eye(m) - np.eye(m, k=1) - np.eye(m, k=-1)) / h**2
I = np.eye(m)
u0 = np.where((x > 0.25) & (x < 0.75), 1.0, 0.0) # 階段状の初期値
def exact(t, K=4000): # Fourier 正弦級数
k = np.arange(1, K + 1)[:, None]
b = 2 / (k * np.pi) * (np.cos(k * np.pi / 4) - np.cos(3 * k * np.pi / 4))
return np.sum(b * np.exp(-(k * np.pi)**2 * t) * np.sin(k * np.pi * x), axis=0)
def run(dt, n, n_be):
BE = np.linalg.solve(I + dt * A, I)
CN = np.linalg.solve(I + 0.5 * dt * A, I - 0.5 * dt * A)
u = u0.copy()
for k in range(n):
u = (BE if k < n_be else CN) @ u
return u
wiggle = lambda u: np.max(np.abs(u[2:] - 2 * u[1:-1] + u[:-2])) # 2 階差分の最大
dt = h # mu = 1/h = 200
print(f"mu = {dt / h**2:.0f}")
for n in (4, 16, 64):
ex = exact(n * dt)
for name, n_be in [("CN", 0), ("BE x2 + CN", 2), ("BE", n)]:
u = run(dt, n, n_be)
print(f"n={n:3d} {name:11s} max err={np.max(np.abs(u - ex)):8.2e}"
f" wiggle={wiggle(u):8.2e} min={u.min():9.2e}")
print(f" exact wiggle={wiggle(ex):8.2e}")
mu = 200
n= 4 CN max err=4.25e-01 wiggle=9.64e-01 min= 9.06e-03
n= 4 BE x2 + CN max err=1.17e-02 wiggle=3.09e-04 min= 8.57e-03
n= 4 BE max err=2.49e-02 wiggle=2.87e-04 min= 7.82e-03
exact wiggle=2.87e-04
n= 16 CN max err=3.47e-01 wiggle=8.74e-01 min=-5.80e-02
n= 16 BE x2 + CN max err=2.29e-03 wiggle=1.01e-04 min= 6.37e-03
n= 16 BE max err=5.12e-03 wiggle=1.04e-04 min= 6.45e-03
exact wiggle=1.01e-04
n= 64 CN max err=2.12e-01 wiggle=6.16e-01 min=-1.85e-01
n= 64 BE x2 + CN max err=2.33e-04 wiggle=9.38e-06 min= 5.97e-04
n= 64 BE max err=2.68e-03 wiggle=1.01e-05 min= 6.43e-04
exact wiggle=9.44e-06

Crank–Nicolson だけの解は、64 ステップ後(t=0.32t = 0.32。厳密解は最大でも 0.040.04 程度まで減衰している時刻)でも 2 階差分が 0.60.6 もあり、負の値(−0.185-0.185)をとります。命題 5.1 の 1 の下界は 1−2⋅64201=0.361 - \frac{2\cdot64}{201} = 0.36 で、最も細かい成分が 64 ステップ後にも 3 割以上残ることを保証しています。μ=200>1\mu = 200 > 1 なので 定理 4.3 の仮定も満たされず、負の値が出ることと矛盾しません。最初の 2 ステップを陰的 Euler にすると、2 階差分は厳密解と同じ大きさになり、誤差は陰的 Euler だけの場合の約 1/101/10(n=64n = 64)です。陰的 Euler だけの解は常に滑らかで非負ですが、1 次精度なので誤差が大きくなります。

例 6.2(陽的 Euler の μ = 1/2 は隣の平均)

θ=0\theta = 0、μ=12\mu = \frac12 のとき、スキームは ujn+1=12(uj−1n+uj+1n)u^{n+1}_j = \frac12(u^n_{j-1} + u^n_{j+1}) です。新しい値が両隣の平均なので最大値原理は一目で分かります。初期値が 1 点だけ 11 の格子関数なら、nn ステップ後の値は二項係数 (nk)2−n\binom{n}{k}2^{-n} で、偶数番目と奇数番目の格子点が交互に 00 になる市松模様が残ります。これは g0(σm)=1−4μcos⁡2(πh/2)≈−1g_0(\sigma_m) = 1 - 4\mu\cos^2(\pi h/2) \approx -1 で、最も細かい成分が減衰しないことの現れです。μ\mu を 12\frac12 より少しでも大きくすると、この成分が ∣g∣>1|g| > 1 で増幅されます(上の表の最後の行)。実用上は μ≤12\mu \le \frac12 の内側、たとえば μ=16\mu = \frac16 や 14\frac14 を使います。

演習 7.1易

単位区間で mm が奇数のとき、定理 2.4 の定数 18\frac18 は改良できないことを示せ。

解答

u(x)=12x(1−x)u(x) = \frac12x(1-x) を格子点に制限した格子関数を考えます。2 次関数では 2 階中心差分が正確なので Δhu=u′′=−1\Delta_hu = u'' = -1、また u(0)=u(1)=0u(0) = u(1) = 0 です。mm が奇数なら x=12=m+12hx = \frac12 = \frac{m+1}{2}h は格子点で、u(12)=18u(\frac12) = \frac18 です。したがって max⁡∣u∣=18=18max⁡∣Δhu∣\max|u| = \frac18 = \frac18\max|\Delta_hu| で、等号が成り立ちます。

演習 7.2標準

単位正方形の格子領域で、−Δhuh=f-\Delta_hu_h = f、Γh\Gamma_h で uh=0u_h = 0 とする。f≥0f \ge 0 ならば uh≥0u_h \ge 0 であること、さらに f≤f′f \le f' ならば対応する解が uh≤uh′u_h \le u_h' を満たすことを示せ。これは (−Δh)−1(-\Delta_h)^{-1} の成分について何を意味するか。

解答

−Δhuh=f≥0-\Delta_hu_h = f \ge 0 なので、定理 2.2 の最小についての主張から min⁡Ωˉhuh=min⁡Γhuh=0\min_{\bar\Omega_h}u_h = \min_{\Gamma_h}u_h = 0、すなわち uh≥0u_h \ge 0 です。f≤f′f \le f' のときは、差 uh′−uhu_h' - u_h が右辺 f′−f≥0f' - f \ge 0、境界値 00 の解なので、同じ理由で非負です。

ff として 1 点 QQ だけで 11、他で 00 の格子関数をとると、uhu_h は (−Δh)−1(-\Delta_h)^{-1} の QQ に対応する列です。これが非負なので、(−Δh)−1(-\Delta_h)^{-1} の成分はすべて 00 以上です。−Δh-\Delta_h は非対角成分が 00 以下の正定値対称行列(Stieltjes 行列。定義 6.1[Krylov 部分空間法 II])で、これはその一般的な性質の特別な場合です。

演習 7.3標準

陰的 Euler 法(θ=1\theta = 1)について、定理 4.5 の仮定のもとで、μ\mu に何の条件も付けずに ∥wn−un∥∞≤tn(Δt2M2+Δt26M3+h212M2)\|w^n - u^n\|_\infty \le t_n\bigl(\frac{\Delta t}{2}M_2 + \frac{\Delta t^2}{6}M_3 + \frac{h^2}{12}M_2\bigr) が成り立つことを確かめよ。Crank–Nicolson で同じことを最大値ノルムで主張するには、この章の結果では何が要るか。

解答

θ=1\theta = 1 では μ(1−θ)=0≤12\mu(1-\theta) = 0 \le \frac12 が常に成り立つので、定理 4.5 の 2 がそのまま使えます。∣θ−12∣=12|\theta - \frac12| = \frac12 を代入すれば主張の式です。

Crank–Nicolson では μ(1−θ)≤12\mu(1-\theta) \le \frac12 は μ≤1\mu \le 1、すなわち Δt≤h2\Delta t \le h^2 を意味します。この章の結果で最大値ノルムの評価を得るにはこの制限が要り、Δt\Delta t を hh に比例させる使い方には適用できません。その場合に証明されているのは ℓ2\ell^2 ノルムでの評価(同じ定理の 1)です。例 4.4 の表は、μ>1\mu > 1 でも行和のノルムが 11 以下にとどまる範囲があることを示していますが、それはこの章では証明していません。

演習 7.4難

命題 5.2 の設定で、離散 Poincaré 不等式 ∥v∥h2≤12h∑j=0m(vj+1−vjh)2\|v\|_h^2 \le \frac12h\sum_{j=0}^m\bigl(\frac{v_{j+1} - v_j}{h}\bigr)^2(境界で 00 の vv)を示し、陰的 Euler 法の解が ∥vn∥h≤(1+4a0Δt)−n/2∥v0∥h\|v^n\|_h \le (1 + 4a_0\Delta t)^{-n/2}\|v^0\|_h を満たすことを導け。

解答

di=vi+1−vid_i = v_{i+1} - v_i とおくと、v0=0v_0 = 0 から vj=∑i=0j−1div_j = \sum_{i=0}^{j-1}d_i です。Cauchy–Schwarz の不等式から vj2≤j∑i=0mdi2v_j^2 \le j\sum_{i=0}^{m}d_i^2 で、

∥v∥h2=h∑j=1mvj2≤h⋅m(m+1)2∑i=0mdi2≤12h∑i=0mdi2=12h∑i=0m(dih)2\|v\|_h^2 = h\sum_{j=1}^{m}v_j^2 \le h\cdot\frac{m(m+1)}{2}\sum_{i=0}^{m}d_i^2 \le \frac{1}{2h}\sum_{i=0}^md_i^2 = \frac12h\sum_{i=0}^{m}\Bigl(\frac{d_i}{h}\Bigr)^2

です(m(m+1)≤(m+1)2=h−2m(m+1) \le (m+1)^2 = h^{-2})。命題 5.2 の 1 と合わせて ⟨Aav,v⟩h≥a0h∑i(di/h)2≥2a0∥v∥h2\langle A_av, v\rangle_h \ge a_0h\sum_i(d_i/h)^2 \ge 2a_0\|v\|_h^2 です。

陰的 Euler(θ=1\theta = 1)では w=vn+1w = v^{n+1} で、同じ命題の 3 の等式から

∥vn+1∥h2−∥vn∥h2=−2Δt⟨Aavn+1,vn+1⟩h−Δt2∥Aavn+1∥h2≤−4a0Δt∥vn+1∥h2\|v^{n+1}\|_h^2 - \|v^n\|_h^2 = -2\Delta t\langle A_av^{n+1}, v^{n+1}\rangle_h - \Delta t^2\|A_av^{n+1}\|_h^2 \le -4a_0\Delta t\|v^{n+1}\|_h^2

です。したがって (1+4a0Δt)∥vn+1∥h2≤∥vn∥h2(1 + 4a_0\Delta t)\|v^{n+1}\|_h^2 \le \|v^n\|_h^2 で、くり返して結論を得ます。連続の問題での減衰 ∥u(t)∥≤e−π2a0t∥u0∥\|u(t)\| \le e^{-\pi^2a_0t}\|u_0\| に対応する評価で、定数が π2\pi^2 でなく 22 なのは、上の Poincaré 不等式の定数が最良でないためです。

  • K. W. Morton, D. F. Mayers『Numerical Solution of Partial Differential Equations』2nd ed., Cambridge University Press, 2005 — 放物型方程式の θ 法、最大値原理による誤差解析、楕円型方程式の差分法。
  • J. C. Strikwerda『Finite Difference Schemes and Partial Differential Equations』2nd ed., SIAM, 2004 — 放物型方程式のスキームの安定性、Crank–Nicolson の高波数の振る舞い、ADI 法。
  • W. Hackbusch『Elliptic Differential Equations: Theory and Numerical Treatment』Springer, 1992 — Poisson 方程式の差分法、離散最大値原理、一般の領域、多重格子法への導入。
  • R. J. LeVeque『Finite Difference Methods for Ordinary and Partial Differential Equations』SIAM, 2007 — 定常問題の安定性の定式化、拡散方程式、硬い問題と L 安定性。
  • J. Crank, P. Nicolson, “A practical method for numerical evaluation of solutions of partial differential equations of the heat-conduction type”, Proceedings of the Cambridge Philosophical Society 43 (1947), 50–67 — Crank–Nicolson 法の原論文。
  • J. F. B. M. Kraaijevanger, “Maximum norm contractivity of discretization schemes for the heat equation”, Applied Numerical Mathematics 9 (1992) — 熱方程式の離散化スキームが最大値ノルムで縮小的になる条件。

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

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

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

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