一般化を進めよう

  • 3要素で三葉結び目とその拡張版を描いて、Mod(x+y+z)が保存されることがわかった(ただし、2つの周期パラメタC1,C2が、定数倍関係の時)
  • 素数を増やす方向で一般化してみよう
  • 3要素を、円周の3等分方向としてとったから、n要素にするときには円周のn当分方向としてとることにする
  • やはりMod(\sum_{i=1}^n x_i)が保存されることがわかる(C2がC1の定数倍の解き)
    • ついでに、(C1=C2=0),(C1=-C2),(C2=0)の場合など、Rソース上、例外処理が必要な場合に対応できるようにソースに場合分けを入れたバージョンが以下。
###############
library(rgl)

nm<-5

myi<-complex(real=0,imaginary=1)

# 周期は0-(2*pi)をX回繰り返しとする
X<-3
# 1周あたりの点の数をnpt
npt<-1000
t<-seq(from=0,to=1,length.out=npt)*2*pi*X


delta<-1/nm
C1<-1
C2<-3
k<-1

xs<-matrix(0,nm,length(t))
for(i in 1:nm){
	if(C1==C2){
		if(C2==0){
			xs[i,]<-complex(real=0,imaginary=1/2*(t+delta*i*2*pi))+complex(real=0,imaginary=1/2*(t+delta*i*2*pi))+complex(real=0,imaginary=k*(t+delta*i*2*pi))
		}else{
			xs[i,]<-1/2*1/(C1+C2)*exp(myi*(C1+C2)*(t+delta*i*2*pi))+complex(real=0,imaginary=1/2*(t+delta*i*2*pi))+k/C2*exp(myi*(C2)*(t+delta*i*2*pi))
		}
			
	}else if(C1==-C2){
		if(C2==0){
			xs[i,]<-complex(real=0,imaginary=1/2*(t+delta*i*2*pi))+complex(real=0,imaginary=1/2*(t+delta*i*2*pi))+complex(real=0,imaginary=k*(t+delta*i*2*pi))
		}else{
			xs[i,]<-complex(real=0,imaginary=1/2*(t+delta*i*2*pi))+1/2*1/(C1-C2)*exp(myi*(C1-C2)*(t+delta*i*2*pi))+k/C2*exp(myi*(C2)*(t+delta*i*2*pi))
		}
		
	}else if(C2==0){
		xs[i,]<-1/2*1/(C1+C2)*exp(myi*(C1+C2)*(t+delta*i*2*pi))+1/2*1/(C1-C2)*exp(myi*(C1-C2)*(t+delta*i*2*pi))+complex(real=0,imaginary=k*(t+delta*i*2*pi))
	}else{
		xs[i,]<-1/2*1/(C1+C2)*exp(myi*(C1+C2)*(t+delta*i*2*pi))+1/2*1/(C1-C2)*exp(myi*(C1-C2)*(t+delta*i*2*pi))+k/C2*exp(myi*(C2)*(t+delta*i*2*pi))
	}
	
}

open3d()
plot3d(Im(xs[1,]),Im(xs[2,]),Im(xs[3,]),col=rainbow(1000),main="虚部")
open3d()
plot3d(Re(xs[1,]),Re(xs[2,]),Re(xs[3,]),col=rainbow(1000),main="実部")

par(mfcol=c(1,2))
ylim<-c(min(Im(xs)),max(Im(xs)))
plot(Im(xs[1,]),type="l",col=1,ylim=ylim,main="Im(x),Im(y),Im(z)")
par(new=TRUE)
plot(Im(xs[2,]),type="l",col=2,ylim=ylim)
par(new=TRUE)
plot(Im(xs[3,]),type="l",col=3,ylim=ylim)

plot(Mod(apply(xs,2,sum)),ylim=c(2*min(-1,Mod(x+y+z)),2*max(1,Mod(x+y+z))),main="保存量Mod(xs)")
par(mfcol=c(1,1))

matplot(Im(t(xs)),type="l")