#r #recurrence
Вопрос:
Я хорошо знаю, что R был разработан для статистики, а не для рекуррентных отношений, однако было бы здорово иметь возможность это сделать.
Я изучаю более высокие приложения по математике, и мне предоставляется выбор между использованием Excel или R для сдачи экзамена. Я использую R для остальной части экзамена, поэтому я бы предпочел иметь возможность решать рекуррентное отношение, используя его, чтобы избежать необходимости переключаться между ними.
Вот несколько примеров вопросов:
Во всех этих вопросах я пытаюсь найти точку, в которой они сходятся. Я предполагаю, что для этого потребуется рекурсивная функция, но я не слишком уверен, куда идти дальше.
Любая помощь будет оценена.
Комментарии:
1. Да, я думаю, вы найдете множество руководств, если будете искать «r recursion», например geeksforgeeks.org/recursive-functions-in-r-programming Мнения могут быть разными, и этот форум, как правило, уклоняется от вопросов, основанных на мнениях. Полностью выполнимо в Excel или R, зависит от ваших предпочтений.
Ответ №1:
Этот тип вопросов может быть обработан с помощью простого цикла в R. Например, первый вопрос можно решить, написав следующую функцию:
waste_simulation <- function(initial_value)
{
units <-initial_value
units <- c(units, units[1] * 0.6 50)
while(units[length(units)] != units[length(units) - 1]) {
units <- c(units, units[length(units)] * 0.6 50)
}
return(units)
}
Это позволяет вам протестировать каждое начальное начальное значение:
waste_simulation(100)
#> [1] 100.0000 110.0000 116.0000 119.6000 121.7600 123.0560 123.8336 124.3002
#> [9] 124.5801 124.7481 124.8488 124.9093 124.9456 124.9673 124.9804 124.9882
#> [17] 124.9929 124.9958 124.9975 124.9985 124.9991 124.9995 124.9997 124.9998
#> [25] 124.9999 124.9999 125.0000 125.0000 125.0000 125.0000 125.0000 125.0000
#> [33] 125.0000 125.0000 125.0000 125.0000 125.0000 125.0000 125.0000 125.0000
#> [41] 125.0000 125.0000 125.0000 125.0000 125.0000 125.0000 125.0000 125.0000
#> [49] 125.0000 125.0000 125.0000 125.0000 125.0000 125.0000 125.0000 125.0000
#> [57] 125.0000 125.0000 125.0000 125.0000 125.0000 125.0000 125.0000 125.0000
#> [65] 125.0000 125.0000 125.0000 125.0000 125.0000 125.0000 125.0000
waste_simulation(200)
#> [1] 200.0000 170.0000 152.0000 141.2000 134.7200 130.8320 128.4992 127.0995
#> [9] 126.2597 125.7558 125.4535 125.2721 125.1633 125.0980 125.0588 125.0353
#> [17] 125.0212 125.0127 125.0076 125.0046 125.0027 125.0016 125.0010 125.0006
#> [25] 125.0004 125.0002 125.0001 125.0001 125.0000 125.0000 125.0000 125.0000
#> [33] 125.0000 125.0000 125.0000 125.0000 125.0000 125.0000 125.0000 125.0000
#> [41] 125.0000 125.0000 125.0000 125.0000 125.0000 125.0000 125.0000 125.0000
#> [49] 125.0000 125.0000 125.0000 125.0000 125.0000 125.0000 125.0000 125.0000
#> [57] 125.0000 125.0000 125.0000 125.0000 125.0000 125.0000 125.0000 125.0000
#> [65] 125.0000 125.0000 125.0000 125.0000 125.0000 125.0000 125.0000 125.0000
#> [73] 125.0000
waste_simulation(125)
#> [1] 125 125
Мы можем видеть, что во всех 3 случаях значение сходится к 125 (что равно 50/0.4).
Создано 2021-11-02 пакетом reprex (v2.0.0)
Комментарии:
1. Не лучше ли было бы определить допуск
Tol <- abs(units[length(units)]-units[length(units)-1])
и максимальное количество итераций для выполнения этой задачи?2. @Diego да — справедливое замечание — и изначально я так и сделал. Я удалил их, чтобы попытаться упростить код по дидактическим соображениям.