単位円を表す公式$e^{iπ}$は、実際のコンピューター上での描画においてはネイピア数e(2.718282)近似値の限界から無限に円を描き続ける事が出来ません。
なので以下の様な現象が起こる事自体については(まだRからPythonに乗り換える以前の)昨年の段階から気付いてましたが、来年にはこの辺りについてもっと深く掘り下げていきたいと考えています。
#±i^ax(-1≦a≦1)の場合
オイラー座標系②複素等比数列による整数概念の再構築
まずは関数$-1^x$に$i^2=-1$を代入すると$i^{2x}$となります。これをさらに普遍化して$±i^{ax}$と置きましょう。-1≦a≦1の範囲の挙動は予想通り単位円上の軌道に確実に収まります。
Int01<-function(Rad){
cx00<-seq(-3,3,length=61)
f0<-function(x) 1^x
cy00<-f0(cx00)
s00<-complex(re=cx00,im=cy00)
plot(s00,type="l",xlim=c(-2,2),ylim=c(-2,2),main="(0+1i)^ax(a= 0→1)",xlab="Real",ylab="Imaginal",col=rgb(0,1,0))
#-1^x=(0±1i)^2x(i^2=-1)
par(new=T)#上書き
c01<-seq(-1,1,length=61)
f0<-function(x) (0+1i)^(x*Rad)
s01<-f0(cx00)
plot(s01,type="l",xlim=c(-2,2),ylim=c(-2,2),main="",xlab="",ylab="",col=rgb(0,0,1))
par(new=T)#上書き
plot(s01+1,type="l",xlim=c(-2,2),ylim=c(-2,2),main="",xlab="",ylab="",col=rgb(1,0,0))
par(new=T)#上書き
plot(s01-1,type="l",xlim=c(-2,2),ylim=c(-2,2),main="",xlab="",ylab="",col=rgb(1,0,0))
par(new=T)#上書き
plot(s01+2,type="l",xlim=c(-2,2),ylim=c(-2,2),main="",xlab="",ylab="",col=rgb(0,0,1))
par(new=T)#上書き
plot(s01-2,type="l",xlim=c(-2,2),ylim=c(-2,2),main="",xlab="",ylab="",col=rgb(0,0,1))
abline(h=0,col=c(200,200,200))
abline(v=0,col=c(200,200,200))
abline(v=1,col=c(200,200,200))
abline(v=2,col=c(200,200,200))
abline(v=-1,col=c(200,200,200))
abline(v=-2,col=c(200,200,200))
even01<-paste("y=(0+1i)^",Rad,"x(Even)")
odd01<-paste("y=(0+1i)^",Rad,"x(Odd)")
legend("bottomleft", legend=c("y=1^x",even01,odd01), lty =c(1,1,1),col=c(rgb(0,1,0),rgb(0,0,1),rgb(1,0,0)))
}
#アニメーション動作設定
Time_Code<-seq(0,1,length=11)
#アニメーション
library("animation")
saveGIF({
for (i in Time_Code){
Int01(i)
}
}, interval = 0.1, movie.name = "Int04.gif")
$-i^{ax}(a=0→1)$(共役作用の為、見た目はまるで同じ)
Rによる実装
Int01<-function(Rad){
cx00<-seq(-3,3,length=61)
f0<-function(x) 1^x
cy00<-f0(cx00)
s00<-complex(re=cx00,im=cy00)
plot(s00,type="l",xlim=c(-2,2),ylim=c(-2,2),main="(0-1i)^ax(a= 0→1)",xlab="Real",ylab="Imaginal",col=rgb(0,1,0))
#-1^x=(0±1i)^2x(i^2=-1)
par(new=T)#上書き
c01<-seq(-1,1,length=61)
f0<-function(x) (0-1i)^(x*Rad)
s01<-f0(cx00)
plot(s01,type="l",xlim=c(-2,2),ylim=c(-2,2),main="",xlab="",ylab="",col=rgb(0,0,1))
par(new=T)#上書き
plot(s01+1,type="l",xlim=c(-2,2),ylim=c(-2,2),main="",xlab="",ylab="",col=rgb(1,0,0))
par(new=T)#上書き
plot(s01-1,type="l",xlim=c(-2,2),ylim=c(-2,2),main="",xlab="",ylab="",col=rgb(1,0,0))
par(new=T)#上書き
plot(s01+2,type="l",xlim=c(-2,2),ylim=c(-2,2),main="",xlab="",ylab="",col=rgb(0,0,1))
par(new=T)#上書き
plot(s01-2,type="l",xlim=c(-2,2),ylim=c(-2,2),main="",xlab="",ylab="",col=rgb(0,0,1))
abline(h=0,col=c(200,200,200))
abline(v=0,col=c(200,200,200))
abline(v=1,col=c(200,200,200))
abline(v=2,col=c(200,200,200))
abline(v=-1,col=c(200,200,200))
abline(v=-2,col=c(200,200,200))
even01<-paste("y=(0-1i)^",Rad,"x(Even)")
odd01<-paste("y=(0-1i)^",Rad,"x(Odd)")
legend("bottomleft", legend=c("y=1^x",even01,odd01), lty =c(1,1,1),col=c(rgb(0,1,0),rgb(0,0,1),rgb(1,0,0)))
}
#アニメーション動作設定
Time_Code<-seq(0,1,length=11)
#アニメーション
library("animation")
saveGIF({
for (i in Time_Code){
Int01(i)
}
}, interval = 0.1, movie.name = "Int05.gif")
$-(i^{ax})(a=0→1)$(展開が逆に)
Rによる実装
Int01<-function(Rad){
cx00<-seq(-3,3,length=61)
f0<-function(x) 1^x
cy00<-f0(cx00)
s00<-complex(re=cx00,im=cy00)
plot(s00,type="l",xlim=c(-2,2),ylim=c(-2,2),main="-(0+1i)^ax(a= 0→1)",xlab="Real",ylab="Imaginal",col=rgb(0,1,0))
#-1^x=(0±1i)^2x(i^2=-1)
par(new=T)#上書き
c01<-seq(-1,1,length=61)
f0<-function(x) -(0+1i)^(x*Rad)
s01<-f0(cx00)
plot(s01,type="l",xlim=c(-2,2),ylim=c(-2,2),main="",xlab="",ylab="",col=rgb(0,0,1))
par(new=T)#上書き
plot(s01+1,type="l",xlim=c(-2,2),ylim=c(-2,2),main="",xlab="",ylab="",col=rgb(1,0,0))
par(new=T)#上書き
plot(s01-1,type="l",xlim=c(-2,2),ylim=c(-2,2),main="",xlab="",ylab="",col=rgb(1,0,0))
par(new=T)#上書き
plot(s01+2,type="l",xlim=c(-2,2),ylim=c(-2,2),main="",xlab="",ylab="",col=rgb(0,0,1))
par(new=T)#上書き
plot(s01-2,type="l",xlim=c(-2,2),ylim=c(-2,2),main="",xlab="",ylab="",col=rgb(0,0,1))
abline(h=0,col=c(200,200,200))
abline(v=0,col=c(200,200,200))
abline(v=1,col=c(200,200,200))
abline(v=2,col=c(200,200,200))
abline(v=-1,col=c(200,200,200))
abline(v=-2,col=c(200,200,200))
even01<-paste("y=-(0+1i)^",Rad,"x(Even)")
odd01<-paste("y=-(0+1i)^",Rad,"x(Odd)")
legend("bottomleft", legend=c("y=1^x",even01,odd01), lty =c(1,1,1),col=c(rgb(0,1,0),rgb(0,0,1),rgb(1,0,0)))
}
#アニメーション動作設定
Time_Code<-seq(0,1,length=11)
#アニメーション
library("animation")
saveGIF({
for (i in Time_Code){
Int01(i)
}
}, interval = 0.1, movie.name = "Int06.gif")
#±i^ax(a>1あるいはa<-1)の場合
a>1あるいはa<-1の場合には見た事のない挙動を始めます。一応はその軌跡の全てが単位円の範囲に収まってはいるものの、その分布が独特の分布の周期的遷移を描くのです。ああ、数学的語彙が足らなくて、まずこういう現象をどう呼ぶか自体が分からない!!
Int01<-function(Rad,Range){
cx00<-seq(-3,3,length=61)
f0<-function(x) 1^x
cy00<-f0(cx00)
s00<-complex(re=cx00,im=cy00)
title01<-paste("(0+1i)^ax(a=",Range,")")
plot(s00,type="l",xlim=c(-2,2),ylim=c(-2,2),main=title01,xlab="Real",ylab="Imaginal",col=rgb(0,1,0))
#-1^x=(0±1i)^2x(i^2=-1)
par(new=T)#上書き
c01<-seq(-1,1,length=61)
f0<-function(x) (0-1i)^(x*Rad)
s01<-f0(cx00)
plot(s01,type="l",xlim=c(-2,2),ylim=c(-2,2),main="",xlab="",ylab="",col=rgb(0,0,1))
par(new=T)#上書き
plot(s01+1,type="l",xlim=c(-2,2),ylim=c(-2,2),main="",xlab="",ylab="",col=rgb(1,0,0))
par(new=T)#上書き
plot(s01-1,type="l",xlim=c(-2,2),ylim=c(-2,2),main="",xlab="",ylab="",col=rgb(1,0,0))
par(new=T)#上書き
plot(s01+2,type="l",xlim=c(-2,2),ylim=c(-2,2),main="",xlab="",ylab="",col=rgb(0,0,1))
par(new=T)#上書き
plot(s01-2,type="l",xlim=c(-2,2),ylim=c(-2,2),main="",xlab="",ylab="",col=rgb(0,0,1))
abline(h=0,col=c(200,200,200))
abline(v=0,col=c(200,200,200))
abline(v=1,col=c(200,200,200))
abline(v=2,col=c(200,200,200))
abline(v=-1,col=c(200,200,200))
abline(v=-2,col=c(200,200,200))
even01<-paste("y=(0+1i)^",Rad,"x(Even)")
odd01<-paste("y=(0+1i)^",Rad,"x(Odd)")
legend("bottomleft", legend=c("y=1^x",even01,odd01), lty =c(1,1,1),col=c(rgb(0,1,0),rgb(0,0,1),rgb(1,0,0)))
}
#アニメーション動作設定
Time_Code<-seq(0,40,length=201)
#アニメーション
library("animation")
saveGIF({
for (i in Time_Code){
Int01(i,c("0→40"))
}
}, interval = 0.1, movie.name = "Int11.gif")
#アニメーション動作設定
Time_Code<-seq(0,20,length=201)
#アニメーション
library("animation")
saveGIF({
for (i in Time_Code){
Int01(i,c("0→20"))
}
}, interval = 0.1, movie.name = "Int12.gif")
#アニメーション動作設定
Time_Code<-seq(20,40,length=201)
#アニメーション
library("animation")
saveGIF({
for (i in Time_Code){
Int01(i,c("0→20"))
}
}, interval = 0.1, movie.name = "Int13.gif")
さて、この現象の詳細は一体どうなってるんでしょう? 素人考えで恐縮ですが、もしかしたらもっと数学に詳しい人なら、この現象についてちゃんと数式が示せるのでは?