オイラー定数について 続き
では$${\displaystyle \sum_{k=1}^{2^n} \dfrac{1}{k} \gt 1+\frac{n}{2}}$$を示し、この数列が発散することがわかりました。そこで、ここでは定積分を使い、この数列の面白さに迫ってみたいと思います。
定積分の考え方を使うと、$${\displaystyle \sum_{k=1}^{n} \dfrac{1}{k}}$$に対して、次の不等式が成り立ちます。
$${\displaystyle \log(n+1)<\displaystyle \sum_{k=1}^{n} \dfrac{1}{k}=1+\frac{1}{2}+\frac{1}{3}+\frac{1}{4}+\frac{1}{5}+\frac{1}{6}\cdots+\dfrac{1}{n}<1+\log n}$$
これは、
$${\displaystyle\int_{k}^{k+1}\frac{1}{x}dx< \frac{1}{k}<\int_{k-1}^{k}\frac{1}{x}dx}$$から導くことができます。それでは、早速これらの関係をグラフにしてみます。
import matplotlib.pyplot as plt
import numpy as np
plt.style.use('seaborn-poster')
n = 15
x = np.arange(1, 2**n+1)
#1/nの合計
sigma=0
func=[]
for i in x:
sigma+=(1/i)
func.append(sigma)
func_np=np.array(func)
j=0
func2=[]
sigma=0
for i in x:
sigma+=1/(2**j)
func2.append(sigma)
if i==2**j:
j+=1
func2_np=np.array(func2)
#グラフの作成
formula=[np.log(x)+1,func_np,np.log(x+1),func2_np,]
labels = [r'$1+\log{n}$',r'$\sum \frac{1}{x}$',r'$\log(n+1)$',r'$\frac{2}{n}+1$']
colors=['k','r','y','b']
plt.figure(figsize = (10,8))
for fx, label, color in zip(formula, labels,colors):
plt.plot(x,fx, color, label = label)
plt.grid()
plt.title(r'$\sum \frac{1}{x}$と$1+\log{n},\log{n+1}$の関係',fontname="MS Gothic")
plt.xlabel('x')
plt.ylabel('y')
plt.legend()
赤い線$${\sum \frac{1}{x}}$$は、黒い線$${\log n +1}$$と黄色い線$${\log(n+1)}$$の間を通っています。しかもxを大きくしていくと3本の線はほぼ同じ間隔を保ったまま増えており、青い線$${\frac{2}{n}+1}$$よりもはるかに近いところを通っていることがわかります。
そこで、今度は$${\sum \frac{1}{x}}$$と$${\log n}$$の差がどのような値になるかを見てみます。
import matplotlib.pyplot as plt
import numpy as np
plt.style.use('seaborn-poster')
n = 100
x = np.arange(1, n+1)
gamma=0.5772156649
#1/nの合計
sigma=0
func=[]
for i in x:
sigma+=(1/i)
func.append(sigma)
func_np=np.array(func)
logx=np.array(func)-np.log(x)
#グラフの作成
formula=[logx,np.full(n, gamma)]
labels = [r'$\sum \frac{1}{x}-\log n$',r'0.5772156649']
colors=['g','r']
plt.figure(figsize = (10,8))
for fx, label, color in zip(formula, labels,colors):
plt.plot(x,fx, color, label = label)
plt.grid()
plt.title(r'$\sum \frac{1}{x}$と$\log n$の関係',fontname='MS Gothic')
plt.xlabel('x')
plt.ylabel('y')
plt.ylim(0.576,1)
plt.legend()
グラフにすると、$${x=1}$$のときは$${\log 1=0}$$なので、差は1と大きく開いていきますが、$${x=20}$$あたりから急速に差が小さくなり0.57あたりに収束していくのがわかります。実は$${\displaystyle \sum_{k=1}^{n} \dfrac{1}{k}-\log n \fallingdotseq 0.5772156649}$$となり、この収束値はオイラー定数といい、一般的に $${\gamma}$$で表現しています。それでは、オイラー定数をx=100,000まで計算してみます。
from fractions import Fraction
l=[1,2,3,4,5,6,7,8,9,10,100,1000,10000,100000]
sigma=0
for i in range(1,100001):
sigma+=Fraction(1,i)
if i in l:
print(f'{i:>8} {sigma-np.log(i)}')
#output
1 1.0
2 0.8068528194400547
3 0.7347210446652235
4 0.6970389722134429
5 0.6738954208992329
6 0.6582405307719452
7 0.6469469938018297
8 0.6384156011773072
9 0.6317436766320346
10 0.6263831609742079
100 0.5822073316515288
1000 0.5777155815682082
10000 0.5772656640681983
100000 0.5772206648931988
正確を期すために、fractionsモジュールのFractionクラスを使っています。
x=1,000で小数点第3位(0.577)、x=10,000で第4位(0.5772)、しかしx=100,000でも第5位(0.57721)まで迫ることができませんでした。さらに、頑張る必要がありそうです。
ということで、数学的には大雑把ですがオイラー定数について直感的に理解できるのではないかと思います。
この記事が気に入ったらサポートをしてみませんか?