Вложено для циклов со связанными индексами - PullRequest
0 голосов
/ 26 марта 2020

Я только что получил простой вопрос для вас. Это касается вложенного для кода цикла в R. Я получил такой алгоритм для разработки: Equation 1

Equation 2

N = 180; k = 1 ... N; l = 1 ... k; alpha = 1

Итак, я попытался это сделать для l oop, но это была катастрофа.

 N <- 180
nu <- 0
for (k in 1:N) {
     for (l in 1:k) {
        nu<- nu + 1/(N-l+1)
   }
 E<- N*nu
print(E)
}

Я получил 180 значений E, но все они неверны. Например, для k = 10 я ожидаю получить nu = 0,057 и связанный E [10] = 10,26. В то время как сценарий возвращает мне E [10] = 55,94.

Я действительно не могу понять, почему.

Спасибо.

1 Ответ

3 голосов
/ 26 марта 2020

Вы продолжаете суммировать по ну, вот решение проблемы. При вычислении нового E сначала для l oop просто снова обнуляем ноль.

Это возвращает ожидаемый результат:

N <- 180
nu <- 0

for (k in 1:N) {
  nu <- 0
  for (l in 1:k) {
    nu <- nu + 1/(N-l+1)
  }
  E<- N*nu
  print(E)
}

И ниже приведено несколько лучшее решение, использующее функцию суммирования вместо цикла.

### Functions
vk <- function(k, alpha, N) {
   return(sum(1 / (N - 1:k + 1)^alpha))
}

E <- function(N, k) {
  return(N * vk(k, 1, N))
}

N <- 180 
k <- N 

result.vec <- rep(NA, k) 
for (i in 1:k) {
  result.vec[i] <- E(N, i)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...