我想找到内部收益率(IRR),基本上是使我的 NPV 函数变为零的“利率”,使用该optim
函数。
我当前的 NPV 函数代码(有效)是:
npv <- function(rate, cf){
r_v <- rep (rate,length (cf))
t_v <- as.numeric (seq(1:length (cf)))
pv <- cf * exp (-t_v*r_v)
sum (pv)
}
我尝试使用以下optim
功能:
InternalRateReturn <- optim(c(0,1), npv, cf = testcf2, gr = NULL, method = "L-BFGS-B", lower = -Inf, upper = Inf,control=list(), hessian = FALSE)
但它没有返回正确的答案,InternalRateReturn$par
而不是使用uniroot
下面的方法。
请问如何修改这段代码(重申一下,我只想优化函数中的速率,使npv
函数npv
等于零)?
使用的IRR函数uniroot
如下:
irr1 <- function(cf) {
uniroot(npv, c(0, 1), cf=cf)$root
}