嘿,我的模拟有问题。
我是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
如果没有最后两次放置,我没有收到错误,但是当我想计算数组ren1_sim和rent_sim的平均值时,我得到错误:
undefined method 'mean' for #<Array:0x2acf318> (NoMethodError)
你知道如何解决这个问题吗?
答案 0 :(得分:3)
您尝试在mean
上调用Array
,这不是Array
的方法。也许您打算使用Statsample::Vector
,这是Array
的Statsample的扩展名,并且确实有mean
?
ren1_sim = Statsample::Vector.new
ren2_sim = Statsample::Vector.new
您还可以在Array
个实例上致电to_vector
以获取Statsample::Vector
。
答案 1 :(得分: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
答案 2 :(得分:0)
查看这篇文章来计算数组的平均值