曲線に伴う共形変換 その2

  • 一昨日の記事で、実直線上の駆動関数から複素平面上の曲線を計算するのは、難しい・・・と書いたが、大まかには描けるだろう
  • スタート時のグリッド点が駆動関数に応じてどこに移されるかはわかるから、その中でもっとも、駆動関数の先端点に近い3点を選んで、線形補間してやるっていうのはどうだろう
  • 別のやり方もありそうだが(3点の三角形内の点になるとは限らないで…)、ひとまず、それでやってみる

  • 三角形より2点の間の点の方がよいか…

library(deSolve)

k <- 8
n <- 100
BM1 <- sample(c(-1,1),n,replace=TRUE)*0.5
#BM1 <- rep(0.05,n)
BM2 <- sample(c(-1,1),n,replace=TRUE)*0.5
#BM1 <- rnorm(n,0,0.1)
#BM2 <- rnorm(n,0,0.1)
Ut1 <- cumsum(BM1)
Ut1 <- c(0,Ut1)
Ut2 <- cumsum(BM2)
Ut2 <- c(0,Ut2)
Ut2 <- abs(Ut2)
#Ut1 <- sin((1:n)/n*3*pi -pi)
#Ut2 <- cos((1:n)/n*2*pi - pi)+1
Ut <- sqrt(k) * (Ut1) + 1i*0
plot(Ut)

#z <- 10 + 1i * 10
z.lattice <- expand.grid(seq(from=(-10),to=10,length=100),seq(from=0,to=20,length=100))
z.lattice <- z.lattice[,1] + 1i * z.lattice[,2]
z.mat <- matrix(0,n+1,length(z.lattice))
zs <- rep(0,n+1)
gammas <- rep(0,n+1)
zs[1] <- z

z.mat[1,] <- z.lattice
for(i in 1:n){
	dz <- 2/(zs[i]-Ut[i])
	zs[i+1] <- zs[i] + dz
	dzs <- 2/(z.mat[i,]-Ut[i])
	z.mat[i+1,] <- z.mat[i,] + dzs
}
D <- Mod(z.mat-Ut)
D.ord <- t(apply(D,1,order))
k <- 2 # 3点をとるか2点をとるか
D.ord.3 <- D.ord[,1:k]


p <- rep(0,n+1)
for(i in 1:(n+1)){
	threes <- D.ord.3[i,]
	tmp.D <- D[i,threes]
	tmp.z <- z.mat[1,threes]
	p[i] <- sum(tmp.D * tmp.z)/sum(tmp.D)
}
plot(p)


plot(zs)
#matplot(z.mat,type="l")
#for(i in 1:(n+1)){
	plot(c(z.mat,Ut,p),asp=TRUE,pch=20,cex=0.1,col=rgb(1,0.2,0.7))

#	points(z.mat[i,],pch=20)
	points(Ut[1:i],type="l",col=3,pch=20)
	points(Ut[i],col=2,pch=20,cex=2)
	points(p,type="l",col=4)
	points(p[i],pch=20,cex=2,col=4)
#}