解析は「式」と「計算手順」が一致した瞬間に、手元で回り始める。
ルンゲクッタ法は、その最初の標準装備。
結論
このページだけで持ち帰れる要点。
常微分方程式は、解析解が取れないことが多い。だから現場では
「時間を刻んで近似する」が基本になる。
ルンゲクッタ法(特に4次)は、精度と手軽さのバランスが良い「標準の型」。
まずはここから始めれば、一次遅れ・タンク収支・反応・熱収支まで一気に扱える。
ポイントは3つだけ:①状態の置き方 ②刻み幅 $\Delta t$ ③検算(半分刻み)。
常微分方程式って…式は書けるのに、手元で計算が回らないのよね。
どこから手を付ければいいか、毎回いったん迷う。
そこが一番の壁たいね。
結局は「時間を刻んで、次の値を作る」だけ。型を決めたら迷いが減るばい。
なるほど。まず「次の値の作り方」を固定するってことね。
そげんたい。途中で何回か「様子見」してから進むけん、急に賢くなった気分になれるばい。
気分の話いらない。
でも「途中で覗く」って説明は分かりやすい。そこは採用。
あるある
つまずきポイントは、だいたい同じ。
- 式は書けたのに、計算が回らない(状態が定義できていない)
- $\Delta t$ を小さくするほど良いと思って、計算が重くなる
- 結果がそれっぽく見えて、検算せずに採用してしまう
$\Delta t$ を小さくすれば安心…って思って、気づくと計算が終わらないやつ。
あるたい。刻みすぎると、計算より先に自分の時間が拡散するばい。
拡散とか言うな。物質移動じゃないのよ。
だから“安心”は $\Delta t$ の小ささじゃなくて、検算で作る。
そげんたい。$\Delta t$ と $\Delta t/2$ で回して差を見る。差が小さければ、まず合格ばい。
納得。悩むより先に、差で判断するのね。
常微分方程式を「計算できる形」にする
状態方程式に落とすと、手順が固定される。
常微分方程式は、基本この形にします。
たとえば一次遅れ(入力 $u$ に追従するモデル)は:
タンクの物質収支(濃度 $C$)は:
ここで一番大事なんは、まず $y$ を何にするか たい。
状態が決まったら、あとは $f(t,y)$ を書くだけになるけん。
状態を先に決める、ね。ここが曖昧だと、どんな方法でも回らない。
ルンゲクッタ法(4次)の型
“途中の傾き”を4回見て、次の点を作る。
ルンゲクッタ法(4次)は、「次の値」をこのルールで作ります(スカラーでもベクトルでも同じ)。
式だけ見ると厳つかけど、やっとることは「途中で様子見して平均する」たい。
まっすぐ進まずに、途中でちょいちょい覗く。慎重派の計算ばい。
覗く回数が多い。
でも「途中の傾きも拾う」って意味なら、すごく納得。
覗きすぎって言うな。ちゃんと許可は取っとるたい。
誰に。
いいから式の話に戻って。
最小コード(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次)は「途中も覗く」。
あとは半分刻みで差を見る。ここまでできたら、十分回り始めるばい。
うん。状態と条件を決めて、粗く回して、差を見る。
それなら私でも、ちゃんと手が動く。