「諸概念の迷宮(Things got frantic)」用語集

本編で頻繁に使うロジックと関連用語のまとめ。

【自然対数eとの邂逅】「オイラーの等式への飛躍」を準備した指数関数や対数関数の特性について

指数関数や(それと逆関数の関係にある)対数関数の最大の特徴は、それぞれの底(root)について以下の領域における振る舞いがそれぞれ全く異なる点にあります。
統計言語Rによる図示例

#ネイピア数を底とする指数関数・対数関数
f0<-function(x){exp(x)}
f1<-function(x){log(x)}
plot(f0,xlim=c(-8,8),ylim=c(-1,8),type="l",col=rgb(1,0,0), main="Exponential and logarithmic functions to base Napier number", xlab="x", ylab="y")
par(new=T)#上書き指定
plot(f1,xlim=c(-8,8),ylim=c(-1,8),col=rgb(0,0,1),main="", xlab="", ylab="")
legend("topleft", legend=c("y=e^x", "y=log(x)"), lty = c(1,1),col=c(rgb(1,0,0),rgb(0,0,1)))

f:id:ochimusha01:20190426011143p:plain

  • 指数関数における指数「−11/底)」〜「底/底)」〜「)」の範囲(およびこれに対応する対数領域の領域)における有意味な振る舞い。
  • それ以下1/底^x)」の領域における、意味を見出すには微小過ぎる動き。
  • それ以上底^x)」の領域における、文字通り「指数関数的増大」の世界。

状況を分かり易くする為、とある(クラゲやウニやイソギンチャクといった)放射相称動物(Radiata)の生き様に擬えて全体像を俯瞰してみましょう。

毎年理論上、root)倍に成長する「想像上の放射相称生物Imaginaly Radiata)」を想定する。現在のサイズ指数「底/底)」に対してこの生物は概ね昨年はサイズ指数「−11/底)」であり、年末にはサイズ指数「)」に達っすると目される。
f:id:ochimusha01:20190429171323j:plain

  • この生物が円形で、増加率の底が円周率π(=3.141592)だったとしたら、毎回成長前の円周が成長後の直径に一致する。例えば半径1/π(直径2/π、円周2)のサイズだと半径1(直径2、円周2π)、半径1(直径2、円周2π)だと半径π(直径2π、円周2π^2)に成長する。
    *指数関数π^xに当て嵌めると「x=-1の時1/π」「x=0の時1」「x=1の時π」
    f:id:ochimusha01:20190509065008g:plain

  • この生物のサイズに指数関数的増大をもたらすのは複利計算(元金により生じた利子を次期の元金に組み入れ、元金だけでなく利子にも次期の利子が付く雪だるま式に増えていく計算式)なのだが、例えばそれがN段階の試行で進行するとし、全ての試行が成功するとサイズ指数「)」に到達し、全て失敗するとサイズ指数「−11/底)」すなわちゼロ成長のまま留まると考える。するとサイズ指数「底/底)」を代表値として底の極限値の上限として「ネイピア数e2.718281…)」が、下限として「1/e0.3678794…)」が現れる。
    *指数関数e^xに当て嵌めると「e=-1の時1/e」「x=0の時1」「x=1の時e」

  • ちなみにe^-1の結果は(1/N)^Nの式でも表せる「ベルヌーイ試行Bernoulli trial)」に「N回の試行でN回目に到達する成功確率は0.6321…1-1/e)」なる特徴を付加する。
    *自然対数の世界においてはあらゆる成長率に上限があり、あらゆる失敗率に下限が存在するとも。

増率そのものは一定なので、この生物自体が自らの「過去における成長速度の緩慢さ」や自らの「未来における成長速度の急激さ」そのものを経験する事はない。これは「年輪を刻む樹木のうち生きているのは樹皮周辺のみ」とか「珊瑚礁のうち生きているのは珊瑚虫が活動している表面部分のみ」という概念にも対応。彼らにも意識が存在すると考える研究者もいるが、その場合もこうした側面は決して無視する事が出来ない。

f:id:ochimusha01:20190503150232j:plain

f:id:ochimusha01:20190503144756j:plain

*ふと思い出したのが以前の投稿における粘菌コンピューティングの概念。如何なる次元においても、対象の活動を適切な目的の達成に向けさせる事に成功したなら、それは計算(Computing)なのである?

それでは具体的に実際の指数関数や対数関数の振る舞いに目を向けていきましょう。少しでも頭が混乱したら上掲の「想像上の放射相称生物Imaginaly Radiata)」のイメージに戻ってください。 

#指数関数と対数関数の結果の対応
target_numbers<-c("1/root","root/root","root")
exponential_result<-c("root^-1","root^0","root^1")
logarithm_result<-c("log(1/root,base=root)","log(1,base=root)=0","log(root,base=root)=1")
Exponential_and_Logarithm<-data.frame(Target_numbers=target_numbers,Exponential_result=exponential_result,Logarithm_result=logarithm_result)
library(xtable)
print(xtable(Exponential_and_Logarithm), type = "html")

  Target_numbers Exponential_result Logarithm_result
1 1/root root^-1 log(1/root,base=root)
2 root/root root^0 log(1,base=root)=0
3 root root^1 log(root,base=root)=1

y=A^xの形で表記される指数関数(Exponential function)の特徴。

#統計言語Rでの検証例
Exponent<-c(-3:3)
f0=function(x){2^x}
Exponential_2<-f0(Exponent)
f1=function(x){10^x} 
Exponential_10<-f1(Exponent)
f2=function(x){exp(1)^x}
Exponential_e<-f2(Exponent)
A_Expentional_Set<-data.frame(Exponent,Exponential_2,Exponential_10,Exponential_e)
#表示結果
print(A_Expentional_Set)

f:id:ochimusha01:20190328205227p:plain

#この段階で既に「指数関数10^x」が同時表示限界に到達。
#R、この種の攻撃に弱過ぎ…

sprintf("%.3f",A_Expentional_Set$Exponential_10)
[1] "0.001" "0.010" "0.100" "1.000" "10.000" "100.000" "1000.000"
#(アニメーション)グラフ化してみる。

Exponential_Functionf_Set=function(time_code){

f0=function(x){2^x}
plot(f0, xlim=c(-3,3),ylim=c(-0,time_code),lty =2,main="Exponential function", xlab="x", ylab="y")
par(new=T) # 上書き指定
f1=function(x){10^x} 
plot(f1,xlim=c(-3,3),ylim=c(-0,time_code),lty =3,main="", xlab="", ylab="")
par(new=T) # 上書き指定
f2=function(x){exp(1)^x}
plot(f2,xlim=c(-3,3),ylim=c(-0,time_code),lty =4,main="", xlab="", ylab="")
# 線を引く
abline(h=0)
abline(h=1)
abline(h=2)
abline(h=exp(1))
abline(h=10)
abline(h=100)
abline(h=1000)
abline(v=0)
abline(v=1)
abline(v=2)
abline(v=3) 

# 凡例を書き添える
legend("topleft", legend=c("y=2^x", "y=10^x","y=e^x"), lty =c(2,3,4))

}

library("animation")
Time_Code=c(1,2,4,8,16,32,64,128,256,512,1024,512,256,128,64,32,16,8,4,2)
saveGIF({
for (i in Time_Code){
  Exponential_Functionf_Set(i)
}
}, interval = 0.1, movie.name = "TEST.gif")

f:id:ochimusha01:20190328221326g:plain

  • 与えられた指数がマイナスの時は、小数点下となり限りなく0へと近づいていく(1/A^x)。
    f:id:ochimusha01:20190328221631p:plain
  • 与えられた指数が0の時は1となる(A/A)。
  • 与えられた指数が1の時はA=その指数関数の底(Base)となる。
    f:id:ochimusha01:20190328221816p:plain
  • 与えられた指数がプラスの時はA^x(指数がマイナスの時や1や0の様な特殊な値となる時も増分は常に「底Aの乗」であり続ける)。
  • 与えられた指数の小数点下部分は平方根0.5)や立方根(1/3)計算となる(例えば2^0.5=sqrt(2)=1.41421356...)。

②指数関数と逆関数の関係にあり、y=log(x,base=A)の形で表記される対数関数(logarithm)の特徴。
*ちなみに対数log(x,base=b x)のbを「底(base)」、xを「真数(antilogarithm)」と呼ぶ。

#統計言語Rでの検証例
Logarithm<-c(0.0625,0.1,0.125,0.25,0.5,1,exp(0.5),2,exp(1),4,exp(2),8,10,100)
#0.0625=1/16
#0.125=1/8
#0.25=1/4
f0=function(x){log2(x)}
Logarithm_2<-f0(Logarithm)
f1=function(x){log10(x)} 
Logarithm_10<-f1(Logarithm)
f2=function(x){log(x)}
Logarithm_e<-f2(Logarithm)
A_Logarithm_Set<-data.frame(Logarithm,Logarithm_2,Logarithm_10,Logarithm_e)
#表示結果
print(A_Logarithm_Set)

f:id:ochimusha01:20190328225536p:plain

#グラフ化してみる。
f0=function(x){log2(x)}
plot(f0, xlim=c(0,3),ylim=c(-6,4),lty =2,main="Logarithm function", xlab="x", ylab="y")
par(new=T) # 上書き指定
f1=function(x){log10(x)} 
plot(f1,xlim=c(0,3),ylim=c(-6,4),lty =3,main="", xlab="", ylab="")
par(new=T) # 上書き指定
f2=function(x){log(x)}
plot(f2,xlim=c(0,3),ylim=c(-6,4),lty =4,main="", xlab="", ylab="")
# 線を引く
abline(h=0)
abline(h=1)
abline(v=1)
# 凡例を書き添える
legend("bottomright", legend=c("y=log2^x", "y=log10^x","y=log^x"), lty =c(2,3,4))

  • あくまで0を含め0以下の値はとらない(逆関数たる指数関数が0以下の値を取らない事に対応)。
  • 与えられた真数が小数点下の時はマイナスとなる(指数関数1/A^xの結果の逆数(reciprocal))。

    #指数関数と対数関数の結果の対応
    target_numbers<-c("0.5=1/2","0.25=1/4","0.125=1/8","0.0625=1/16")
    exponential_result<-c("2^-1=0.5","2^-2=0.25","2^-3=0.125","2^-4=0.0625")
    logarithm_result<-c("log2(0.5)=-1","log2(0.25)=-2","log2(0.125)=-3","log2(0.0625)=-4")
    Exponential_and_Logarithm<-data.frame(Target_numbers=target_numbers,Exponential_result=exponential_result,Logarithm_result=logarithm_result)
    library(xtable)
    print(xtable(Exponential_and_Logarithm), type = "html")

      Target_numbers Exponential_result Logarithm_result
    1 0.5=1/2 2^-1=0.5 log2(0.5)=-1
    2 0.25=1/4 2^-2=0.25 log2(0.25)=-2
    3 0.125=1/8 2^-3=0.125 log2(0.125)=-3
    4 0.0625=1/16 2^-4=0.0625 log2(0.0625)=-4
  • 与えられた真数が1の時は0となる(指数関数A^0=1に対応)。
  • 与えられた真数がその対数関数の底(Base)の場合は1となる。
  • 与えられた真数がプラスの時の結果は指数関数A^xの結果に逆対応。

    #指数関数と対数関数の結果の対応
    target_numbers<-c("4","8","16")
    exponential_result<-c("2^2=4","2^3=8","2^4=16")
    logarithm_result<-c("log2(4)=2","log2(8)=3","log2(16)=4")
    Exponential_and_Logarithm<-data.frame(Target_numbers=target_numbers,Exponential_result=exponential_result,Logarithm_result=logarithm_result)
    library(xtable)
    print(xtable(Exponential_and_Logarithm), type = "html")

      Target_numbers Exponential_result Logarithm_result
    1 4 2^2=4 log2(4)=2
    2 8 2^3=8 log2(8)=3
    3 16 2^4=16 log2(16)=4

③冪(べき)e^tがx自身に一致するような指数tのことをxの自然対数eというが、それは2.71...なる定数となる。
「e^1=e」に基づく計算方法

#ヤコブ・ベルヌイの複利計算法に基づく算出方法
f0=function(x){(1+1/x)^x}
#グラフ化してみる。
plot(f0, xlim=c(0,50),ylim=c(0,3),lty =1,main="Natural logarithm", xlab="N", ylab="(1+1/N)^N")
#自然対数eと比較。
abline(h=exp(1))#exp(1)=2.718282...

f:id:ochimusha01:20190426031522p:plain

「e^-1=1/e」に基づく計算方法

#オイラーの「ネイピアの対数表」に基づく算出方法
f0=function(x){(1-1/x)^x}
#グラフ化してみる
plot(f0, xlim=c(0,50),ylim=c(0,0.5),lty =1,main="Natural logarithm", xlab="N", ylab="(1-1/N)^N")
#自然対数1/eと比較。
abline(h=exp(-1))#exp(-1)=0.3678794...

f:id:ochimusha01:20190426032119p:plain

④そして任意の指数関数A^xネイピア数を底とするe^(x*log(A))へ、任意の対数関数log(x,base=A)は同じくネイピア数を底とするlog(x)/log(A)へと変換可能である。
#例えば指数関数pi^xはe^(x*log(pi))、その逆関関数log(x,base=pi)はlog(x)/log(pi)へと変換される事になる。

#統計言語R上における指数関数の底の変換例
2^3
[1] 8
exp(3*log(2))
[1] 8
#統計言語R上における対数関数の底の変換例
log(3,base=2)
[1] 1.584963
log(3)/log(2)
[1] 1.584963

#指数関数π^xとe^xの関係
log(pi)
[1] 1.14473

とりあえず、一応は上掲した「想像上の放射相称生物Imaginaly Radiata)」の特徴は完全に網羅した?