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] =(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。
如果我增加从35分配给“N”到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 0001 * 2 ^( - 52)(有52个零)的数量分配为更大的递归关系的逆数。
但是,我不知道我的假设是否属实。即使我的假设是正确的,为什么R分配非常小的数目为更大的数字,只有在“递归关系”而不是像3 ^(n-1)这样的一般函数? 此外,在“n = 50”的情况下,R为什么完全改变图形的形状?
你能帮我吗?
预先感谢您。
请注意,定义名为'F'的对象不是一个好主意。如果没有另外定义,“F”表示“FALSE”。 – 2013-03-24 00:20:18
谢谢您的指示。我发誓下次要谨慎。 – Choijaeyoung 2013-03-24 05:19:17