収束する数列、正の無限大(または負の無限大)に発散する数列、振動する数列をそれぞれ一つ考え、第1項から第50項までを用いてグラフを描画してください。ただし、考えた数列の説明(定義式)も書くこと。
$0$ に収束する数列
$$ a_n=\frac{10}{n}, $$正の無限大に発散する数列
$$ b_n=\sqrt{n}, $$振動する数列
$$ c_n=\sin\frac{n}{2} $$のグラフを描画する。
import matplotlib.pyplot as plt
import math #数学関数を使う場合に必要
n_list = range(1,51)
a_list = []
b_list = []
c_list = []
for n in n_list:
a_list.append(10/n)
b_list.append(n**(1/2))
c_list.append(math.sin(n/2))
plt.plot(n_list,a_list,".-")
plt.plot(n_list,b_list,".-")
plt.plot(n_list,c_list,".-")
plt.grid()
plt.legend(["$a_n$","$b_n$","$c_n$"])
plt.show()
# 3つのグラフを一つの図にまとめて表示する際にスケールに差があるとグラフがつぶれてしまうため、注意!
$p$ を正の実数とし、次の式で定まる数列 $\{a^p_n\}$ に対して、級数 $\sum_{n=1}^{\infty}a^p_n$ の部分和 $S^p_n=\sum_{k=1}^{n}a^p_k$ を考えます。
$$ a^p_n=\frac{1}{n^p} $$$p=0.1,0.5,1,2,4$ の各場合について、部分和の数列 $\{S^p_n\}$ の第1項から第50項までを用いてグラフを描画してください。ただし、五つのグラフをなるべく一つの図にまとめて表示すること。
import matplotlib.pyplot as plt
n_list = range(1,51)
p_list = [0.1,0.5,1,2,4] #pの値をリストに格納しておく
for p in p_list: #pの値それぞれに対して処理を行う
a_list = []
for n in n_list:
a_list.append(1/n**p) #a_listを作成せずにコードをより簡潔にする方法もある
S_list = []
S = 0
for a in a_list:
S = S+a
S_list.append(S)
plt.plot(n_list,S_list,".-",label="$p="+str(p)+"$")
#前回の授業で教えていないが、凡例として表示する文字列をplotの際に指定できる
#ここまでがfor文で繰り返される
plt.grid()
plt.legend() #表示する文字列を既にlabelで指定しているので、引数は不要
plt.show()
級数の収束・発散という観点で、演習2に関する考察を書いてください。
上のグラフから、$p=0.1,0.5$ の場合は級数が発散し、$p=1,2,4$ の場合は級数が収束するように見える。
一方で、演習2で扱った級数は $p$ についての関数として考えた際に有名なゼータ関数(リーマンゼータ関数)に一致し、$0<p\leq 1$ では発散し、$1<p$ では収束することが知られている。
$p=1$ の場合の級数は調和級数と呼ばれ、グラフの見え方が数学的な結果に反するのはその発散が非常に遅いためである。