共形変換の映画

  • 共形変換でzf(z)に移るとき、「ジャンプ」する、という考え方もあるだろうけれど、連続的に変形して、結果としてf(z)に移る、ということもありだろう
  • 今、f(z)= \sum_{j=0}^k a_j z^jという変換だとしたときに、f(z,t) = \sum_{j=0}^k a_j^t z^{jt}という風にすると、連続的に動かせる
  • が、f(z,t) = z \times (\frac{f(z)}{z})^tの方が素直だろうか→実際、項ごとの和にすると、連続性が失われたりするようなので、こちらがよさそうだし、よく考えれば、そのはず
  • tの代わりに、単調増加関数g(t)を入れて、f(z,t) = \sum_{j=0}^k a_j^{g(t)} z^{jg(t)}とするのもありだろう
  • 係数のg(t)乗とzh(t)乗のように変えてやるのは、必要だろうか、それとも、多項式を書き換えれば、そのような違いを入れなくても大丈夫だろうか。また、z^jごとに、時間の単調増加関数を変える、というのも、一般的に扱うには必要だろうか、それとも、無限級数表示にすればそれは不要だろうか…
  • 以下、調整中
# 共形変換は複素多項式で表されるので、その係数ベクトルを共形変換オブジェクトとする

k <- 3
conf.fx <- rnorm(k) + 1i * rnorm(k)*5

# map先(t=1)を出す
my.conf.goal <-function(z,cf){
	ret <- length(z)
	tmp <- matrix(1,length(cf),length(z))
	if(length(cf) > 1){
		for(i in 2:length(cf)){
			tmp[i,] <- z^(i-1)
		}
	}
	apply(tmp * cf,2,sum)
}

# 共形変換多項式を分母分子とする有理型関数は、2つの共形変換オブジェクトのリストとして登録する

k1 <-3
conf.fx.1 <- rnorm(k1) + 1i * rnorm(k1)*5
k2 <- 1
conf.fx.2 <- rnorm(k2) + 1i * rnorm(k2)

conf.ratio.fx <- list(conf.fx.1,conf.fx.2)

# 単なる共形変換はconf.fx.2 <- c(1)の特殊な場合と考えることとする

# 時刻を織り込んでの、変換

my.conf.map <- function(z,t,cf){ 
	cf. <- cf
	cf.[1] <- cf.[1] + length(cf)
	#cf.[1] <- cf.[1] + length(cf)
	ret <- matrix(0,length(t),length(z))
	tmp <- matrix(1,length(cf),length(z))
	if(length(tmp[,1])>1){
		cf.[2] <- cf.[2] - 1
		for(i in 2:length(tmp[,1])){
			tmp[i,] <- z^(i-1)
		}
	}
	for(i in 1:length(ret[,1])){
		#tmp.2 <- cf.^t[i]
		ret[i,] <- apply((tmp * cf.)^t[i],2,sum)
		if(i==1){
			tmp.first <- ret[1,]
		}
		ret[i,] <- ret[i,]-tmp.first + z
	}
	ret
}
# こっちの方がよさそう
my.conf.map.2 <- function(z,t,cf){
	tmp <- my.conf.goal(z,cf)
	tmp.2 <- tmp/z
	ret <- matrix(0,length(t),length(z))
	for(i in 1:length(t)){
		ret[i,] <- z * tmp.2^t[i]
	}
	ret
}
my.conf.map.ratio <- function(z,t,cf.r){
	out1 <- my.conf.map.2(z,t,cf.r[[1]])
	tmp <- my.conf.goal(z,cf)
	ret <- matrix(0,length(t),length(z))
	for(i in 1:length(t)){
		ret[i,] <- tmp^t[i]
	}
	out1/ret
}
my.grid <- function(X=(-10):10,Y=(-10):10,n=200){
	x=seq(from=min(X),to=max(X),length=n+1)[-1]
	y=seq(from=min(Y),to=max(Y),length=n+1)[-1]
	as.matrix(rbind(expand.grid(x,Y),expand.grid(X,y)))
}
xy <- my.grid(X=1:3,Y=1:3,n=100)
#xy <- my.grid(X=(-5):5,Y=(-5):5,n=100)
z <- xy[,1] + 1i * xy[,2]
t <- seq(from=0,to=1,length=1000)

Z <- my.conf.map(z,t,conf.fx)

Z.end <- my.conf.goal(z,conf.fx)


#Z <- my.conf.map.ratio(z,t,conf.ratio.fx)
plot(Z[,1])

plot(Z[1,],pch=20,cex=0.3,xlim=range(Re(Z)),ylim=range(Im(Z)))
par(ask=TRUE)
for(i in 1:length(Z[,1])){
	#plot(Z[i,],pch=20,cex=0.3)
	plot(Z[i,],pch=20,cex=0.3,xlim=range(Re(Z)),ylim=range(Im(Z)))
	#points(Z[i,],pch=20,cex=0.3)
}