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
我正在尝试生成一系列向量来计算大约。使用此公式给出的 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