Ruby でローレンツアトラクタを描画する

Ruby + gnuplotローレンツアトラクタを描いてみました。
 

 
全体的にここなどを参考にしました。微分方程式オイラー法(参考)で数値計算しています。

gnuplot での描画は numo/gnuplot という Gem を使っています。

require 'numo/gnuplot'

fx = lambda {|x, y, z, r, p, b| -p * x + p * y}
fy = lambda {|x, y, z, r, p, b| -x * z + r * x - y}
fz = lambda {|x, y, z, r, p, b|  x * y - b * z}

dt = 1e-3
x, y, z = 1, 1, 1
p, r, b = 10, 28, 8 / 3.0

ax, ay, az = [], [], []

100000.times do
  x += dt * fx[x, y, z, r, p, b]
  y += dt * fy[x, y, z, r, p, b]
  z += dt * fz[x, y, z, r, p, b]
  ax << x
  ay << y
  az << z
end

Numo.gnuplot do
  unset :key
  splot ax, ay, az, w: :dots
end
gets    #終了待ち