lib/more_math/sequence/moving_average.rb



module MoreMath
  class Sequence
    module MovingAverage
      def simple_moving_average(n)
        n < 1 and raise ArgumentError, 'n < 1, has to be >= 1'
        n <= @elements.size or raise ArgumentError,
          'n > #elements, has to be <= #elements'
        avg = []
        0.upto(@elements.size - n) do |i|
          sum = 0.0
          i.upto(i + n - 1) do |j|
            sum += @elements[j].to_f
          end
          avg << sum / n
        end
        avg
      end
      alias moving_average simple_moving_average
    end
  end
end