R- 序列负数的每隔一个数字

R- Every Other Number of a Sequence Negative

我正在尝试生成一系列向量来计算大约。使用此公式给出的 Pi 值: Pi = 4 (1- (1/3) + (1/5) -(1/7)... 7 个学期。 我为分母值制作了一个序列

number.terms3c <-7
seq.vec3c <- seq(from = 1, by = 2 , length.out = number.terms3c)

然后将使用该向量来获得

的倒数
recip.vec3c <- (1/ seq.vec3c)

但为了对它们求和,我想我需要让所有其他值都为负(因此交替出现 + 和 - 值。

有没有我可以学习的简单代码?

您可以使用 rep 创建您想要乘以的值。

> recip.vec3c * rep(c(1,-1), length.out = number.terms3c)
[1]  1.00000000 -0.33333333  0.20000000 -0.14285714  0.11111111 -0.09090909
[7]  0.07692308

话虽如此……我只是用它来避免警告。如果你不是特别关心,你可以快速和松散地使用 R 所做的向量回收,只需乘以 c(1, -1).

> recip.vec3c * c(1, -1)
[1]  1.00000000 -0.33333333  0.20000000 -0.14285714  0.11111111 -0.09090909
[7]  0.07692308
Warning message:
In recip.vec3c * c(1, -1) :
  longer object length is not a multiple of shorter object length

请记住,您可以使用 1:n 在 R 中生成一个 n 数字序列,并且您可以通过 x %% 2 获得任何对 2 取模的数字。所以 1:n %% 2 给出了 1 0 1 0 1 0 的重复序列。因此,将其乘以 2 并减去 1 得到重复序列 1 -1 1 -1 1 -1...。因此,您可以使用 (2*(1:n %% 2) - 1) 作为分子。

同样,您的分母只是一系列奇数,由 1:n * 2 - 1

给出

这意味着您可以编写一个简单的算术函数来对这个展开式的前 n 项求和,如下所示:

pi_fracts <- function(n) sum(4*(2*(1:n %% 2) - 1)/(1:n * 2 - 1))

所以你可以做到

pi_fracts(7)
#> [1] 3.283738

甚至

pi_fracts(1000000)
#> [1] 3.141592