Schwarz-Christoffel 変換〜離散版SLE曲線

  • SLEはブラウン運動が駆動する曲線
  • その離散版にSchwarz-Christoffel変換に対応する共形変換の繰り返しが生成する折れ線がある
  • Schwartz-Christoffel変換は、多角形を複素上半平面と対応付ける変換(こちら)
    • 量子状態のブラウン運動的変化を量子ウォークと言うが、それはユニタリ変換だと言い、それを説明する文書にこのSchwarz-Christoffelによる折れ線生成が書いてある(こちら)
  • その文書の中に折れ線生成のパラメタκが出てきて、8とかが意味のある値らしいのだが、そについてはわからないなりに、パラメタを入れて、折れ線生成はできた
  • Rソース

my.schwarzChristoffel <- function(p,n,S0=0+0*1i){
	rw <- sample(c(-1,1),n,replace=TRUE) * p + 1/2 + 0 * 1i
	my.S <- function(z,a){
		z <- z + 0*1i
		(z+2*sqrt((1-a)/a))^(1-a)*(z-2*sqrt(a/(1-a)))^a
	}
	S0 <- 0 + 0 * 1i
	Ss <- rep(0,n)

	for(i in 1:n){
		if(i == 1){
			Ss[i] <- my.S(S0,rw[i])
		}else{
			Ss[i] <- S0
			for(j in i:1){
				Ss[i] <- my.S(Ss[i],rw[j])
			}
		}
	}
	Ss
}

ps <- seq(from=0.05,to = 0.45,length=3)
ps <- 0.4
n.iter <- 5
n <- 200

out <- matrix(0,length(ps)*n.iter,n)
cnt <- 1
col <- c()
for(i in 1:length(ps)){
	for(j in 1:n.iter){
		out[cnt,] <- my.schwarzChristoffel(ps[i],n)
		cnt <- cnt + 1
		col <- c(col,i)
	}
}

plot(out[1,],type="l",xlim = range(Re(out)),ylim=range(Im(out)),col=col[1])
for(i in 2:length(out[,1])){
	points(out[i,],type="l",col=i)
}
  • メモ
    • 1歩目はどこか
a <- seq(from=0,to=1,length=10000)
a <- a[-c(1,100)] + 0*1i

(2*sqrt((1-a)/a))^(1-a) * (-2*sqrt(a/(1-a)))^a -> p

plot(p)