【问题标题】:Recurrence Relation for a Decreasing Exponential Has Increasing Values递减指数的递推关系具有递增值
【发布时间】:2013-03-23 03:14:23
【问题描述】:
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 ],f1=1,f2=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会完全改变图形的形状?

你能帮帮我吗?

提前谢谢你。

【问题讨论】:

  • 请注意,定义一个名为F 的对象不是一个好主意。如果没有另外定义,F 表示FALSE。
  • 感谢您的指点。我发誓下次要小心。

标签: r numerical-analysis recurrence


【解决方案1】:

这与 R 本身无关,与您的计算机表示的浮点值有关。

递归关系就像微分方程,问题分为两部分 - 关系和初始条件。改变初始条件,你就有不同的解决方案。

注意初始条件F[1] &lt;- 1; F[2] &lt;- 3,解是3^(x-1)(没有证明,但很容易验证)。一个递增的指数函数。

接下来,请注意元素之间的比率(此处还可以查看H 的中间值):

H <- tail(F, -1) / head(F, -1)
c(head(H, 1), tail(H, 1))
## [1] 0.3333333 3.0000000

您正在解决方案 f(x) = 3^(1-x) 和 f(x) = 3^(x-k) 之间转换(对于某些常数 k - 这里不是 1,但计算毫无意义完全正确)。

原因是当你减去 F[k-2] 时,算术是不精确的,所以你在每个阶段没有减去足够的量,就好像你有一个更高的初始条件来获得精确解那个阶段。

给出F的前N个点是有效的,然后在那个阶段用递推关系求解。这给出了一系列功能。这就是数值计算时会发生的情况 - 在每次计算中,它是一组不同的初始条件。

您实际上是在计算 f(x) = (10/3)f(x-1) - f(x-2) + e(f(x-2)) 的解,其中 e(x) >所有 x 都为 0(并且表示在减法中从末尾脱落的位)。

【讨论】:

  • @Choijaeyoung 请查看编辑后的版本。我已经解决了你的问题。
  • 非常感谢您的善意指导。谢谢!
  • @Choijaeyoung 如果这回答了您的问题,请单击复选标记。另外,你应该选择一个回答这个问题:stackoverflow.com/questions/15369961/…
猜你喜欢
  • 1970-01-01
  • 2022-11-26
  • 1970-01-01
  • 2018-10-11
  • 2021-03-04
  • 1970-01-01
  • 2012-01-02
  • 2012-09-09
  • 2012-04-29
相关资源
最近更新 更多