n <- 35
F <- rep(0,n)
N <- rep(0,n)
F[1] <- 1
F[2] <- 1/3
for (k in 3:n) F[k] <- (10/3)*F[k-1]- F[k-2]
F
N <- seq(from=1, to=n, by=1)
如果您不熟悉求解线性递推方程,那完全没有关系。无论如何,我们可以通过求解上述递推方程得到F[n]=3^(1-n)的结果,即F[n]=(10/3)F[n-1]-F[n-2 ],f 1 =1,f 2 =1/3。
为此,通过使用
plot (N, F,type="l")
我们可以期待“3^(1-n)”的图形,称为指数函数。
但是,输出与预期不同。与输出相比
curve(3^(1-x),0,35, add=TRUE, col='blue')
如您所知,3^(1-x) 是单调递减函数。尽管有预期,但我们只得到了在后期计算中增加的图形。
F[18]>F[19]
TRUE
F[19]>F[20]
FALSE
发生了什么?按照常识,“F[n]>F[n+1]”的所有输出都应该是 TRUE。
如果我将分配给“n”的数字从 35 增加到 50,
n <- 50
plot (N, F,type="l")
图形的形状变得非常奇怪。
我猜原因是基于“双精度二进制浮点”(http://en.wikipedia.org/wiki/Double_precision)。在我看来,R 将小于 0.0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0001 * 2^(-52) (有 52 个零)的数字分配为更大的数字,与递归关系相反。
但是,我不知道我的假设是否正确。即使我的假设是正确的,为什么 R 将非常小的数字反向分配为更大的数字,仅在“递归关系”中而不是针对诸如 3^(n-1) 之类的一般函数?此外,在“n=50”的情况下,为什么 R 会完全改变图形的形状?
你可以帮帮我吗?
先感谢您。