1

シミュレーションに問題があります。

私はRuby-Starterであり、コードの何が問題になっているのかわかりません。これは、シミュレーションの一部にすぎません。

def mean
 mean = self.reduce(:+)/self.length.to_f
 return mean
end

def randn
  begin 
  rg1 = (rand*2)-1 
  rg2 = (rand*2)-1 
  q = rg1**2 + rg2**2
  end while (q == 0 || q > 1)
  p = Math.sqrt((-2*Math.log(q))/q)

  rn1 = rg1 * p
  rn2 = rg2 * p
  return rn1, rn2
 end

monte_carlo = 10
ren1_sim = Array.new
ren2_sim = Array.new

monte_carlo.times {
 (1..20).each{ |i|
 (1..250).each { |j|
  r = randn() 
    ren1= * Math.exp(mu_ren1 + sigma_ren1 * r[0]) 
    # ren1 is an array with prices, mu_ren1 and sigma_ren1 are individual values

    ren2= * Math.exp(mu_ren2 + chol_21 * r[0] + chol_22 * r[1])
    # chol_21 and chol_22 are also individual values

     ren1_sim.push(ren1)
     ren2_sim.push(ren2)
   } 
  }
 }
 puts ren1_sim.mean
 puts ren2_sim.mean

最後の2つのプットがないとエラーは発生しませんが、配列ren1_simとrent_simの平均を計算したい場合、エラーが発生します。

 undefined method 'mean' for #<Array:0x2acf318> (NoMethodError)

それを修正する方法を知っていますか?

4

3 に答える 3

3

のメソッドではない、meanを呼び出そうとしています。おそらく、Statsampleのの拡張であるを使用するつもりでしたが、持っていますか?ArrayArrayStatsample::VectorArraymean

ren1_sim = Statsample::Vector.new
ren2_sim = Statsample::Vector.new

インスタンスを呼び出しto_vectorてを取得することもできます。ArrayStatsample::Vector

于 2012-04-15T00:23:02.837 に答える
2

ファイルの先頭にメソッドを定義しましたmeanが、それは最上位のオブジェクトにメソッドを作成するだけであり、個々の配列でそれを呼び出そうとしています。そのコードを次のように変更できます

def mean(array)
  array.reduce(:+)/array.length.to_f
end

後でそれの使用法をに変更しますmean(ren1_sim)

または、メソッドを配列に追加するようにコードを変更します。

class Array
  def mean
    self.reduce(:+)/self.length.to_f
  end
end
于 2012-04-15T10:20:50.933 に答える
0

配列の平均を計算するには、この投稿をご覧ください

Ruby配列から平均を作成するにはどうすればよいですか?

于 2012-04-15T00:03:25.817 に答える