我想构造一个长度为50的以下类型的序列: XN + 1 = 4 * XN *(1-X N)。有关您的信息,这是r = 4的Logistic Map。在Logistic Map的参数r = 4且初始状态在(0,1)的情况下,吸引子也是区间(0,1),概率测量对应于β分布,参数a = 0.5和b = 0.5。 (Logistic映射是2阶的多项式映射(等效,递归关系),通常被引用作为复杂的混沌行为如何从非常简单的非线性动力学方程中产生的典型例子)。我怎么能在R?中做到这一点?
答案 0 :(得分:0)
这不是一个R
问题,是吗?更基本的编程。无论如何,您可能需要一个累加器和一个值来处理。
values <- 0.2 ## this accumulates as a vector, starting with 0.2
xn <- values ## xn gets the first value
for (it in 2:50) { ## start the loop from the second iteration
xn <- 4L*xn*(1L-xn) ## perform the sequence function
values <- c(values, xn) ## add the new value to the vector
}
values
# [1] 0.2000000000 0.6400000000 0.9216000000 0.2890137600 0.8219392261 0.5854205387 0.9708133262 0.1133392473 0.4019738493 0.9615634951 0 .1478365599 0.5039236459
# [13] 0.9999384200 0.0002463048 0.0009849765 0.0039360251 0.0156821314 0.0617448085 0.2317295484 0.7121238592 0.8200138734 0.5903644834 0 .9673370405 0.1263843622
# [25] 0.4416454208 0.9863789723 0.0537419811 0.2034151221 0.6481496409 0.9122067356 0.3203424285 0.8708926280 0.4497546341 0.9899016128 0 .0399856390 0.1535471506
# [37] 0.5198816927 0.9984188732 0.0063145074 0.0250985376 0.0978744041 0.3531800204 0.9137755744 0.3151590962 0.8633353611 0.4719496615 0 .9968527140 0.0125495222
# [49] 0.0495681269 0.1884445109
答案 1 :(得分:0)
网上有一些现成的解决方案。我引用了mage's blog的一般解决方案,您可以在其中找到更详细的说明。
logistic.map <- function(r, x, N, M){
## r: bifurcation parameter
## x: initial value
## N: number of iteration
## M: number of iteration points to be returned
z <- 1:N
z[1] <- x
for(i in c(1:(N-1))){
z[i+1] <- r *z[i] * (1 - z[i])
}
## Return the last M iterations
z[c((N-M):N)]
}
对于OP示例:
logistic.map(4,0.2,50,49)