階差数列と元の数列を同時に折れ線グラフで表示するコードを紹介します。

数列 $\{ a_n \}$, 階差数列 $\{b_n\}$, さらに階差数列 $\{ c_n\}$ といった3段階を折れ線グラフで観察しましょう。

【Python】階差数列の増減を観察する

階差数列と元の数列を折れ線グラフで表示するPythonコード

次のコードを入力すれば、元の数列から階差数列, 2階差数列を折れ線グラフで表示できます。

元の数列 $\{ a_n \}$ をseqで指定し, 階差数列 $\{ b_n \}$ をdiff1, 2階差の数列をdiff2としています。

これらをmatplotlib.pyplotplotで折れ線グラフにしています。

import numpy as np
import matplotlib.pyplot as plt

# 数列
seq = np.array([3, 7, 10, 15, 18, 20]) 

# 階差
diff1 = np.diff(seq)
diff2 = np.diff(seq, n=2)

# 描画
plt.plot(range(len(seq)), seq, marker='o', label='Original')
plt.plot(range(1, len(seq)), diff1, marker='s', label='1st Difference')
plt.plot(range(2, len(seq)), diff2, marker='^', label='2nd Difference')

plt.xticks(np.arange(0, len(seq), 1)) #横軸の目盛の間隔を「1」

plt.grid(True)
plt.legend()
plt.title("Sequence and Differences")
plt.xlabel("Index")
plt.ylabel("Value")
plt.tight_layout()
plt.show()

折れ線グラフの表示結果

正確な観察のためのPythonコード(おまけ)

今回の観察と結果は、簡単のために上で述べたコードで実施しました。

しかし、「横軸のメモリを $1$ からにする」「横軸と縦軸のメモリの幅を揃える」の2点を課した方が正確な観察ができます。おまけとして掲載しておきます。

import numpy as np
import matplotlib.pyplot as plt

#数列
seq = np.array([3, 7, 10, 15, 18, 20])

#階差
diff1 = np.diff(seq)
diff2 = np.diff(seq, n=2)

#描画
fig, ax = plt.subplots(figsize=(5,5))  # 正方形キャンバス

ax.plot(range(1, len(seq)+1), seq, marker='o', label='Original Sequence')
ax.plot(range(2, len(seq)+1), diff1, marker='s', label='1st Difference')
ax.plot(range(3, len(seq)+1), diff2, marker='^', label='2nd Difference')

ax.set_xticks(np.arange(1, len(seq)+1))
ax.set_aspect('equal', adjustable='box')  # 縦横の目盛りの間隔を揃える

ax.grid(True)
ax.legend()
plt.tight_layout()
plt.show()

【観察】階差数列の増減を観る

①2次関数的な数列の観察

数列を $\{a_n\}: 2, 8, 18, 32, 50, 72$ とします。

結果のグラフは次の通りでした。

元の数列は急速に増えていますが、階差数列はまっすぐ増えています。

②1次関数的な数列の観察

数列を $\{a_n\}: 3, 5, 7, 9, 11, 13$ とします。

結果のグラフは次の通りでした。

元の数列が直線的に増えている場合, 階差数列は一定の値でした。

さらに, 2階差の数列は $0$ で横ばいなので, 階差数列の値に変化がないということを示しています。

③指数的な数列の観察

数列を $\{a_n\}: 1, 2, 4, 8, 16, 32$ とします。

結果のグラフは次の通りでした。

元の数列が指数的に増えている様子が分かります。階差数列とその階差数列も指数的に増えている様子が窺えます。

今回は以上です。お読みいただき、ありがとうございます。
微分してるみたいですね!積分もできそう!

コメントを残す