我试图计算人口增长率,用r表示,它来自:
sum(e^(r*x)*lx*mx) = 1
Run Code Online (Sandbox Code Playgroud)
我知道x,lx和mx的值,但是应该迭代地获得r值以得到1的和.这是我写的(或尝试过的)代码,它不正确,因为它返回总和的值而不是r.我不知道哪里错了.我会感谢任何解决这个问题的线索.谢谢.
lx <- c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0)
mx <- c(1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0)
x <- c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17,
18, 19, 20, 21, 22)
radj = sum((exp(-r*x))*lx*mx)
for (radj in 0:1) {
repeat { radj <- sum((exp(-r*x))*lx*mx)
print(radj)
if (radj < 1) break ()} }
Run Code Online (Sandbox Code Playgroud)
试试这个:
root <- uniroot( f = function(r) sum(exp(r*x)*lx*mx) - 1, interval = c(-1, 0))
root$root
> [1] -0.8340894
Run Code Online (Sandbox Code Playgroud)