誤差の大きさ
- 対称性の破れた構造を作り出すための条件を探す
- 初期値に 0,001 ほどの揺らぎを与えると構造が出現するというような値が出た
- 逆にこれ以下の誤差でははじめにいったような構造がでないことを確かめる
- しかし、シミュレーション幅 dt を小さくすると、必要な揺らぎの量も小さくなっていった
- というわけで
- こちら の記事で揺らぎをあたえてもリミットサイクルになっていたのはシミュレーション幅が大きかったためということが考えられる
- 以下のソースは のときにどれくらいの揺らぎ を与える必要があるのかを試したときのもの
- 赤の点はリミットサイクルになるもの
- 黒の点は対称性の破れた構造におちつくもの
A<-2 B<-10 X0<-A Y0<-B/A dt<-0.001 T<-1 Nt<-T/dt M1<-M2<-matrix(0,3,Nt) D1<-0.1 D2<-1 f1<-function(X1,X2){ y<- A+X1[1]^2*X1[2]-B*X1[1]-X1[1]+D1*(X2[1]-X1[1]) return(y) } f2<-function(X1,X2){ y<- B*X1[1]-X1[1]^2*X1[2]+D2*(X2[2]-X1[2]) return(y) } # 調べる回数 N<-100 R1<-R2<-c() for(n in 1:N){ # 初期条件 r1<-runif(1)*0.001 r2<-runif(1)*0.001 X1<-c(X0,Y0+r1) X2<-c(X0,Y0+r2) for(nt in 1:Nt){ # M1[,nt]<-c(X1,nt) # M2[,nt]<-c(X2,nt) dX1<-c(f1(X1,X2),f2(X1,X2))*dt dX2<-c(f1(X2,X1),f2(X2,X1))*dt X1<-X1+dX1 X2<-X2+dX2 } # range<-c(min(M1[1:2,],M2[1:2,]),max(M1[1:2,],M2[1:2,])) # plot(M1[1,],type="l",col=2,ylim=range) # par(new=TRUE) # plot(M1[2,],type="l",col=2,ylim=range) # par(new=TRUE) # plot(M2[1,],type="l",col=4,ylim=range) # par(new=TRUE) # plot(M2[2,],type="l",col=4,ylim=range) # 最後の値の誤差で判定する if(abs(X1[1]-X2[1])<0.01){ # print("limt cycle") R1<-cbind(R1,c(r1,r2)) # リミットサイクル }else{ R2<-cbind(R2,c(r1,r2)) # 散逸構造 } } plot(t(cbind(R1,R2)),col=c(rep(2,max(dim(R1)[2],0)),rep(1,max(dim(R2)[2],0))),cex=0.5,xlab="r1",ylab="r2")
- 必要な揺らぎの大きさを計算してみる
> print(min(abs(R2[1,]-R2[2,]))) [1] 0.0001010724 > print(max(abs(R1[1,]-R1[2,]))) [1] 0.0001017559 > > print(max(abs(R2[1,]-R2[2,]))) [1] 0.0009873917 > print(min(abs(R1[1,]-R1[2,]))) [1] 9.466894e-10