我计算一个计数变量的概率质量函数,归一化项是Σf(n)形式的无穷和,其中总和超过所有非负整数(0-infinity)。我在R中寻找一个近似于这个总和的函数。经过一些研究,我发现经典程序是近似的,如拉普拉斯方法的和或Euler-Maclaurin和公式,但我无法在R中找到函数。函数f(n)在一些n之后变为递减并收敛到0.函数是
f(n)= exp(an + b * sqrt(n) - ln(n!)),
其中a和b是一些常数。
答案 0 :(得分:2)
查找函数值的无限总和与在同一时间间隔内集成此函数相同。您可以使用函数integrate()
:
#Define the function
f <- function(x){ 1/(x**2)}
# First check on a segment
lower = 0.5
upper = 2
sum(f(seq(lower, upper, by=0.0001)))
# [1] 15002.13
# Integrate
integrate(f, lower, upper)
# 1.5 with absolute error < 3.8e-09
# For upper boundary to be infinity:
lower = 0.5
upper = Inf
integrate(f, lower, upper)
# 2 with absolute error < 8.4e-11
如果积分超过整数值,您可以尝试近似上边界并计算(尽管某些函数可能非常慢):
sum(f(1:(2^25)))
# [1] 1.644934
sum(f(1:(2^26))) # Check how much the value changes for even longer vector
# [1] 1.644934
将功能定义添加到问题后添加: 关于这个特定功能的一些注释:
f(n) = exp(an + b*sqrt(n) - ln(n!))
在这个函数中有一个术语ln(n!)
,R将很难估计,因为它需要计算N!对于一个非常大的数字。
因此,针对这种特殊情况的最佳方法是找到上下边界函数并将其用于近似。