(24)振子の運動 5(rk23() を Lua から実行する)

Nspire での実行結果:
f:id:ti-nspire:20150429085820j:plain

上と同じ計算を Lua から実行する:
f:id:ti-nspire:20150429085930j:plain

local g = 9.80665 --重力加速度
local length = 1 -- 棒の長さ
local tMin = 0 -- スタート時間 
local tMax = 2 -- ストップ時間
local angleInit = 1 -- 角度初期値
local velInit = 0 -- 角速度初期値
local step = 0.5 -- 時間ステップ
local tol = 1e-4 -- 許容差

function on.paint(gc)
   local mat = math.eval("rk23({vel,((−"..g..")/("..length.."))*sin(θ)},t,{θ,vel},{"..tMin..","..tMax.."},{"..angleInit..","..velInit.."},"..step..","..tol..")")
   --確認のため行列の内容を表示する
   for i = 1, #mat do -- #mat は行列 mat の行数
      for j = 1, #mat[1] do -- #mat[n] は行列 mat の列数
         gc:drawString(mat[i][j], (j-0.9) * 150, (i-0.5) * 15)
      end
   end
end