로지스틱 패밀리
정의 1
에 대해 를 로지스틱 맵logistic map이라고 하고 을 로지스틱 패밀리logistic Family라고 한다.
성질
- [1]:
- [2]:
- [3]: 이면 는 의 고정점이다.
- [4]: 이면
설명
로지스틱 모형은 인구의 증감 등의 여러가지 현상을 모델링하는데 유용하게 쓰일 수 있다. 인구라면 한 세대가 지날 때마다 로티스틱 맵 를 한 번 취하는 것으로 볼 수 있다. 일단은 이차함수이므로 초기값이 가 아니면 함숫값은 음수가 되지만 애초에 그 외엔 관심이 없고, 따라서 과 만 신경쓰면 된다.
수식적 이해
- 일 경우 는 유일한 싱크 를 갖는데, 맵을 취하면 모두 보다 작거나 같으므로 이들의 곱은 계속 작아져서 맵을 취할때마다 에 가까워질수밖에 없다. 인구로 생각해보자면 태어나는 것보다 죽는 게 많아서 결국 멸망으로 가는 경우다. 가령 작은 섬 안에 수컷 곰만 득실거리고 암컷 곰이 한 마리 뿐이라면, 그래도 다시 번성할 수도 있지만 그 가능성은 몹시 낮다. 이라는 조건은 거의 확실한 종말을 의미하고, 별로 궁금할 게 없다.
일 경우 의 최댓값이 이므로 맵을 취할때마다 점점 더 커져서 이 보다 커지는 순간이 올 수밖에 없다.
- 그러면 [1]에 의해 은 음수고, 그 후로는 음의 방향으로 발산할수밖에 없다. 이 역시 너무 당연하기 때문에 별로 궁금할 게 없다. 정리하자면 일 때만 어떤 의미가 있다.
- [2]와 [3], 그리고 싱크와 소스 판정법에 의해 이면 이므로 고정점 는 싱크가 되고, 따라서 (4) 를 얻을 수 있다. 이 경우 맵을 계속 취하다가 싱크랑 충분히 가까운 점이 걸리면 그 뒤로는 싱크로 끌려가고 값 역시 안정된다. 인구로 보면 어느 안정적인 평형 상태가 있어서 더 이상 성장하지도 않고 쇠퇴하지도 않는 것이다.
한편 가 보다 더 커지면 방정식 을 품으로써 피리어딕- 싱크를 찾을 수도 있다. 이 경우 맵을 취할때 마다 몇가지 수가 반복해서 나타나며, 랜덤한 타이밍에 멈춘다면 그들 중 하나를 얻게 될 것이다. 다만 이는 부근에서 성립하지 않아 정리로 만들어서 장담할 수는 없다.
바이퍼케이션
아래의 분기 그림Bifurcation Diagram을 살펴보자. 분기그림은 부터 다음의 순서에 따라 그려진다.
- Step 1. 를 아주 조금 증가시킨다.
- Step 2. 랜덤한 을 뽑는다.
- Step 3. 점 를 찍고 Step 1. 으로 돌아간다.
부분의 곡선은 초기값 가 무엇이든 를 백여번 정도 취하면 안정되고 일관된 값이 된다. 그 이후론 피리어딕- 싱크가 생겨 둘 중 하나로 수가 진동하게 되며, 빨간선을 넘어서면 피리어딕 -싱크가 존재해서 네 개의 값 사이에서 진동한다. 그러다가 어느 순간부터는 엄청나게 많은 경우의 수가 생겨버리는데, 이렇게 예측하기 어려워지는 움직임을 캐어릭 어트랙터chaotic Attractors라 한다
네츄럴 메져
한편 피리어딕 오빗들은 캐어릭하게 움직이더라도 특정 구역에 더 오래 머무를 수도 있다. 이는 초기값과 관계 없이 시스템 본연의 성질로써 초기의 값을 버리고 나면 ‘평균적인’ 분포를 계산할 수 있다. 이러한 성질을 가지는 확률밀도함수 를 네츄럴 인베리언트 덴서티(Natural Invariant Density) 라고 하며 수식적으로는 충분히 큰 에 대해 와 같이 표현할 수 있다.
실제로 로지스틱 맵 의 를 그려보면 위와 같다. 물론 은 캐어릭하기 때문에 정말로 이 어디 있는지까지는 예측할 수 없지만 그래도 과 근처에 있을 확률이 제일 높은 건 알 수 있다.
코드
아래는 바이퍼케이션 다이어그램을 그리는 코드를 R 로 작성한 것이다.
ga<-function(a,x,k=1) {
tmp <- a*x *(1 - x)
if(k==1) {return( tmp ) }
else {return(ga(a,tmp,k-1))}
}
result<-numeric(0)
for(a in seq(1,4.1,by=0.0001))
{
result<-rbind(result,c(a,ga(a,runif(1),101)))
}
win.graph(8,4)
plot(result,main='bifurcation diagram',xlim=c(1,4),ylim=c(0,1),pch=20, cex=0.1,
xlab='a',ylab='101번째 값')
abline(v=c(3,4),lty=2); abline(h=0)
abline(v=3.45,col='red')
아래는 네츄럴 인베리언트 덴서티의 개형을 그리는 코드를 R 로 작성한 것이다.
set.seed(150421)
logistic<-function(x) {4*x*(1-x)}
record<-runif(1)
for(i in 1:10^5) {record<-c(record,logistic(record[length(record)]))}
out<-hist(record[-(1:10000)])
win.graph(4,4); plot(x=seq(0,1,len=20),out$density,type='l',
xlab='x',ylab='ρ',main='Naturla Invariant Density ρ(x)')
Yorke. (1996). CHAOS: An Introduction to Dynamical Systems: p17~21. ↩︎