2012-04-06 9 views
0

ちょっと私は2つの配列の共分散を計算する私の方法に問題があります。ここでRubyでメソッドを呼び出す方法は?

undefined method 'kovarianz' for main:Object

私のコードです:

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) 
+3

質問を投稿する前に、コードを適切に書式設定してインデントしてください。実際に、そうするなら、あなたの質問に対する答えは直ちに明らかになります。 –

答えて

1

メソッド名がcovarianceと呼ばれているが、しかし、あなたは最後の行にkovarianzを呼び出す

は常にエラーがあります。どちらか一方を変えれば、あなたは金色になるはずです。

+1

上記の私のコメントで私が示唆した2番目の問題があります。 –

+0

大丈夫でした。それでも同じエラーです... – jeffrey

+0

@JörgWMittagうわー、私はそれを完全に逃しました。 :) –

1

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

Enumerable::covariance(daten_rohstoff1,daten_rohstoff2) 

・ホープこれは助けになった。

+0

残念ながら...方法で他の間違いがなければなりません....しかし、私は見つけることができません – jeffrey

+0

これは間違っています。彼はクラスメソッドを定義していないので、Enumerableであるオブジェクトはインスタンスメソッドとして共分散を受け取ります。 – davidcelis

+0

それはそれです....今それは動作します...私の計算は間違っています、結果は0.0です。 – jeffrey

3

あなたがしていることには2つの問題があります。まず、クラスメソッドではなく、Enumerableインスタンスメソッドを定義しました。一つだけの引数、つまり二番目の配列を取るためにあなたはそのための方法を定義する必要があります

daten_rohstoff1.covariance daten_rohstoff2

:あなたは直接アレイ上covarianceを呼び出します、むしろ、あなたが上で動作している配列を渡しませんが。

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

関連する問題