All pastes #402886 Raw Edit

19:36/19/03/2007

public text v1 · immutable
·published 2007-03-20 01:36 UTC
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