
階差数列と元の数列を同時に折れ線グラフで表示するコードを紹介します。
数列 $\{ a_n \}$, 階差数列 $\{b_n\}$, さらに階差数列 $\{ c_n\}$ といった3段階を折れ線グラフで観察しましょう。
目次
【Python】階差数列の増減を観察する
階差数列と元の数列を折れ線グラフで表示するPythonコード
次のコードを入力すれば、元の数列から階差数列, 2階差数列を折れ線グラフで表示できます。
元の数列 $\{ a_n \}$ をseqで指定し, 階差数列 $\{ b_n \}$ をdiff1
, 2階差の数列をdiff2
としています。
これらをmatplotlib.pyplot
のplot
で折れ線グラフにしています。
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$ とします。
結果のグラフは次の通りでした。

元の数列が指数的に増えている様子が分かります。階差数列とその階差数列も指数的に増えている様子が窺えます。
今回は以上です。お読みいただき、ありがとうございます。
微分してるみたいですね!積分もできそう!