Pythonでは、変数に対して計算を行った結果を元の変数に代入する際に、複合代入演算子を用いて簡潔な書き方をすることができます。これはC言語などの多くのプログラミング言語に共通するものであり、覚えておくと便利です。
通常の書き方 | 複合代入演算子を用いた書き方 |
---|---|
x = x+a | x += a |
x = x-a | x -= a |
x = x*a | x *= a |
x = x/a | x /= a |
x = 1
print(x)
x += 2
print(x)
x -= 2
print(x)
x *= 2
print(x)
x /= 2
print(x)
1 3 1 2 1.0
ただし、1を加算するインクリメント演算子++
と1を減算するデクリメント演算子--
は、Pythonでは使用できません。
import matplotlib.pyplot as plt
import文でasを使うと、ライブラリに別名(省略名)を付けることができます。matplotlib.pyplotの場合は、慣例的に別名としてpltを使います。
次のコードのように、plot関数を使うと折れ線グラフを描画することができます。
import matplotlib.pyplot as plt
x = [1,2,3,4,5] #x座標が格納されたリストと
y1 = [30,10,50,20,40] #y座標が格納されたリストを用意しておく
y2 = [20,30,20,30,20]
plt.plot(x,y1) #2つのリストの各要素の組を点として結び、折れ線グラフを描画する
plt.plot(x,y2)
plt.show() #グラフを表示する(Notebookの場合、無くてもグラフの表示はされる)
plot関数の3つ目の引数では、色、マーカーのスタイル、線のスタイルを指定可能です。
import matplotlib.pyplot as plt
x = [1,2,3,4,5]
y1 = [30,10,50,20,40]
y2 = [20,30,20,30,20]
y3 = [35,35,35,35,35]
plt.plot(x,y1,"ro-") #色は赤、マーカーは丸、線は実線
plt.plot(x,y2,"gd--") #色は緑、マーカーはダイヤモンド、線は破線
plt.plot(x,y3,"bv:") #色は青、マーカーは下三角、線は点線
plt.show()
また、次のコードのように、グラフに様々な装飾を施すことができます。
import matplotlib.pyplot as plt
x = [1,2,3,4,5]
y1 = [30,10,50,20,40]
y2 = [20,30,20,30,20]
y3 = [35,35,35,35,35]
plt.plot(x,y1,"ro-")
plt.plot(x,y2,"gd--")
plt.plot(x,y3,"bv:")
plt.grid() #グリッド線を引く
plt.title("Graph Title") #グラフタイトルを設定する(全角文字は使用不可)
plt.legend(["a","b","c"]) #凡例を設定する(全角文字は使用不可)
plt.show()
ご存知のように、数列は収束する数列と発散する数列に分けられます。さらに、発散する数列は正の無限大に発散する数列、負の無限大に発散する数列、振動する数列に分けられます。
数学的な定義は、次の通りです。
数列 $\{a_n\}$ が実数 $\alpha$ に収束する $\overset{\mathrm{def}}{\iff}$ 任意の $\varepsilon>0$ に対してある自然数 $N$ が存在し、任意の自然数 $n\geq N$ に対して $|a_n-\alpha|<\varepsilon$ が成り立つ。
数列 $\{a_n\}$ が正の無限大に発散する $\overset{\mathrm{def}}{\iff}$ 任意の $K>0$ に対してある自然数 $N$ が存在し、任意の自然数 $n\geq N$ に対して $a_n>K$ が成り立つ。
数列 $\{a_n\}$ が負の無限大に発散する $\overset{\mathrm{def}}{\iff}$ 任意の $K<0$ に対してある自然数 $N$ が存在し、任意の自然数 $n\geq N$ に対して $a_n<K$ が成り立つ。
数列 $\{a_n\}$ が振動する $\overset{\mathrm{def}}{\iff}$ $\{a_n\}$ がどの実数にも収束しない、かつ、正の無限大にも負の無限大にも発散しない。
以下では、数列のグラフをプログラムで描画することによって、収束・発散の様子を確認します。
次の式で定まる数列 $\{a_n\}$ と $\{b_n\}$ に対して、第1項から第50項までを用いてグラフを描画してみます。
$$ a_n=\left(1+\frac{1}{n}\right)^n, \quad b_n=\left(1+\frac{1}{n}\right)^{n+1} $$import matplotlib.pyplot as plt
n_list = range(1,51) #1~50の整数のリスト(正確にはlist型ではなくrange型)
a_list = []
b_list = []
for n in n_list:
a_list.append((1+1/n)**n) #a_nの各項をリストに追加する
b_list.append((1+1/n)**(n+1)) #b_nの各項をリストに追加する
plt.plot(n_list,a_list,".-") #a_nのグラフを描画する
plt.plot(n_list,b_list,".-") #b_nのグラフを描画する
plt.grid()
plt.legend(["$a_n$","$b_n$"]) #凡例として、LaTeXの数式の記法が使える
plt.show()
数列 $\{a_n\}$ と $\{b_n\}$ はどちらもネイピア数 $e=2.71828\ldots$ に収束することが数式から分かりますが、グラフでもその様子が観察できます。また、$\{a_n\}$ は単調増加、$\{b_n\}$ は単調減少な数列であることが確認できます。
収束する数列、正の無限大(または負の無限大)に発散する数列、振動する数列をそれぞれ一つ考え、第1項から第50項までを用いてグラフを描画してください。ただし、考えた数列の説明(定義式)も書くこと。
(Markdownとして、考えた数列の説明(定義式)を書く)
#演習1のコード
import matplotlib.pyplot as plt
n_list = range(1,51)
#ここに、コードを書いてください
数列の無限個の項の和のことを、級数(無限級数)といいます。数列 $\{a_n\}$ に対しては、級数 $\sum_{n=1}^{\infty}a_n$ を考えることができます。
級数を定める数列の第1項から第 $n$ 項までの和、すなわち $S_n=\sum_{k=1}^{n}a_k$ を第 $n$ 部分和といいます。級数の収束・発散の定義は、次の通りです。
級数 $\sum_{n=1}^{\infty}a_n$ が実数 $\beta$ に収束する $\overset{\mathrm{def}}{\iff}$ 部分和の数列 $\{S_n\}$ が $\beta$ に収束する。
級数 $\sum_{n=1}^{\infty}a_n$ が発散する $\overset{\mathrm{def}}{\iff}$ 部分和の数列 $\{S_n\}$ が発散する。
以下では、級数のグラフ(正確には級数の部分和の数列のグラフ)をプログラムで描画することによって、収束・発散の様子を確認します。
次の式で定まる数列 $\{a_n\}$ に対して、級数 $\sum_{n=1}^{\infty}a_n$ の部分和の数列 $\{S_n\}$ の第1項から第50項までを用いてグラフを描画してみます。
$$ a_n=\left(\frac{1}{3}\right)^n $$import matplotlib.pyplot as plt
n_list = range(1,51)
a_list = []
S_list = []
for n in n_list:
a_list.append((1/3)**n) #a_nの各項をリストに追加する
S = 0
for a in a_list:
S = S+a
S_list.append(S) #S_nの各項をリストに追加する
plt.plot(n_list,S_list,".-") #S_nのグラフを描画する
plt.grid()
plt.legend(["$S_n$"])
plt.show()
級数 $\sum_{n=1}^{\infty}\left(\frac{1}{3}\right)^n$ は $\frac{\frac{1}{3}}{1-\frac{1}{3}}=\frac{1}{2}$ に収束することが数式から分かりますが、グラフでもその様子が観察できます。
$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項までを用いてグラフを描画してください。ただし、五つのグラフをなるべく一つの図にまとめて表示すること。
#演習2のコード
import matplotlib.pyplot as plt
n_list = range(1,51)
#ここに、コードを書いてください
級数の収束・発散という観点で、演習2に関する考察を書いてください。
(Markdownとして考察を書く)
演習1~演習3に取り組んでください。