R- Любое другое число отрицательной последовательности - PullRequest
1 голос
/ 17 февраля 2020

Я пытаюсь сгенерировать серию векторов для расчета прибл. значение 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)

Но для того, чтобы их суммировать, я подумал, что нужно, чтобы каждое другое значение было отрицательным (следовательно, чередование значений + и -.

Есть ли простой код, который я могу научиться делать это?

Ответы [ 2 ]

3 голосов
/ 17 февраля 2020

Вы можете использовать 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
0 голосов
/ 18 февраля 2020

Помните, что вы можете сгенерировать последовательность из n чисел в R с помощью 1:n, и вы можете получить любое число по модулю 2, выполнив x %% 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

Это означает, что вы можете написать простое арифметическое значение c функция для суммирования первых 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
...