嘿,我的方法有问题,计算两个数组的协方差。
始终存在错误:
主要的未定义方法'kovarianz':对象
这是我的代码:
rohstoff1 = "Eisen"
rohstoff2 = "Neodym"
daten_rohstoff1 = [1,2,3,4,5,6]
daten_rohstoff2 = [10,11,15,16,17,18]
module Enumerable
def mean
m = self.reduce(:+) / self.length.to_f
return m
end
def covariance (dat1,dat2)
kovar = dat1.inject(0) { |sum, x| sum + (x-dat1.mean) } *
dat2.inject(0) { |sum, x, i| sum + (x-dat2.mean) } / dat1.length.to_f
return kovar
end
end
puts "Kovarianz von #{rohstoff1} und #{rohstoff2} = " +
covariance(daten_rohstoff1,daten_rohstoff2)
答案 0 :(得分:3)
你正在做的事情有两个问题。首先,您已经定义了一个Enumerable实例方法,而不是一个类方法。您不会传入正在操作的数组,而是直接在数组上调用covariance
:
daten_rohstoff1.covariance daten_rohstoff2
因此,您应该定义只接受一个参数的方法,即第二个数组。
其次,如前所述,您已定义方法covariance
但正在尝试调用kovarianz
。显然,这不起作用。
答案 1 :(得分:1)
方法名称称为covariance
,但您在最后一行调用kovarianz
。改变其中一个,你应该是金色的。
答案 2 :(得分:1)
嗯,这里的主要问题是你调用kovarianz而不是协方差,但代码也嵌入模块的事实意味着你必须像这样调用它:
Enumerable::covariance(daten_rohstoff1,daten_rohstoff2)
希望这会有所帮助。