ななめ方向についてとRのmfrowなど

KABIRA2011-01-09

  • 拡散のシミュレーション
  • 2次元でのスケーリングがどうなるかを考えようとして
    • 今まで近傍8マスで計算してきた
    • 今回は斜め方向の移動をなくしてみる
  • ななめ方向をなくすと
    • x,yが独立になるようだ
    • x,yに相関がある場合、ななめの成分によって表現されなければいけない
  • もう一つ問題
    • スケーリングを考えていたときのように計算しようとしたら発散してしまった
    • 下のソースでは係数nuの値を仮定することにした
  • Rのmfrowについて
    • 並べてかくには:par(mfrow(c(2,1)))
    • layout関数があって:layout(mat)とmatrixで配置を指定できる
X<-30    #空間
Y<-30
T<-100     #時間
M<-100    #点

dx<-1
dy<-1
dt<-0.1  #時間間隔

Nx<-X/dx   #格子の数
Ny<-Y/dy
Nt<-T/dt   #計算する回数

U<-array(0,c(Nx,Ny,Nt))
U[5:10,5:10,1]<-1     #初期分布

#c1<-0.1
#c2<-0.1
#nux<-(1-c1^2)*dx^2/dt
#nuy<-(1-c2^2)*dy^2/dt
 
nux<-0.1
nuy<-0.4

for(t in 1:(T-1)){
for(i in 1:Nx){
for(j in 1:Ny){
kx<-length(max(1,i-1):min(Nx,i+1))
ky<-length(max(1,j-1):min(Ny,j+1))

dux<-nux/2*(sum(U[max(1,i-1):min(Nx,i+1),j,t])-kx*U[i,j,t])/(dx^2)*dt
duy<-nuy/2*(sum(U[i,max(1,j-1):min(Ny,j+1),t])-ky*U[i,j,t])/(dy^2)*dt
du<-dux+duy

U[i,j,t+1]<-U[i,j,t]+du
}
}
}
min(U)

M<-matrix(c(1,1,2,2,2,2),byrow="FALSE",nrow=2)
for(t in 1:T){
#filename<-paste(100+t,".png",sep="")
#png(filename)
par(mfrow=c(1,2))
layout(M)
persp(U[,,t],col=3,theta=20,phi=20,zlim=(c(0,1)))
image(U[,,t],col=topo.colors(10))
#dev.off()
#print(sum(U[,,t]))
}