解析は「式」と「計算手順」が一致した瞬間に、手元で回り始める。
ルンゲクッタ法は、その最初の標準装備。

結論

このページだけで持ち帰れる要点。

常微分方程式は、解析解が取れないことが多い。だから現場では
「時間を刻んで近似する」が基本になる。

ルンゲクッタ法(特に4次)は、精度と手軽さのバランスが良い「標準の型」。
まずはここから始めれば、一次遅れ・タンク収支・反応・熱収支まで一気に扱える。

ポイントは3つだけ:①状態の置き方 ②刻み幅 $\Delta t$ ③検算(半分刻み)

シママ

常微分方程式って…式は書けるのに、手元で計算が回らないのよね。
どこから手を付ければいいか、毎回いったん迷う。

ストーク

そこが一番の壁たいね。
結局は「時間を刻んで、次の値を作る」だけ。型を決めたら迷いが減るばい。

シママ

なるほど。まず「次の値の作り方」を固定するってことね。

ストーク

そげんたい。途中で何回か「様子見」してから進むけん、急に賢くなった気分になれるばい。

シママ

気分の話いらない。
でも「途中で覗く」って説明は分かりやすい。そこは採用。

あるある

つまずきポイントは、だいたい同じ。

  • 式は書けたのに、計算が回らない(状態が定義できていない)
  • $\Delta t$ を小さくするほど良いと思って、計算が重くなる
  • 結果がそれっぽく見えて、検算せずに採用してしまう
シママ

$\Delta t$ を小さくすれば安心…って思って、気づくと計算が終わらないやつ。

ストーク

あるたい。刻みすぎると、計算より先に自分の時間が拡散するばい。

シママ

拡散とか言うな。物質移動じゃないのよ。
だから“安心”は $\Delta t$ の小ささじゃなくて、検算で作る。

ストーク

そげんたい。$\Delta t$ と $\Delta t/2$ で回して差を見る。差が小さければ、まず合格ばい。

シママ

納得。悩むより先に、差で判断するのね。

常微分方程式を「計算できる形」にする

状態方程式に落とすと、手順が固定される。

常微分方程式は、基本この形にします。

$$\frac{dy}{dt} = f(t, y)$$

たとえば一次遅れ(入力 $u$ に追従するモデル)は:

$$\frac{dy}{dt} = \frac{u – y}{\tau}$$

タンクの物質収支(濃度 $C$)は:

$$\frac{dC}{dt} = \frac{F}{V}\left(C_{\mathrm{in}} – C\right)$$
ストーク

ここで一番大事なんは、まず $y$ を何にするか たい。
状態が決まったら、あとは $f(t,y)$ を書くだけになるけん。

シママ

状態を先に決める、ね。ここが曖昧だと、どんな方法でも回らない。

ルンゲクッタ法(4次)の型

“途中の傾き”を4回見て、次の点を作る。

ルンゲクッタ法(4次)は、「次の値」をこのルールで作ります(スカラーでもベクトルでも同じ)。

$$k_1 = f(t, y)$$
$$k_2 = f\!\left(t + \frac{\Delta t}{2},\, y + \frac{\Delta t}{2}k_1\right)$$
$$k_3 = f\!\left(t + \frac{\Delta t}{2},\, y + \frac{\Delta t}{2}k_2\right)$$
$$k_4 = f\!\left(t + \Delta t,\, y + \Delta t\,k_3\right)$$
$$y_{\mathrm{next}} = y + \frac{\Delta t}{6}\left(k_1 + 2k_2 + 2k_3 + k_4\right)$$
ストーク

式だけ見ると厳つかけど、やっとることは「途中で様子見して平均する」たい。
まっすぐ進まずに、途中でちょいちょい覗く。慎重派の計算ばい。

シママ

覗く回数が多い。
でも「途中の傾きも拾う」って意味なら、すごく納得。

ストーク

覗きすぎって言うな。ちゃんと許可は取っとるたい。

シママ

誰に。
いいから式の話に戻って。

最小コード(Python例)

def runge_kutta_4_step(f, t, y, dt):
    k1 = f(t, y)
    k2 = f(t + dt/2, y + dt*k1/2)
    k3 = f(t + dt/2, y + dt*k2/2)
    k4 = f(t + dt,   y + dt*k3)
    return y + dt*(k1 + 2*k2 + 2*k3 + k4)/6

# 例:一次遅れ dy/dt = (u - y)/tau
def f(t, y, u=1.0, tau=5.0):
    return (u - y)/tau

※ 現場用途では「単位」「初期値」「入力 $u$ の持ち方(定数/ステップ/時系列)」を先に揃えると迷いが減ります。

型(テンプレ)

このまま埋めれば、常微分方程式→ルンゲクッタ法が回る。

数値計算メモ(コピペ用)

① 目的(何を見る?)
- 対象:一次遅れ/タンク収支/反応/熱収支(など)
- 見たいもの:立ち上がり、遅れ、偏り、オーバーシュート、定常値

② 状態(y)と式(f)
- 状態 y:____(例:温度、濃度、圧力、レベル)
- 常微分方程式:dy/dt = f(t, y)
- パラメータ:____(例:τ, F, V, k など)
- 入力/外乱の持ち方:定数/ステップ/時系列

③ 計算条件
- 初期値:y(t0)=____
- 時間範囲:t0=__ 〜 t_end=__
- 刻み幅:Δt=__(まずは粗めでOK)
- 検算:Δt と Δt/2 を両方回して差を見る

④ 出力(チェック項目)
- y(t) が物理的にあり得る範囲か(負にならない等)
- Δt と Δt/2 の結果差が十分小さいか
- パラメータを振ったとき、直感と逆を向かないか
ストーク

まずは検算たい。$\Delta t$ と $\Delta t/2$ の差を見る。
これだけで「それっぽい波形」に騙されにくくなるばい。

シママ

了解。悩むより先に回して差を見る。これなら迷子にならない。

落とし穴

ここで止まりやすい。

$\Delta t$ を決めずに悩み続ける。
最初は「粗く回す → 検算する → 必要なら細かくする」で十分です。
いきなり最適な刻み幅を探しに行くと、手が止まります。

単位・初期値・入力の扱いが曖昧なまま回す。
数値計算は正直で、曖昧さがそのまま波形に出ます。式より先に、条件を揃えるのが早道です。

ストーク

式を綺麗にしたら賢くなった気がする…って瞬間、あるやろ?
だいたいその後で、初期値とか単位とか入力が抜けとるたい。

シママ

あるけど。刺すな。
“賢くなった気分”のまま回すと事故るから、テンプレで条件を先に固定。これ。

締め

ストーク

常微分方程式は「刻む」。ルンゲクッタ法(4次)は「途中も覗く」。
あとは半分刻みで差を見る。ここまでできたら、十分回り始めるばい。

シママ

うん。状態と条件を決めて、粗く回して、差を見る。
それなら私でも、ちゃんと手が動く。