我正在尝试编写一个三参数方法,该方法在一定间隔内逼近 gamma 函数。近似值应该是右端点黎曼和。
伽马函数由下式给出:
GAMMA(s) =
inf
INT x^(s-1) * exp(-x) dx
0
因此,区间 (0, m) 上的右端点黎曼和近似应该是:
GAMMA(s) ~
m
SUM ((m/n)*i)^(s-1) * exp(-(m/n)*i) * delta_x where delta_x = (m/n)
i=1
我的代码如下:
def gamma(x = 4.0, n = 100000, m = 2500)
array = *(1..n)
result = array.inject(0) {|sum, i| sum + ((((m/n)*i)**(x-1))*((2.7183)**(-(m/n)*i))*(m/n))}
end
puts gamma
代码应返回 3 的近似值!= 6,但它返回 0.0。有什么想法我可能会出错吗?