Что не так с моим циклом R for, который суммирует ряд? - PullRequest
0 голосов
/ 11 сентября 2018

Вот моя функция, которая делает цикл:

answer = function(a,n) {
  for (k in 0:n) {
    x =+ (a^k)/factorial(k)
    }
  return(x)
  }

answer(1,2) должно возвращать 2,5, поскольку это расчетное значение

1 ^ 0/0! + 1 ^ 1/1! + 1 ^ 2/2! = 1 + 1 + 0,5 = 2,5

Но я получаю

answer(1,2)
#[1] 0.5

Похоже, что он не накапливает все три условия и просто хранит новейшие значения каждый раз. += не работает, поэтому я использовал =+, но это все еще не правильно. Спасибо.

1 Ответ

0 голосов
/ 11 сентября 2018
answer = function(a,n) {
  x <- 0  ## initialize the accumulator
  for (k in 0:n) {
    x <- x + (a^k)/factorial(k)  ## note how to accumulate value in R
    }
    return(x)
  }

answer(1, 2)
#[1] 2.5

Существует «векторизованное» решение:

answer = function(a,n) {
  x <- a ^ (0:n) / factorial(0:n)
  return(sum(x))
  }

В этом случае вам не нужно ничего инициализировать. R выделит память за этим <- и sum.

Вы используете расширение Тейлора для приближения exp(a). См. этот вопрос и ответ по теме. Вы можете обратить особое внимание на проблему «числовой конвергенции», упомянутую в моем ответе.

...