Skip to content

Instantly share code, notes, and snippets.

@rockarts
Created June 24, 2014 03:07
Show Gist options
  • Select an option

  • Save rockarts/8edc3e2a3bc37a02d6da to your computer and use it in GitHub Desktop.

Select an option

Save rockarts/8edc3e2a3bc37a02d6da to your computer and use it in GitHub Desktop.
Class For Calculating the Standard Deviation of Arrays
require 'minitest/autorun'
# Test case provided by: http://en.wikipedia.org/wiki/Standard_deviation
class TestStandardDeviation < MiniTest::Unit::TestCase
def setup
@values = [2, 4, 4, 4, 5, 5, 7, 9]
end
def test_average_is_calculated
average = @values.inject{ |memo, element| memo + element} / @values.length
assert_equal 5, average
end
def test_mean_is_calculated
average = @values.inject{ |memo, element| memo + element} / @values.length
mean = @values.inject(0){ |memo, element| memo + ((element - average) ** 2).abs} / @values.length
assert_equal 4, mean
end
def test_standard_deviation_is_calculated
average = @values.inject{ |memo, element| memo + element} / @values.length
mean = @values.inject(0){ |memo, element| memo + ((element - average) ** 2).abs} / @values.length
standard_deviation = Math.sqrt(mean)
assert_equal 2, standard_deviation
end
def test_standard_deviation
standard_deviation = StandardDeviation.new(@values)
assert_equal 2, standard_deviation.calculate
end
end
class StandardDeviation
def initialize(values)
@values = values
end
def calculate
average = @values.inject{ |memo, element| memo + element} / @values.length
mean = @values.inject(0){ |memo, element| memo + ((element - average) ** 2).abs} / @values.length
Math.sqrt(mean)
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment