如果我写这个:
f <- function(lambda, a_0, n) {
a <- numeric(n)
a[1] <- a_0
for (i in 2:n) {
a[i] <- lambda * a[i-1] * (1 - a[i-1])
}
return(a)
}
f(4, 0.75, 100)
然后生成一个仅包含数字 0.75 的列表。这是预料之中的。
但是,如果我写:
lambda <- 4
n <- 100
a_0_values <- seq(0.05, 0.95, by = 0.05)
df <- data.frame(matrix(ncol = length(a_0_values), nrow = n))
for (i in 1:length(a_0_values)) {
df[, i] <- f(lambda, a_0_values[i], n)
}
df[,15]
然后生成一个列表,最初包含 0.75,但过了一会儿,它开始变化(请参阅我在最后提供的表格)。
我尝试通过写入
f(4, 0.75, 1000000)
来增加生成列表的长度,它仍然按预期工作。它只产生了 0.75,正如它应该的那样。当然,即使它在某个点之后确实发生了变化,它仍然无法解释为什么 f(4, 0.75, 100)
和 df[,15]
会产生不同的结果。
这是为什么?
df[,15]
[1] 7.500000e-01 7.500000e-01 7.500000e-01 7.500000e-01 7.500000e-01 7.500000e-01
[7] 7.500000e-01 7.500000e-01 7.500000e-01 7.500000e-01 7.500000e-01 7.500000e-01
[13] 7.500000e-01 7.500000e-01 7.500000e-01 7.500000e-01 7.500000e-01 7.500000e-01
[19] 7.500000e-01 7.500000e-01 7.500000e-01 7.500000e-01 7.500000e-01 7.500000e-01
[25] 7.500000e-01 7.500000e-01 7.500000e-01 7.500000e-01 7.500000e-01 7.499999e-01
[31] 7.500001e-01 7.499998e-01 7.500005e-01 7.499990e-01 7.500019e-01 7.499962e-01
[37] 7.500076e-01 7.499847e-01 7.500305e-01 7.499390e-01 7.501221e-01 7.497558e-01
[43] 7.504881e-01 7.490228e-01 7.519506e-01 7.460836e-01 7.577714e-01 7.342156e-01
[49] 7.805721e-01 6.851171e-01 8.629266e-01 4.731372e-01 9.971136e-01 1.151244e-02
[55] 4.551962e-02 1.737903e-01 5.743490e-01 9.778889e-01 8.648884e-02 3.160341e-01
[61] 8.646262e-01 4.681910e-01 9.959528e-01 1.612345e-02 6.345395e-02 2.377102e-01
[67] 7.248162e-01 7.978306e-01 6.451876e-01 9.156822e-01 3.088332e-01 8.538210e-01
[73] 4.992429e-01 9.999977e-01 9.170494e-06 3.668164e-05 1.467212e-04 5.867986e-04
[79] 2.345817e-03 9.361256e-03 3.709449e-02 1.428740e-01 4.898440e-01 9.995874e-01
[85] 1.649634e-03 6.587650e-03 2.617701e-02 1.019671e-01 3.662792e-01 9.284750e-01
[91] 2.656366e-01 7.802952e-01 6.857385e-01 8.620049e-01 4.758098e-01 9.976593e-01
[97] 9.340721e-03 3.701389e-02 1.425754e-01 4.889907e-01
我认为这可能是
a_0
值的精度,因为你可以看到
> a_0_values[15] - 0.75
[1] 1.110223e-16
a_0_values[15]
应用于 f
> f(lambda, a_0_values[15], n)
[1] 7.500000e-01 7.500000e-01 7.500000e-01 7.500000e-01 7.500000e-01
[6] 7.500000e-01 7.500000e-01 7.500000e-01 7.500000e-01 7.500000e-01
[11] 7.500000e-01 7.500000e-01 7.500000e-01 7.500000e-01 7.500000e-01
[16] 7.500000e-01 7.500000e-01 7.500000e-01 7.500000e-01 7.500000e-01
[21] 7.500000e-01 7.500000e-01 7.500000e-01 7.500000e-01 7.500000e-01
[26] 7.500000e-01 7.500000e-01 7.500000e-01 7.500000e-01 7.499999e-01
[31] 7.500001e-01 7.499998e-01 7.500005e-01 7.499990e-01 7.500019e-01
[36] 7.499962e-01 7.500076e-01 7.499847e-01 7.500305e-01 7.499390e-01
[41] 7.501221e-01 7.497558e-01 7.504881e-01 7.490228e-01 7.519506e-01
[46] 7.460836e-01 7.577714e-01 7.342156e-01 7.805721e-01 6.851171e-01
[51] 8.629266e-01 4.731372e-01 9.971136e-01 1.151244e-02 4.551962e-02
[56] 1.737903e-01 5.743490e-01 9.778889e-01 8.648884e-02 3.160341e-01
[61] 8.646262e-01 4.681910e-01 9.959528e-01 1.612345e-02 6.345395e-02
[66] 2.377102e-01 7.248162e-01 7.978306e-01 6.451876e-01 9.156822e-01
[71] 3.088332e-01 8.538210e-01 4.992429e-01 9.999977e-01 9.170494e-06
[76] 3.668164e-05 1.467212e-04 5.867986e-04 2.345817e-03 9.361256e-03
[81] 3.709449e-02 1.428740e-01 4.898440e-01 9.995874e-01 1.649634e-03
[86] 6.587650e-03 2.617701e-02 1.019671e-01 3.662792e-01 9.284750e-01
[91] 2.656366e-01 7.802952e-01 6.857385e-01 8.620049e-01 4.758098e-01
[96] 9.976593e-01 9.340721e-03 3.701389e-02 1.425754e-01 4.889907e-01
2
位数> f(lambda, round(a_0_values[15], 2), n)
[1] 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75
[16] 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75
[31] 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75
[46] 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75
[61] 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75
[76] 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75
[91] 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75 0.75