0

嘿,我的计算两个数组协方差的方法有问题。

总是有错误:

main:Object 的未定义方法“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)
4

3 回答 3

3

你正在做的事情有两件事是错误的。首先,您定义了一个 Enumerable 实例方法,而不是类方法。您不会传入正在操作的数组,而是covariance直接在数组上调用:

daten_rohstoff1.covariance daten_rohstoff2

因此,您应该将方法定义为仅采用一个参数,即第二个数组。

其次,如前所述,您已经定义了一个方法covariance,但正在尝试调用kovarianz. 这显然行不通。

于 2012-04-06T17:55:20.733 回答
1

好吧,这里的主要问题是您调用了 kovarianz,而不是协方差,但是代码也嵌入在模块中的事实意味着您必须像这样调用它:

Enumerable::covariance(daten_rohstoff1,daten_rohstoff2)

希望这有帮助。

于 2012-04-06T17:48:04.187 回答
1

方法名称被调用covariance,但您kovarianz在最后一行调用。改变一个或另一个,你应该是金色的。

于 2012-04-06T17:40:31.453 回答