我正在尝试在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给我一个解决方案吗?
提前致谢。
答案 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