連続な式は、そのままではコンピュータに載らない。
離散化は、微分方程式を「計算できる形」に翻訳するための最初の一歩です。
結論
離散化とは「連続な微分方程式を、有限個の点や区間で近似し、計算可能な式へ変えること」。
離散化とは、連続空間・連続時間で書かれた微分方程式を、有限個の点や区間で扱える形に置き換えることです。
微分方程式は本来、無限に細かい空間や時間の上で定義されています。しかしコンピュータは、有限個の数しか扱えません。そこで、時間を $\Delta t$ ごと、空間を $\Delta x$ ごとに区切り、微分を差分や区分近似で表します。
たとえば時間微分 $\frac{du}{dt}$ は、$ \frac{u^{n+1}-u^n}{\Delta t} $ のように近似できます。こうして微分方程式は、連続な式から更新則や連立方程式へ変わります。
つまり離散化とは、数学の問題を数値計算の問題へ写し替える操作です。数値計算の成否は、この翻訳の仕方に大きく左右されます。
あるある
微分方程式は分かっても、どうやってコンピュータで解くのかが急に見えなくなる。
解析の授業では微分方程式を連続な式として学びます。しかし実際に計算機で解こうとすると、「この微分をどうやって数で扱うの?」という壁にぶつかります。
微分方程式そのものは分かるのよ。でも「それをプログラムでどう解くの?」ってなると、急に橋が切れる感じがするの。
そこをつなぐのが離散化たい。連続な式を、そのまま計算するんやなくて、点の列として近似していくとよ。
なるほど。「微分方程式を解く」の前に、「計算できる形へ直す」段階があるのね。
本文
離散化は「微分を差分へ置き換える」ところから始まる。
1) なぜ離散化が必要なのか
微分方程式は、時間や空間が連続であることを前提に書かれています。たとえば $u(t)$ や $u(x,t)$ のような関数は、あらゆる時刻や位置で値を持ちます。
しかしコンピュータは、連続な世界をそのまま保持できません。扱えるのは有限個のデータだけです。そこで、時間なら $t^0,t^1,t^2,\dots$、空間なら $x_0,x_1,x_2,\dots$ のように区切って、そこでの値だけを追いかけます。
このとき本来の微分方程式は、「各点の値どうしの関係式」へ変わります。これが離散化の基本です。
離散化の基本イメージ
連続な関数 $u(x,t)$ を、そのまま全部扱うのではなく、格子点上の値 $u_i^n$ として扱う。
$i$ は空間方向の番号、$n$ は時間方向の番号です。
2) 微分を差分で近似する
離散化の最も基本的な考え方は、微分を差分で近似することです。
たとえば時間微分 $\frac{du}{dt}$ は、前進差分を使うと $ \frac{u^{n+1}-u^n}{\Delta t} $ と近似できます。
同様に、空間微分 $\frac{\partial u}{\partial x}$ は、前進差分なら $ \frac{u_{i+1}-u_i}{\Delta x} $、後退差分なら $ \frac{u_i-u_{i-1}}{\Delta x} $、中心差分なら $ \frac{u_{i+1}-u_{i-1}}{2\Delta x} $ と書けます。
つまり離散化とは、「微分」という連続極限の操作を、「近くの点の差」で置き換えることです。
代表的な差分近似
時間微分:$ \frac{du}{dt} \approx \frac{u^{n+1}-u^n}{\Delta t} $
一次空間微分(前進差分):$ \frac{\partial u}{\partial x} \approx \frac{u_{i+1}-u_i}{\Delta x} $
一次空間微分(中心差分):$ \frac{\partial u}{\partial x} \approx \frac{u_{i+1}-u_{i-1}}{2\Delta x} $
二次空間微分:$ \frac{\partial^2 u}{\partial x^2} \approx \frac{u_{i+1}-2u_i+u_{i-1}}{\Delta x^2} $
3) 最小例:常微分方程式を離散化する
たとえば、最も基本的な微分方程式として $ \frac{du}{dt}=-au $ を考えます。これは減衰の式です。
時間微分を前進差分で置き換えると、$ \frac{u^{n+1}-u^n}{\Delta t}=-au^n $ となります。
これを $u^{n+1}$ について解くと、$ u^{n+1}=u^n-a\Delta t\,u^n=(1-a\Delta t)u^n $ です。
この形になると、初期値 $u^0$ から順番に $u^1,u^2,u^3,\dots$ と計算できます。つまり、連続な微分方程式が、離散的な更新則へ変わりました。
あ、これなら分かる。微分方程式をそのまま解くんじゃなくて、「次の時刻の値を前の値から計算する式」に変えてるのね。
そうたい。離散化すると、「連続な問題」が「更新の問題」になるとよ。プログラムは、その更新を繰り返すわけたい。
4) 偏微分方程式では格子を作る
偏微分方程式では、時間だけでなく空間も離散化します。たとえば熱伝導方程式 $ \frac{\partial u}{\partial t}=\alpha \frac{\partial^2 u}{\partial x^2} $ を考えます。
これを時間は前進差分、空間は中心差分で離散化すると、$ \frac{u_i^{n+1}-u_i^n}{\Delta t}=\alpha \frac{u_{i+1}^n-2u_i^n+u_{i-1}^n}{\Delta x^2} $ となります。
ここから $u_i^{n+1}$ を解けば、各格子点の温度を次の時刻へ更新する式が得られます。
つまり偏微分方程式でも基本は同じです。連続な微分を、近傍格子点どうしの差で近似し、有限個の未知数を持つ問題へ変えます。
5) 離散化の方法はいくつもある
離散化にはいくつか代表的な方法があります。
有限差分法
微分を差分で直接近似する。構造が分かりやすい。
有限体積法
保存則を小さな体積ごとに積分して離散化する。流体や熱の保存量に強い。
有限要素法
領域を要素に分け、重み付き残差の考え方で近似する。複雑形状に強い。
入門では有限差分法が一番見通しやすいですが、実務では保存則や形状の複雑さに応じて手法を使い分けます。
6) 離散化で何が変わるのか
離散化すると、元の微分方程式は厳密な連続式ではなくなります。つまり、必ず近似誤差が入ります。これを離散化誤差と呼びます。
そのため、離散化は「微分方程式をそのまま解く」ことではなく、「解ける形へ近似している」ことを忘れてはいけません。
だから数値計算では、精度、安定性、収束性が重要になります。離散化の仕方が悪いと、どれだけ高速に計算しても、良い結果にはなりません。
離散化で意識する3点
精度:近似誤差がどれくらい小さいか
安定性:計算途中で誤差が暴れにくいか
収束性:刻みを細かくすると真の解へ近づくか
7) 計算例
たとえば $ \frac{du}{dt}=-2u $、初期値 $u^0=1$、時間刻み $\Delta t=0.1$ とします。
前進差分で離散化すると、$ u^{n+1}=(1-2\Delta t)u^n=0.8u^n $ です。
したがって、$u^1=0.8$、$u^2=0.64$、$u^3=0.512$ と順に求まります。
このように、連続な微分方程式が「係数を掛けながら進む計算列」へ変わります。これが離散化の最小の姿です。
8) よくあるつまずき
つまずき1:離散化はただの書き換えだと思う
実際には近似であり、誤差や安定性に影響します。
つまずき2:差分式を作ればそれで終わりと思う
境界条件、初期条件、刻み幅の選び方まで含めて数値計算です。
つまずき3:連続解と離散解の違いを意識しない
離散解はあくまで近似解であり、刻みを細かくして確認する必要があります。
テンプレ
微分方程式を離散化するときの最小の型。
離散化の理解テンプレ
(1)時間や空間を $\Delta t,\Delta x$ で区切る
(2)微分を差分で近似する
(3)微分方程式を更新則または連立方程式へ変える
(4)初期条件・境界条件を入れて数値的に解く
(5)刻みを変えて収束や安定性を確認する
落とし穴
離散化を「微分を差分に置いただけ」と軽く見る。
離散化の落とし穴は、差分式さえ書ければ終わりだと思ってしまうことです。
実際には、どの差分を選ぶかで精度も安定性も変わります。前進差分、後退差分、中心差分は、全部同じではありません。
つまり離散化は、単なる記号の置き換えではなく、どんな近似で現象を数値化するかという設計です。
締め
離散化は、連続な式を計算可能な問題へ変える翻訳作業。
今日の芯は、離散化が「微分方程式をそのまま解く」前の、翻訳の段階ってところたい。連続な式を、有限個の値で扱える形へ直すわけよ。
分かった。数値計算って、いきなり解法に入るんじゃなくて、まず「連続な問題を点の問題へ変える」ところから始まるのね。
そうたい。数値計算は、解く技術でもあるけど、まず「どう写すか」の技術でもあるけんね。