Как исправить прямолинейный участок логистической карты в R? - PullRequest
0 голосов
/ 18 января 2019

Логистическая карта (карта - это функция, которая принимает значение на любом временном шаге к значению на следующем временном шаге) - это модель, которая берет свое начало в прогнозировании размеров популяции животных. Он стал известен, в частности, благодаря особым случаям его параметризации, которые демонстрируют удивительное хаотическое поведение. Уравнение логистической карты

x i + 1 = rx i (1 - x i )

, где x i ∈ [0,1] - это соотношение значений текущего размера популяции к максимально возможному размеру в момент времени i, x i + 1 - это соотношение на следующем поколение и r - скорость движения, представляющая размножение и смерть животных. Для r <3,5 население в конечном итоге достигает стабильного размера или будет колебаться между набором фиксированных значений. Однако если r> 3,5, то система дестабилизируется и демонстрирует хаотическое поведение!

Это фон или контекст для следующего постановки задачи:

Генерирует набор точек S = {r, x}, где для каждого r ∈ [1.0, 4.1] с шагом 0,001025 будет последовательность значений x i для i = 0, ..., 16. Таким образом, для каждого значения r будет 17 x i значений. Используйте x 0 = 0,01. В зависимости от вашей реализации, функция rbind может оказаться полезной. Выполнение кода может занять несколько секунд, так как он сгенерирует много точек в S. Не более 10 строк кода R.

Правда, это лабораторное задание; однако я не ученик в классе. Я изучаю R, и я пытаюсь проработать онлайн-задания и найти решение самостоятельно. Я попытался создать набор точек для построения графика, и на основании ручной проверки нескольких точек набор выглядит точным.

for(j in c(0:3024)) {
    rm(x)
    x <- 1:17
    x[1] <- 0.01
    r <- 1 + (j * 0.001025)
    for(i in c(1:(17-1))) {
        x[i+1] <- r *x[i]  * (1 - x[i])
    }
    if (j==0) {
        binded <- cbind(r,x)
    } else {
        binded <- rbind(binded, cbind(r,x))
    }
}

Когда я вызываю plot(binded, pch='.') RStudio отображает результат в виде прямой линии. Поэтому я не уверен, правильно ли я использую график, или даже правильно ли я генерирую все точки. Если я уменьшу максимальное значение j до значения меньше 2000, вы увидите график; только когда значение j повторяется до 3024, вы строите прямую линию.

Ответы [ 2 ]

0 голосов
/ 18 января 2019

Если вы хотите построить всю матрицу, подумайте о том, чтобы вручную установить пределы оси Y на [0,1]. Таким образом, сюжет не будет растянут до -1e24.

В качестве дополнительного бонуса приведена версия в другой библиотеке для черчения, в которой точки окрашены в i.

plot

0 голосов
/ 18 января 2019

Я считаю, что ваш код верен, что происходит, когда время превышает 4, итерации часто нестабильны и собираются в -infinity. Это большое изменение в значении y сжимает масштаб и делает график похожим на плоскую линию.

Обрезка хвостовой части матрицы делает очень интересный сюжет:

plot(binded[-which(binded[,2]<0),], pch=".")

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...