rendered paste body#!/usr/bin/env ruby
class SDeviation
attr_reader :sum,:sumatory,:data,:average,:stddeviation,:strprocedure,:stddeviation_sqrt,:error,:error_size
def initialize(data,error)
@sum = 0
@sumatory = 0
@data = data
@error = error
@error_size = @error.to_s.split('.')[1].size
@average = 0
@stddeviation = 0
@strprocedure = ''
end
def setError(v)
d = v-v.to_i
r = (d*10**(@error_size-1)-(d*10**(@error_size-1)).to_i)*10**-(@error_size-1)
rounded = ((r*(10**(@error_size-1))).round)*10**-(@error_size-1)
return v-r+rounded
end
def Average
@strprocedure = "$\\overline{x}=\\frac{\\sum_{i=1}^n x_i}{n}$\\\\\n"
@strprocedure += "$\\overline{x}=\\frac{\\sum_{i=1}^{#{@data.size}} x_i}{#{@data.size}}$\\\\\n"
@strprocedure += "$\\overline{x}=\\frac{"
@data.each do |e|
@sum += e
@strprocedure += "#{e}+"
end
@strprocedure = @strprocedure[0..-2]
@average = setError(@sum / @data.size.to_f)
@strprocedure += "}{#{@data.size}}$\\\\\n"
end
def Sumatory
@strprocedure += "$\\sum_{i=1}^n (x_i-\\overline{x})^2$\\\\\n"
@strprocedure += "$\\sum_{i=1}^{#{@data.size}} (x_i-\\overline{x})^2=$\\\\\n"
@strprocedure += "$"
@data.each do |e|
@sumatory += setError((e-@average)**2)
@strprocedure += "(#{e}-#{@average})^2+"
end
@strprocedure = @strprocedure[0..-2]
@strprocedure += "$\\\\\n"
@strprocedure += "$=#{@sumatory}$\\\\\n"
end
def StdDeviation
@stddeviation = setError(@sumatory / (@data.size.to_f - 1))
@stddeviation_sqrt = setError(Math::sqrt(@stddeviation))
@strprocedure += "$\\sigma^2 = \\frac{\\sum_{i=1}^n (x_i-\\overline{x})^2}{n-1}$\\\\\n"
@strprocedure += "$\\sigma^2 = \\frac{\\sum_{i=1}^{#{@data.size}} (x_i-\\overline{x})^2}{#{@data.size}-1}$\\\\\n"
@strprocedure += "$\\sigma^2 = \\frac{#{@sumatory}}{#{@data.size-1}}$\\\\\n"
@strprocedure += "$\\sigma^2 = #{@stddeviation}$\\\\\n"
@strprocedure += "$\\sigma = #{@stddeviation_sqrt}$\\\\\n"
end
end
class LSquares
attr_reader :EXi,:EXi2,:EYi,:EXiYi,:m,:b,:EXiEYi,:strprocedure,:data_size
def initialize(data)
@data = data
@data_size = @data.size
@strprocedure = ''
@EXi = 0
@EXi2 = 0
@EYi = 0
@EXiYi = 0
@EXiEYi = 0
@m = 0
@b = 0
end
def Sums
@strprocedure += "$m=\\frac{n\\sum_{i=1}^{n} x_{i}^{2}-\\sum_{i=0}^{n} x_iy_i}{n\\sum_{i=1}^{n} x_{i}^{2}-\\sum_{i=1}^{n} x_i \\sum{i=1}^{n} x_i}$\\\\\n"
@strprocedure += "$m=\\frac{n\\sum_{i=1}^{#{@data_size}} x_{i}^{2}-\\sum_{i=0}^{#{@data_size}} x_iy_i}{n\\sum_{i=1}^{#{@data_size}} x_{i}^{2}-\\sum_{i=1}^{#{@data_size}} x_i \\sum_{i=1}^{#{@data_size}} x_i}$\\\\\n"
@strprocedure += "$b=\\frac{\\sum_{i=1}^{n} y_{i}-m\\sum_{i=0}^{n} x_i}{n}$\\\\\n"
@strprocedure += "$b=\\frac{\\sum_{i=1}^{#{@data_size}} y_{i}-m\\sum_{i=0}^{#{@data_size}} x_i}{n}$\\\\\n"
@data.each do |e|
e.collect!{|a| a.to_f}
@EXi += e[0]
@EXi2 += e[0]**2
@EYi += e[1]
@EXiYi += e[0]*e[1]
end
@EXiEYi = @EXi * @EYi
end
def MB
@m = (@data_size*@EXiYi-@EXi*@EYi)/(@data_size*@EXi2-@EXi*@EXi)
@b = (@EYi-@m*@EXi)/(@data_size)
@strprocedure += "$m=\\frac{#{@data_size}*#{@EXiYi}-#{@EXi}*#{@EYi}}{#{@data_size}*#{@EXi2}-#{@EXi}*#{@EXi}}$\\\\\n"
@strprocedure += "$m=#{@m}$\\\\\n"
@strprocedure += "$b=\\frac{#{@EYi}-#{@m}*#{@EXi}}{#{@data_size}}$\\\\\n"
@strprocedure += "$b=#{@b}$\\\\\n"
end
end
print "Datos: "
input = gets.split(';').collect{|e| e.split(',').collect{|a| a.to_f}}
print "Error: "
error = gets.to_f
s = LSquares.new(input)
s.Sums
s.MB
puts s.strprocedure
c = SDeviation.new(input.collect{|e| e[1]},error)
c.Average
c.Sumatory
c.StdDeviation
puts c.strprocedure
=begin
class ParseData
attr_reader :initiald,:tmpd,:parsedd
def initialize(data)
@initiald = data
@tmpd = []
@parsedd = []
end
def RemoveSp
@initiald.each do |e|
@tmpd << e.gsub(/\s/,"")
end
end
def ParseLines
@initiald.each do |e|
@tmpd << e.strip.to_f if e.gsub(/\s/,"") != ""
end
end
def ParseSep(sep=",")
@initiald.each do |e|
@tmpd << e.strip.to_f if true
end
end
end
=end