计算几何级数时得到错误答案

Getting wrong answer when calculating geometric series

我正在尝试使用 tidyverse accumulate 函数来计算两个几何级数。

这个几何级数的结果应该是 1871.445

我尝试使用下面的代码行得到答案 1200

sum(accumulate(seq(from=0, to=4, by=1/12), .init = 400, ~ .x/(1 + 0.5)))

我也在尝试计算这个几何级数:

这应该给出 4.678613 的结果,但我的代码行给出了 3

sum(accumulate(seq(from=0, to=4, by=1/12), .init = 1, ~ .x*(1/(1 + 0.5))))

这里不需要accumulate,它的使用不会增加任何有价值的东西;您正在执行的累积只是 sum — 所以使用(仅)sum:

t = seq(0, 5 - 1)
sum(400 / (1.5 ^ (t / 12)))

可以使用accumulate(或者更确切地说,它的兄弟reduce!)而不是sum,但是生成的代码会更复杂,没有额外的好处。但是,即使您使用 reduce,您对等式的转录也是错误的。

accumulate 当上一次迭代的结果用于任何序列的下一项时使用。 此外,R的优点在于它的向量化操作。所以你可以直接做。我还添加了 accumulate 方法,但您可能会注意到 参数 .x 从未使用过,因此当快捷方式可用时,它等效于走更长的路线视线.

# 1st series
400/(1.5^((0:4)/12))
#> [1] 400.0000 386.7103 373.8621 361.4408 349.4322

#accumualate style (though redundant)
purrr::accumulate(0:4, .init = 0, ~400/(1.5 ^(.y/12)))[-1]
#> [1] 400.0000 386.7103 373.8621 361.4408 349.4322

# its sum
sum(400/(1.5^((0:4)/12)))
#> [1] 1871.445

#2nd series
(1/(1 + 0.5))^((0:4)/12)
#> [1] 1.0000000 0.9667757 0.9346553 0.9036020 0.8735805

#accumulate style
purrr::accumulate(0:4, .init = 0, ~(1/(1 + 0.5))^(.y/12))[-1]
#> [1] 1.0000000 0.9667757 0.9346553 0.9036020 0.8735805

#sum
sum((1/(1 + 0.5))^((0:4)/12))
#> [1] 4.678613

reprex package (v2.0.0)

于 2021-06-17 创建