本記事ではPythonで漸化式を計算する方法を解説します。
Pythonで漸化式を計算するために、SymPyというライブラリを使用します。
SymPyをインストールする
Pythonで漸化式を解くためにSymPyというライブラリをインストールします。
SymPyは代数計算ができます。漸化式の計算以外にも、連立方程式、微分、積分、分数、素因数分解など様々な計算が可能です。
pip install sympy
漸化式の実装について
漸化式には様々な種類のものがありますが、今回は下記の
- 等差数列
- 等比数列
- 階差数列
について解説してゆきます。
等差数列
例えば、2, 5, 8, 11,…という初項2、公差3の等差数列を考えましょう。
これを漸化式に変換すると、下記の通りになります。
\begin{eqnarray} a_{1} = 2、a_{n} – a_{n-1} = 3 \end{eqnarray}
この漸化式を下記のように0 = (式)の形式に変換する必要があります。
\begin{eqnarray} a_{1} = 2、a_{n} – a_{n-1} -3 = 0 \end{eqnarray}
それではSymPyを使用して解いてみましょう。
# ①ライブラリのインポート
import sympy
# ②変数の定義
sympy.var('n')
# ③関数の定義
a = sympy.Function('a')
# ④漸化式の定義
f = a(n)-a(n-1)-3
# ⑤漸化式の計算
sympy.rsolve(f, a(n), {a(1):2})
- ①ライブラリのインポート
まず、SymPyライブラリをインポートします。
- ②変数の定義
続いて変数を定義します。ここでは
n
を変数として定義しております。 - ③関数の定義
続いて関数を定義します。ここでは
a
を関数として定義しております。 - ④漸化式の定義
漸化式を定義します。先ほど0=(式)の形に変換した際の(式)の部分を
f
に代入します。 - ⑤漸化式の計算
sympy.rsolve
で漸化式を解きます。
第一引数には漸化式を与えます。
第二引数には解かれるべき関数を入力します。
第三引数には初項の値を与えます。
先程のコードを実際に実行すると下記の通りの結果となります。

漸化式は下記の結果になります。
\begin{eqnarray} a_{n} = 3n – 1 \end{eqnarray}
等比数列
例えば、2, 6, 18, 54,…という初項2、公比3の等差数列を考えましょう。
これを漸化式に変換すると、下記の通りになります。
\begin{eqnarray} a_{1} &=& 2 \\ a_{n} &=& 3a_{n-1} \end{eqnarray}
等差数列と同様に漸化式を下記のように0 = (式)の形式に変換します。
\begin{eqnarray} a_{1} = 2、a_{n} – 3a_{n-1} = 0 \end{eqnarray}
それではSymPyを使用して解いてみましょう。
# ①ライブラリのインポート
import sympy
# ②変数の定義
sympy.var('n')
# ③関数の定義
a = sympy.Function('a')
# ④漸化式の定義
f = a(n)-3*a(n-1)
# ⑤漸化式の計算
sympy.rsolve(f, a(n), {a(1):2})
先程のコードを実際に実行すると下記の通りの結果となります。

漸化式は下記の結果になります。
\begin{eqnarray} a_{n} = 2・3^{n-1} \end{eqnarray}
階差数列
最後に、1, 3, 6, 10, 15…という初項1、公差nの階差数列を考えましょう。
これを漸化式に変換すると、下記の通りになります。
\begin{eqnarray} a_{1} = 1、a_{n} = a_{n-1} + n \end{eqnarray}
等差数列と同様に漸化式を下記のように0 = (式)の形式に変換します。
\begin{eqnarray} a_{1} = 2、a_{n} – a_{n-1} – n = 0 \end{eqnarray}
それではSymPyを使用して解いてみましょう。
# ①ライブラリのインポート
import sympy
# ②変数の定義
sympy.var('n')
# ③関数の定義
a = sympy.Function('a')
# ④漸化式の定義
f = a(n)-a(n-1)-n
# ⑤漸化式の計算
sympy.rsolve(f, a(n), {a(1):1})
先程のコードを実際に実行すると下記の通りの結果となります。

漸化式は下記の結果になります。
\begin{eqnarray} a_{n} = \frac{1}{2}n(n-1) \end{eqnarray}
