TI-Nspire & Lua / 古典的ルンゲクッタ法 1 / 1 ステップだけ計算する

参考: パソコンで見る天体の動き, p.22

function rk(func, from, initVal, step)
   local f1 = func(from           , initVal                )
   local f2 = func(from + step / 2, initVal + step * f1 / 2)
   local f3 = func(from + step / 2, initVal + step * f2 / 2)
   local f4 = func(from + step    , initVal + step * f3    )

   return initVal + (step / 6) * (f1 + 2 * (f2 + f3) + f4)
end

-- 確かめる。
-- この函数を微分方程式として t = 0 から 1 ステップ (1/8) だけ計算する。初期値は 0 とする。
function sute(t, x)
   return x^2 - t^2 - 2 * t + 2
end
print(rk(sute, 0, 0, 1/8))

f:id:ti-nspire:20170501163325p:plain:w400



Nspire で検算する。1 行目が厳密解、2 行目が rk23() による近似解。
f:id:ti-nspire:20170501163151p:plain:w400