推移確率の周期性

KABIRA2010-12-23

  • こちらで解を探すときに振動してしまった
  • ノイズをいれると振動しなくなった
    • この振動の原因は何か
    • 振動しているとき、特定の状態を行ったり来たりしている
    • 一方ランダムな要素を入れたら行ったり来たりしなくなる
  • なので推移確率行列を使って、特定の場所を行ったり来たりするようにするようにすれば振動するはず
    • ランダムは排除した推移行列をつくればいい
    • 推移確率行列Mは各行、各列にひとつだけ1をおいてあとは0
    • この推移は並び替えているのと同じこと
  • 分布vが周期的に変化している
N<-10
T<-30   #時間経過
A<-matrix(0,N,T)      #計算結果がAに入る
M<-matrix(0,N,N)     #Mが推移確率行列     0,1のみでできている
J<-c(sample(1:N,N,replace="FALSE")) 
for ( i in 1:N){
M[i,J[i]]<-1
}
#M

v<-c(runif(N))    #この分布の推移を計算する

A[,1]<-v
for(t in 1:(T-1)){
A[,t+1]<-M%*%A[,t]
}

#同じことになるがパッケージexpmを使う
#library(expm)
#for(t in 1:T){
#A[,t]<-M%^%t%*%v
#}

persp(A,col=3,theta=30,phi=45,xlab="elemant",ylab="time",zlab="value")

  • 上で作った推移確率行列Mのもつ周期kを考える
    • M^k単位行列となる
    • ムービーはM^nを計算していって、単位行列になったら少しストップしたもの
    • 周期的に繰り返している
B<-M
k<-1
while( min(B -  diag(N)) != 0 ){
B<-B%*%M
k<-k+1
}
print(k)
#library(expm)
#M%^%k      #これが単位行列になる