「数理演算の基礎」

2019年より着手した「数理再勉強」用の倉庫。

【等差数列】等差数列(arithmetic progression)から同心円集合(concentric set)へ

こうした記述は一般には数直線(Number line)に関する話と解釈されます。しかし実際にはそれはトポロジーtopology=位相幾何学)的には「(自然数や配列の様に1で始まるタイプを除くと)初項(Initial term)=0の原点のみで固定された直線(line)」に外ならず、ぐるりと回せば円を描き、かつ目盛りが振られているので同心円集合(concentric set)を構成するのです。しかもそれは以下の2つのタイプに大別される展開を迎えます。

f:id:ochimusha01:20200109134309p:plain

0初項(Initial term)とし、片側の端点(end point)のみが無限大Infもしくは無限小-Infに開かれた片側無限算術数列(one-sided infinite arithmetic sequence)。

 統計言語Rによる実装例

 OIAS01<-function(index){
#同心円の描画
c0=seq(0,2*pi,length=60)
cx=cos(c0)
cy=sin(c0)
plot(cx,cy,asp=1,type="l",xlim=c(-3,3),ylim=c(-3,3),main="One-sided Infinite Arithmetic Sequence",xlab="",ylab="")
par(new=T)#上書き
plot(cx*2,cy*2,asp=1,type="l",xlim=c(-3,3),ylim=c(-3,3),main="",xlab="",ylab="")
par(new=T)#上書き
plot(cx*3,cy*3,asp=1,type="l",xlim=c(-3,3),ylim=c(-3,3),main="",xlab="",ylab="")
par(new=T)#上書き
plot(cx*4,cy*4,asp=1,type="l",xlim=c(-3,3),ylim=c(-3,3),main="",xlab="",ylab="")
par(new=T)#上書き
plot(cx*5,cy*5,asp=1,type="l",xlim=c(-3,3),ylim=c(-3,3),main="",xlab="",ylab="")
#同心円領域の塗り潰し(x=1)
polygon(cx, #x
cy, #y
density=c(50), #塗りつぶす濃度
angle=c(45),     #塗りつぶす斜線の角度
col=c(200,200,200))  #塗りつぶす色
#同心円領域の塗り潰し(x=2)
polygon(cx*2, #x
cy*2, #y
density=c(40), #塗りつぶす濃度
angle=c(45),     #塗りつぶす斜線の角度
col=c(200,200,200))  #塗りつぶす色
#同心円領域の塗り潰し(x=3)
polygon(cx*3, #x
cy*3, #y
density=c(30), #塗りつぶす濃度
angle=c(45),     #塗りつぶす斜線の角度
col=c(200,200,200))  #塗りつぶす色
#同心円領域の塗り潰し(x=3)
polygon(cx*4, #x
cy*4, #y
density=c(20), #塗りつぶす濃度
angle=c(45),     #塗りつぶす斜線の角度
col=c(200,200,200))  #塗りつぶす色
#同心円領域の塗り潰し(x=3)
polygon(cx*5, #x
cy*5, #y
density=c(10), #塗りつぶす濃度
angle=c(45),     #塗りつぶす斜線の角度
col=c(200,200,200))  #塗りつぶす色

abline(h = 0,col=c(200,200,200))
abline(v = 0,col=c(200,200,200))

par(new=T)#上書き
ax=c(0,cx[index]*1,cx[index]*2,cx[index]*3,cx[index]*4,cx[index]*5)
ay=c(0,cy[index]*1,cy[index]*2,cy[index]*3,cy[index]*4,cy[index]*5)
plot(ax,ay,asp=1,type="o",xlim=c(-3,3),ylim=c(-3,3),col=rgb(0,0,1),main="",xlab="",ylab="")
}
#アニメーション動作設定
Time_Code<-seq(1,59,by=2)
#アニメーション
library("animation")
saveGIF({
for (i in Time_Code){
 OIAS01(i)
}
}, interval = 0.1, movie.name = "OIAS01.gif")

f:id:ochimusha01:20200109155657g:plain
0を初項(Initial term)とし、無限大Inf無限小-Infに挟まれた区間(open interval)で仕切られた両側無限算術数列(Two-sided infinite arithmetic sequence)。

 

 ただし例えば二次元平面(x,y)上における展開方法に以下の2種類がある。

A.直線y=0を軸線に選んだ形(xの座標が-1から+1にかけて推移。yは決して0以下にならない)

統計言語Rによる実装例(y=f(x)の実装)

TIASx01<-function(index){
#同心円の描画
c0=seq(0,2*pi,length=60)
cx=cos(c0)
cy=sin(c0)
plot(cx,cy,asp=1,type="l",xlim=c(-3,3),ylim=c(-3,3),main="Two-sided Infinite Arithmetic Sequence",xlab="x",ylab="y")
par(new=T)#上書き
plot(cx*2,cy*2,asp=1,type="l",xlim=c(-3,3),ylim=c(-3,3),main="",xlab="",ylab="")
par(new=T)#上書き
plot(cx*3,cy*3,asp=1,type="l",xlim=c(-3,3),ylim=c(-3,3),main="",xlab="",ylab="")
par(new=T)#上書き
plot(cx*4,cy*4,asp=1,type="l",xlim=c(-3,3),ylim=c(-3,3),main="",xlab="",ylab="")
par(new=T)#上書き
plot(cx*5,cy*5,asp=1,type="l",xlim=c(-3,3),ylim=c(-3,3),main="",xlab="",ylab="")
#同心円領域の塗り潰し(x=1)
polygon(cx, #x
cy, #y
density=c(50), #塗りつぶす濃度
angle=c(45),     #塗りつぶす斜線の角度
col=c(200,200,200))  #塗りつぶす色
#同心円領域の塗り潰し(x=2)
polygon(cx*2, #x
cy*2, #y
density=c(40), #塗りつぶす濃度
angle=c(45),     #塗りつぶす斜線の角度
col=c(200,200,200))  #塗りつぶす色
#同心円領域の塗り潰し(x=3)
polygon(cx*3, #x
cy*3, #y
density=c(30), #塗りつぶす濃度
angle=c(45),     #塗りつぶす斜線の角度
col=c(200,200,200))  #塗りつぶす色
#同心円領域の塗り潰し(x=3)
polygon(cx*4, #x
cy*4, #y
density=c(20), #塗りつぶす濃度
angle=c(45),     #塗りつぶす斜線の角度
col=c(200,200,200))  #塗りつぶす色
#同心円領域の塗り潰し(x=3)
polygon(cx*5, #x
cy*5, #y
density=c(10), #塗りつぶす濃度
angle=c(45),     #塗りつぶす斜線の角度
col=c(200,200,200))  #塗りつぶす色

abline(h = 0,col=rgb(0,1,0))
abline(v = 0,col=c(200,200,200))

par(new=T)#上書き
axp=c(0,cx[index]*1,cx[index]*2,cx[index]*3,cx[index]*4,cx[index]*5)
ayp=c(0,cy[index]*1,cy[index]*2,cy[index]*3,cy[index]*4,cy[index]*5)
plot(axp,ayp,asp=1,type="o",xlim=c(-3,3),ylim=c(-3,3),col=rgb(0,0,1),main="",xlab="",ylab="")
par(new=T)#上書き
axm=c(0,cx[index]*-1,cx[index]*-2,cx[index]*-3,cx[index]*-4,cx[index]*-5)
aym=c(0,cy[index]*-1,cy[index]*-2,cy[index]*-3,cy[index]*-4,cy[index]*-5)
plot(axm,aym,asp=1,type="o",xlim=c(-3,3),ylim=c(-3,3),col=rgb(1,0,0),main="",xlab="",ylab="")
}
#アニメーション動作設定
Time_Code<-seq(1,29,by=2)
#アニメーション
library("animation")
saveGIF({
for (i in Time_Code){
 TIASx01(i)
}
}, interval = 0.1, movie.name = "TIASx001.gif")

f:id:ochimusha01:20200109200426g:plain

B.直線x=0を軸線に選んだ形(yの座標が-1から+1にかけて推移。xは決して0以下にならない)

統計言語Rによる実装例(x=f(y)の形での実装)

 TIASy01<-function(index){

#同心円の描画

c0=seq(0,2*pi,length=60)
cx=cos(c0)
cy=sin(c0)
plot(cx,cy,asp=1,type="l",xlim=c(-3,3),ylim=c(-3,3),main="Two-sided Infinite Arithmetic Sequence",xlab="x",ylab="y")
par(new=T)#上書き
plot(cx*2,cy*2,asp=1,type="l",xlim=c(-3,3),ylim=c(-3,3),main="",xlab="",ylab="")
par(new=T)#上書き
plot(cx*3,cy*3,asp=1,type="l",xlim=c(-3,3),ylim=c(-3,3),main="",xlab="",ylab="")
par(new=T)#上書き
plot(cx*4,cy*4,asp=1,type="l",xlim=c(-3,3),ylim=c(-3,3),main="",xlab="",ylab="")
par(new=T)#上書き
plot(cx*5,cy*5,asp=1,type="l",xlim=c(-3,3),ylim=c(-3,3),main="",xlab="",ylab="")
#同心円領域の塗り潰し(x=1)
polygon(cx, #x
cy, #y
density=c(50), #塗りつぶす濃度
angle=c(45),     #塗りつぶす斜線の角度
col=c(200,200,200))  #塗りつぶす色
#同心円領域の塗り潰し(x=2)
polygon(cx*2, #x
cy*2, #y
density=c(40), #塗りつぶす濃度
angle=c(45),     #塗りつぶす斜線の角度
col=c(200,200,200))  #塗りつぶす色
#同心円領域の塗り潰し(x=3)
polygon(cx*3, #x
cy*3, #y
density=c(30), #塗りつぶす濃度
angle=c(45),     #塗りつぶす斜線の角度
col=c(200,200,200))  #塗りつぶす色
#同心円領域の塗り潰し(x=3)
polygon(cx*4, #x
cy*4, #y
density=c(20), #塗りつぶす濃度
angle=c(45),     #塗りつぶす斜線の角度
col=c(200,200,200))  #塗りつぶす色
#同心円領域の塗り潰し(x=3)
polygon(cx*5, #x
cy*5, #y
density=c(10), #塗りつぶす濃度
angle=c(45),     #塗りつぶす斜線の角度
col=c(200,200,200))  #塗りつぶす色

abline(h = 0,col=c(200,200,200))
abline(v = 0,col=rgb(0,1,0))

par(new=T)#上書き
axp=c(0,cx[index]*1,cx[index]*2,cx[index]*3,cx[index]*4,cx[index]*5)
ayp=c(0,cy[index]*1,cy[index]*2,cy[index]*3,cy[index]*4,cy[index]*5)
plot(axp,ayp,asp=1,type="o",xlim=c(-3,3),ylim=c(-3,3),col=rgb(0,0,1),main="",xlab="",ylab="")
par(new=T)#上書き
axm=c(0,cx[index]*-1,cx[index]*-2,cx[index]*-3,cx[index]*-4,cx[index]*-5)
aym=c(0,cy[index]*-1,cy[index]*-2,cy[index]*-3,cy[index]*-4,cy[index]*-5)
plot(axm,aym,asp=1,type="o",xlim=c(-3,3),ylim=c(-3,3),col=rgb(1,0,0),main="",xlab="",ylab="")
}
#アニメーション動作設定
Time_Code<-c(seq(45,59,by=2),seq(1,15,by=2))
#アニメーション
library("animation")
saveGIF({
for (i in Time_Code){
 TIASy01(i)
}
}, interval = 0.1, movie.name = "TIASy001.gif")

f:id:ochimusha01:20200109200959g:plain

後者はまさに一次関数(linear function)y=axおよびx=ayの振る舞いそのものですね。

以下続報…

【個人的メモ】この投稿の執筆に際して参照した数学/プログラミング言語系サイト

文字列を操作する