1 様々な微分方程式と差分法の基礎

\[ \newcommand{\bm}[1]{\symbfit{#1}} \]

1.1 偏微分方程式の分類

一般に\(u = u(x, y)\)が独立変数\(x, y\)の関数であるとき,\(u\)\(x, y\)および偏導関数(\(\partial u/\partial x, \partial u/\partial y, \partial^2 u/\partial x \partial y, ...\))の間に成り立つ関係式を偏微分方程式と呼ぶ.物理的に興味のある系の多くは比較的低次の偏微分方程式で表される.よく現れる偏微分方程式として,例えば \[ a \frac{\partial^2 u}{\partial x^2} + b \frac{\partial^2 u}{\partial x \partial y} + c \frac{\partial^2 u}{\partial y^2} = F \left( u, x, y, \frac{\partial u}{\partial x}, \frac{\partial u}{\partial y} \right) \] の形で表される系を考えよう.このとき \(D = b^2 - 4 a c\)の値によって偏微分方程式は

  • \(D < 0\) : 楕円型
  • \(D = 0\) : 放物型
  • \(D > 0\) : 双曲型

と分類される.

この分類は2次曲線 \[ a x^2 + b xy + c y^2 = F(x, y) \]\(D\)の値によって楕円,放物線,双曲線に分類されることに由来するものであり,数学的にもこれらの分類によって解の性質は大きく異なる.

例1:Laplace方程式(楕円型方程式)

\(a = c = 1, b = 0, F = 0\)のとき, \[ \frac{\partial^2 u}{\partial x^2} + \frac{\partial^2 u}{\partial y^2} = 0 \]

例2:拡散方程式(放物型方程式)

\(a = 1, b = c = 0, F = \partial u/\partial y\)\(y \rightarrow t\)と置き換えて \[ \frac{\partial u}{\partial t} = \frac{\partial^2 u}{\partial x^2} \]

例3:波動方程式(双曲型方程式)

\(a = 1, b = 0, c = -1, F = 0\)\(y \rightarrow t\)と置き換えて \[ \frac{\partial^2 u}{\partial t^2} = \frac{\partial^2 u}{\partial x^2} \]

1.2 初期条件と境界条件

  • 偏微分方程式の解は対象とする領域の境界で与えられる何らかの拘束条件(境界条件)によって決定される.変数の一つが時間(\(t\))であるときは,\(t = 0\)で与える境界条件を初期条件と呼ぶのが通例である.
  • 必要とされる境界条件の個数は微分の階数によって異なる.
  • 境界における解の値を与える境界条件をDirechlet型境界条件と呼ぶ.一方で境界における解の一階微分値を与える境界条件をNeumann型境界条件と呼ぶ.
  • 実用的には数値シミュレーションにおいて一番難しいのは適切な境界条件を設定することかもしれない.初心者は境界条件を適当に設定しがちであるが,物理的に意味のある境界条件を設定することは非常に重要である.

例1

一様重力場中の質点の運動方程式 \[ \frac{d^2 x}{d t^2} = -g \quad \left( \frac{dx}{d t} = v, \quad \frac{d v}{d t} = -g \right) \] の一般解は \[ x(t) = x_0 + v_0 t - \frac{1}{2} g t^2 \] である.この解を決定するには\(t = 0\)における条件(初期条件)\(x(0) = x_0\)および\(v(0) = v_0\)が必要.

この問題を境界値問題として見れば,\(t = 0\)および\(t = T\)の2点において一つずつ条件を与えることでも解を決定できる.

  • Direchlet型境界条件 \(x(0) = x_0\)\(x(T) = x_1\) を与える.

  • Neumann型境界条件 \(x'(0) = v_0\)\(x'(T) = v_1\) を与える.

偏微分方程式においても基本的に事情は同じであり,微分の階数に等しい条件を指定しなければならない.(境界条件を適当に与えると場合によっては解が無いということもあり得る!)

例2

波動方程式 \[ \frac{\partial^2 u}{\partial t^2} = \frac{\partial^2 u}{\partial x^2} \] は時間・空間ともに2階の偏微分方程式である. したがって,この方程式の解を決定するには初期条件として\(t=0\)における\(u\)および\(\partial u /\partial t\)の値,境界条件として両端での\(u\)の値を与える必要がある.

ここで,補助変数として\(\partial u/\partial t = \partial v/\partial x\)なる\(v\)を導入してみよう.このとき波動方程式は \[ \frac{\partial u}{\partial t} = \frac{\partial v}{\partial x}, \quad \frac{\partial v}{\partial t} = \frac{\partial u}{\partial x} \] のように,2変数\(u, v\)についての時間・空間ともに1階の偏微分方程式に書き換えられる. したがって,初期条件として\(t = 0\)における\(u, v\)の値が必要となる.一方で,境界条件としては,例えば両方の境界で\(u\)の値を与えてもよいし,一方の境界で\(u\)を,もう一方の境界で\(v\)を与えてもよい.
ただし,両端で\(u, v\)の両方の値を同時に指定することはできない(自由度が足りない)ことに注意しよう.物理的には右方向に伝播する波動については左側の境界が,左方向に伝播する波動については右側の境界がそれぞれ影響を与えるためと考えることができる.

1.3 有限差分法による離散化

計算機は連続的な関数を厳密に表現することができないため,基礎方程式を数値的に解く際には何らかの離散化が必要となる.典型的には離散的な格子点 \(x_{i} (i = 1, 2, \ldots, N)\) において定義される \(u_{i} = u(x_{i})\) を用いる.

この離散化によって格子点上の関数値は定義されたが,偏微分方程式に現れる微分値は未知である.(微分値も独立変数にとる手法も存在する.)安直には微分を差分に置き換えてやればよい. 例えば最も簡単な場合として等間隔格子 \(x_{i} = i \Delta x\) を使う場合を考えると,一階微分は直感的に \[ \left( \frac{\partial u}{\partial x} \right)_{i} \approx \frac{u_{i+1} - u_{i-1}}{2 \Delta x} \] のように近似することができるだろう.しかし,同様に \[ \left( \frac{\partial u}{\partial x} \right)_{i} \approx \frac{u_{i+1} - u_{i}}{\Delta x} \]\[ \left( \frac{\partial u}{\partial x} \right)_{i} \approx \frac{u_{i} - u_{i-1}}{\Delta x} \] でも良さそうである. どのような差分近似を採用したら良いのだろうか?

1.4 差分近似の誤差と精度

微分の差分近似は一意には決まらないが,その誤差は理論的に評価することができる.そのために\(x = x_i\)近傍でのTaylor展開を考えよう. \[ u_{i\pm1} = u(x_{i} \pm \Delta x) = u_{i} \pm \left( \frac{\partial u}{\partial x} \right)_{i} \Delta x^1 + \frac{1}{2} \left( \frac{\partial^2 u}{\partial x^2} \right)_{i} \Delta x^2 \pm \frac{1}{6} \left( \frac{\partial^3 u}{\partial x^3} \right)_{i} \Delta x^3 + \mathcal{O} (\Delta x^4) \] これから直ちに \[ \left( \frac{\partial u}{\partial x} \right)_{i} \approx \frac{u_{i+1} - u_{i-1}}{2 \Delta x} + \mathcal{O} (\Delta x^2) \] を得る.すなわち,格子幅\(\Delta x\)を小さくするとこの差分近似の誤差は\(\Delta x^2\)に比例して小さくなることが分かる.このように展開を途中で打ち切ることから生じる誤差を打ち切り誤差と呼ぶ.

一般に差分近似の誤差が\(\Delta x\)\(n\)乗に比例して小さくなるとき,その差分近似は\(n\)次精度と呼ばれる.

演習問題 1. 1 差分近似 \(\displaystyle \left( \frac{\partial u}{\partial x} \right)_{i} \approx \frac{u_{i+1} - u_{i}}{\Delta x}\) および \(\displaystyle \left( \frac{\partial u}{\partial x} \right)_{i} \approx \frac{u_{i} - u_{i-1}}{\Delta x}\) の精度(次数)を求めよ.

1.5 前進差分・後退差分・中心差分

差分近似の次数が同じであっても,その表現は必ずしも一つに定まるわけではない.それは評価点\(x=x_i\)における差分近似を構成するために近傍のどの点を採用するかに自由度があるためである.

評価点\(x=x_i\)

  • 前の点を使う \(\displaystyle \left( \frac{\partial u}{\partial x} \right)_{i} \approx \frac{u_{i+1} - u_{i}}{\Delta x}\) のような差分を前進差分 (forward difference)
  • 後の点を使う \(\displaystyle \left( \frac{\partial u}{\partial x} \right)_{i} \approx \frac{u_{i} - u_{i-1}}{\Delta x}\) のような差分を後退差分 (backward difference)
  • 前後を等しく用いる \(\displaystyle \left( \frac{\partial u}{\partial x} \right)_{i} \approx \frac{u_{i+1} - u_{i-1}}{2 \Delta x}\) のような差分を中心差分(central difference)

と呼ぶ.これらは単なる呼び名であって,与えられた方程式を解くにあたってどの差分近似を採用すべきかは全く明らかでない.多くの場合において,近似すべき項の物理的性質に適した差分近似を用いなければ実用的な数値計算はできないことがほとんどである. (そもそも時間微分の近似以外の場合においては前進・後退という名前自体が物理的に全くナンセンスである.)

1.6 高階微分の差分近似

基本的には1階微分の場合と同様にTaylor展開を用いて必要な微分係数以外の項を消去すればよい. 例えば2階微分であれば \[ \left( \frac{\partial^2 u}{\partial x^2} \right)_i \approx \frac{u_{i+1} - 2 u_{i} + u_{i-1}}{\Delta x^2} + \mathcal{O} (\Delta x^2) \]

より高階の微分や前進差分・後退差分なども構成することができる. よく使われる差分公式については例えば Wikipedia を参照せよ.

ある点の微分値を差分近似する際に必要となる周辺の範囲のことをステンシルと呼ぶ.一般に,高階微分の差分近似や,同じ次数でも高次精度の差分を構成する際にはより広いステンシルが必要となる.

演習問題 1. 2 上記の差分近似が2次精度であることを示せ.Taylor展開を3次まで行う必要があることに注意せよ.

演習問題 1. 3 高階微分の差分近似に広いステンシルが必要になるのは何故か.例えば,4階微分\(\partial^4 u/\partial x^4\)を表すには最低何点のステンシルが必要になるか考えよ.