#!/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