フーリエ級数による簡単な温度分布(Ruby)

下部が高温熱源、両端が低温熱源の際の平衡状態の温度分布を図示してみました。微分方程式
  
を、境界条件
  
  
  
で解くと、
  
となります。

これを図示すると
20180529011622
という感じになります。


Ruby コード。表示には自作の Gem 'oekaki' を使っています。
oekaki_sample18.rb

require 'oekaki'

u = ->(x, y, n) {
  a = 0
  n.times do |i|
    j = (2 * i + 1).to_f
    a += (-1) ** i / j * exp(-j * y) * cos(j * x)
  end
  4 * a / PI
}

Width, Height = 300, 350
step_x, step_y = PI / Width, 2.5 / Height

Oekaki.app width: 400, height: 400 do
  draw do
    clear
    (-Width / 2).upto(Width / 2) do |x|
      0.upto(Height) do |y|
        t = u.(x * step_x, y * step_y, 50)
        color(t * 0xffff, 0, 0)
        point(x + 200, Height - y)
      end
    end
    color(0xffff, 0xffff, 0xffff)
    line(0, Height + 1, 400, Height + 1)
  end
end