- 昨日の記事で正の変量に「質量保存の法則」が成り立つときの偏微分方程式が定める曲線とその上の運動について書いた(こちら)
- 今日は、場合分けに対応する偏微分方程式の例を作成してみる
- :変量の数、次元
- を、単純にするために、と標準化する
- を領域と呼ぶことにする
- 領域内の点に向かって移動し、そこで静止する運動の例(以下、断らない限りは、例であるものとする)
library(rgl)
library(MCMCpack)
n<-5
p<-rdirichlet(1,rep(1,n))
Niter<-100
dt<-0.01
Nrep<-100
xssum<-NULL
col<-c()
for(rep in 1:Nrep){
xs<-matrix(0,Niter,n)
xs[1,]<-rdirichlet(1,rep(1,n))
for(i in 2:Niter){
v<--(xs[i-1,]-p)
xs[i,]<-xs[i-1,]+v*dt
}
xssum<-rbind(xssum,xs)
col<-c(col,rep(rep,Niter))
}
xlim=ylim=zlim=c(0,1)
plot3d(xssum[,1],xssum[,2],xssum[,3],col=col,xlim=xlim,ylim=ylim,zlim=zlim)
matplot(xssum,type="l",ylim=ylim)
- 領域内の点に向かって移動し、に収束するが、到達しない運動の例。速さが収束点からの距離のk(正の数)乗であるとしてある。
Niter<-1000
dt<-0.1
Nrep<-10
xssum<-NULL
col<-c()
k<-runif(1)*10
for(rep in 1:Nrep){
xs<-matrix(0,Niter,n)
xs[1,]<-rdirichlet(1,rep(1,n))
for(i in 2:Niter){
v<--(xs[i-1,]-p)
v<-v*(sqrt(sum(v^2)))^k
xs[i,]<-xs[i-1,]+v*dt
}
xssum<-rbind(xssum,xs)
col<-c(col,rep(rep,Niter))
}
xlim=ylim=zlim=c(0,1)
plot3d(xssum[,1],xssum[,2],xssum[,3],col=col,xlim=xlim,ylim=ylim,zlim=zlim)
matplot(xssum,type="l",ylim=ylim)
- 複数の点からの距離に-k2乗比例して進行方向が決まり、各点への距離の積に比例して速度が決まると、複数の点のどれかに無限に近づく
n<-5
np<-6
p<-rdirichlet(np,rep(1,n))
Niter<-1000
dt<-0.1
Nrep<-8
xssum<-NULL
xssum<-p
col<-rep(1,np)
k<--runif(1)*10
k2<-runif(1)*10
for(rep in 1:Nrep){
xs<-matrix(0,Niter,n)
xs[1,]<-rdirichlet(1,rep(1,n))
for(i in 2:Niter){
v<-rep(0,n)
vs<-matrix(0,np,n)
for(j in 1:np){
vs[j,]<--(xs[i-1,]-p[j,])
}
tmpl<-sqrt(apply(vs^2,1,sum))
stvs<-vs/tmpl^k2
tmpv<-apply(stvs,2,sum)
tmpv<-tmpv/sqrt(sum(tmpv^2))
v<-tmpv*(cumprod(tmpl)[length(tmpl)])
xs[i,]<-xs[i-1,]+v*dt
}
xssum<-rbind(xssum,xs)
col<-c(col,rep(rep+1,Niter))
}
xlim=ylim=zlim=c(0,1)
plot3d(xssum[,1],xssum[,2],xssum[,3],col=col,xlim=xlim,ylim=ylim,zlim=zlim)
matplot(xssum,type="l",ylim=ylim)