如何在R中固定后勤图的直线图?

时间:2019-01-18 13:54:58

标签: r plot

后勤图(图是一种功能,可将其在任何时间步长的值都变为下一个时间步长的值)是一个模型,其模型源于动物种群大小的预测。它之所以闻名,部分原因是其参数化的特殊情况显示出令人惊讶的混沌行为。逻辑映射方程为

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为增量,对于i = 0,将有一个x i 值序列,...,16。因此,对于每个r值,将有17个x i 值。使用x 0 = 0.01。根据您的实现,您可能会发现rbind函数很有用。该代码可能需要花费几秒钟的时间才能运行,因为它将在S中生成很多点。R代码不超过10行。

诚然,这是一个实验作业;但是,我不是班上的学生。我正在学习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 :(得分:2)

我相信您的代码是正确的,当时间超过4时,发生的事情是迭代非常不稳定,并且将变为-infinity。 y值的这种大变化正在压缩比例并使图看起来像一条平线。

切出矩阵的尾部将得出一个非常有趣的图:

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

enter image description here

答案 1 :(得分:1)

如果要绘制整个矩阵,请考虑手动将y轴限制设置为[0,1]。这样,剧情就不会延伸到-1e24

作为一个额外的奖励,这是另一个绘图库中的一个版本,其点用i着色。

plot