递归和,使用泊松分布

时间:2016-05-09 09:52:41

标签: r recursion infinite-loop

我正在尝试在R中构建递归函数,

H(x,t) = \sum\limits_{d=0}^{x} (Pr(D=d)*(h*(x-d)+H(x-d,t-1))) 
+ \sum\limits_{d=x+1}^{\infty} (Pr(D=d)*(p(*d-x)+ H(0,t-1)))

其中h,p是一些常数,D~Po(l)和H(x,0)= 0,这是我到目前为止所做的代码,给出了一个明显的错误,但我看不到固定。代码

p<- 1000 # Unit penalty cost for lost sales
h<- 10 # Unit inventory holding cost pr. time unit
l<- 5 # Mean of D
H <- function(x,t){
  if(t==0)(return(0))
  fp <- 0
  sp <- 0
  for(d in 0:x){
    fp <- fp + dpois(x=d,l)*(h*(x-d)+H(x-d,t-1))
  }
  for(d in x+1:Inf){
    sp <- sp + dpois(x=d,l)*(p*(d-x)+H(0,t-1))
  }
  return(fp+sp)
}

当我运行时,错误是

Error in 1:Inf : result would be too long a vector

这看起来很明显,所以问题是,有人能指出我重新定义问题的方向,所以我可以让R给我一个解决方案吗?

提前致谢。

1 个答案:

答案 0 :(得分:0)

x+1:Inf开始不起作用。既然你正在使用poisson的pdf,你可以添加一个上限(为什么?考虑pdf的形状以及右边的值有多小):

for(d in x+1:100)

当为H(20,2)运行时

[1] 252.806

将其增加到

for(d in x+1:500)

然后H(20,2)也给出了

[1] 252.806