Нахождение значения бесконечных сумм в r - PullRequest
2 голосов
/ 04 мая 2020

Я очень плохо знаком с r и программированием, поэтому, пожалуйста, оставайтесь со мной:)

Я пытаюсь использовать итерации, чтобы найти значение бесконечных итераций с точностью до четвертого знака после запятой. Т.е. где 4-й знак после запятой не меняется. поэтому 1.4223, где 3 больше не меняется, поэтому результат с 3 десятичным разрядом равен 1.422.

enter image description here

Ссылка выше показывает пример аналогичной проблемы с которым я столкнулся. У меня вопрос, как мне создать for-l oop, который уходит в бесконечность и найти значение, при котором четвертая десятичная точка перестает изменяться?

Я пытался использовать циклы while, но я не уверен, как остановить это просто зацикливание навсегда. Мне нужно заявление if, как показано ниже:

result <- 0
i <- 1
d <- 1e-4
while(TRUE)
{
    result <- result + (1/(i^2))
    if(abs(result) < d)
    {
        break
    }
    i <- i + 1

}
result

1 Ответ

5 голосов
/ 04 мая 2020

Вот пример: чтобы сделать бесконечное l oop, используйте while(TRUE) {}, и, как вы предложили, используйте предложение if и break для остановки при необходимости.

## example equation shown
## fun <- function(x,n) {
##     (x-1)^(2*n)/(n*(2*n-1))
## }
## do it for f(x)=1/x^2 instead
## doesn't have any x-dependence, but leave it in anyway
fun <- function(x,n) {
     1/n^2
}

n <- 1
## x <- 0.6
tol <- 1e-4
ans <- 0
while (TRUE) {
   next_term <- fun(x,n)
   ans <- ans + next_term
   if (abs(next_term)<tol) break
   n <- n+1
}

Когда запустить это дает ans=1.635082, n=101.

  • R также имеет редко используемое ключевое слово repeat { }, но while(TRUE), вероятно, будет понятнее читателям
  • есть и другие эффективные способы сделать это (т. е. вычислить числитель, умножая его на (x-1)^2 каждый раз)
  • , как правило, неплохо также проверить максимальное количество итераций, чтобы не создавать действительно бесконечный l oop если ваша серия не сходится или если в вашем коде есть ошибка
  • Я не решил вашу точную проблему (выбрал меньшее значение tol), но вы должны быть в состоянии изменить это, чтобы получить ответ
  • , как обсуждалось в ответе на ваш предыдущий вопрос , это не гарантируется, но в целом должно быть в порядке; Вы можете проверить (у меня нет), чтобы быть уверенным, что конкретная серия, которую вы хотите оценить, имеет правильную конвергенцию
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...