0

2つの配列の共分散を計算する方法に問題があります。

常にエラーがあります:

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

あなたがしていることには2つの問題があります。まず、クラス メソッドではなく、Enumerable インスタンス メソッドを定義しました。操作している配列を渡すのではなく、covariance配列を直接呼び出します。

daten_rohstoff1.covariance daten_rohstoff2

したがって、引数を 1 つだけ、つまり 2 番目の配列を取るようにメソッドを定義する必要があります。

次に、前述のように、メソッドを定義しましたcovarianceが、 を呼び出そうとしていますkovarianz。これは明らかに機能しません。

于 2012-04-06T17:55:20.733 に答える
1

メソッド名が呼び出されますが、最後の行でcovariance呼び出します。kovarianzどちらかを変更すれば、あなたはゴールデンになるはずです。

于 2012-04-06T17:40:31.453 に答える
1

ここでの主な問題は、共分散ではなく kovarianz を呼び出したことですが、コードもモジュールに埋め込まれているという事実は、次のように呼び出す必要があることを意味します。

Enumerable::covariance(daten_rohstoff1,daten_rohstoff2)

これが役に立ったことを願っています。

于 2012-04-06T17:48:04.187 に答える