はじめに
無理数に収束する級数を考えたとき、計算機を用いた数値計算を行うことで、その無理数の近似値を求めるという方法がある。今回は、ある無理関数で表される級数がある値(無理数)に収束することを示し、pythonを用いてその値の近似値を計算する。
問題
以下のような数列$a_n$を考える。このとき、極限$\lim_{n\to \infty} a_n$はある値に収束することを示し、その値を求めよ。
a_1=1,a_{n+1}=\sqrt{1+a_n}
証明
まず、上記数列が上限(ある値に対してそれ以上にどんなに頑張ってもそれを超せない)かつ$n$に対して単調増加であることを示す。これにより、収束値を持つことが分かる。
収束することについて
上限について
$a_n<2$を示す。
帰納法を用いて考える。$a_n<2$としたときに、
a_{n+1}=\sqrt{1+a_n}<\sqrt{1+2}=\sqrt{3}<2
単調増加について
まず、$a_{n+1}>a_n$を示す。$n\ge2$のとき、
a_{n+1}^2-a_n^2=(\sqrt{1+a_n})^2-a_n^2=1+a_n-a_n^2=(1+a_n)-(1-a_{n-1})=a_n-a_{n-1}
となる。ただし、$a_{n}=\sqrt{1+a_{n-1}}$を用いた。
ここで、$a_2-a_1=\sqrt{2}-1>0$より、
a_{3}^2-a_2^2=a_2-a_{1}>0
となるので、$a_3>a_2$となる。このように、帰納的に計算していくことで、
a_n>a_{n-1}>\cdot \cdot \cdot >a_2>a_1
収束値
上記の考察により、$\lim_{n\to \infty} a_n=\alpha (\alpha>0)$ となる実数$\alpha$が存在するはずである。これを示す。
したがって、$\lim_{n\to \infty} a_n=lim_{n\to \infty} a_{n+1}=\alpha$が成立するため、
a_{n+1}=\sqrt{1+a_n}
より、特性方程式
\alpha=\sqrt{1+\alpha}
を得られる。
したがって、両辺を2乗して、それぞれを引くと、
a_{n+1}^2-\alpha^2 =(1+a_n)-(1+\alpha)=a_n-\alpha
したがって、
(a_{n+1}-\alpha )(a_{n+1}+\alpha )=a_n-\alpha
ゆえに、
a_{n+1}-\alpha =\frac{1}{a_{n+1}+\alpha }(a_n-\alpha)
ここで、$\frac{1}{a_{n+1}+\alpha }<1$より、
帰納的に、$n\to \infty$のとき、$\lim_{n\to \infty} |a_n-\alpha|=0$
これにより、
$\lim_{n\to \infty} a_n=\alpha$ただし$\alpha=\frac{1+\sqrt{5}}{2}$であることが分かる。
プログラム
無理数の近似値
$\lim_{n\to \infty} a_n=\frac{1+\sqrt{5}}{2}$であることからその数についての近似値を推定するプログラムを作成した。
import numpy as np
import matplotlib.pyplot as plt
import japanize_matplotlib
import math
num=100
a_ary=[]
i_ary=[]
a=1
for i in range(num):
a=(1+a)**0.5
a_ary.append(a)
i_ary.append(i+1)
plt.xlabel("n")
plt.ylabel("an")
plt.plot(i_ary,a_ary)
plt.savefig("収束の様子.png")
plt.show()
これを実行すると以下のとおりである。
このように、$a_n$は、単調増加かつ上限が存在するということが分かる。
図形的解釈
一方で、以下のようなプログラムを作成する。
import numpy as np
import matplotlib.pyplot as plt
import japanize_matplotlib
import math
n=100
x=np.linspace(-1,3,n)
y=(1+x)**0.5
plt.plot(x,y)
plt.plot(x,x,color="red")
num=10
a=1
a_ary=[0]
for i in range(num):
a_ary.append(a)
a=(1+a)**0.5
for i in range(3,num):
xx=np.linspace(a_ary[i-3],a_ary[i-2],n)
yy=a_ary[i-2]*np.ones(n)
plt.plot(xx,yy,color="black")
yy=np.linspace(a_ary[i-2],a_ary[i-1],n)
xx=a_ary[i-2]*np.ones(n)
plt.plot(xx,yy,color="black")
# x軸(y=0)を引く
plt.axhline(y=0, color='black', linewidth=1)
# y軸(x=0)を引く
plt.axvline(x=0, color='black', linewidth=1)
plt.savefig("級数の極限.png")
plt.show()
このグラフの解釈は、$y$軸状上の点である$(a_1,0)$から$(a_1,a_1),(a_1,a_2),(a_2,a_2)\cdot\cdot\cdot (a_n,a_n)\cdot\cdot\cdot$と点を繋いでいくと、$y=x$と$y=\sqrt{1+x}$との交点に最終的には収束するという解釈である。
まとめ
今回は、数列で表される級数の極限について議論した。具体的には、ある無理関数で表される級数について、それがある無理数に収束することを前半で示した。また、後半ではプログラムを用いてその値の近似値を算出することも試みた。