Pythonで漸化式を解こう!SymPyを使った数列の扱い方



1. SymPyで漸化式を解く
SymPyを使用して漸化式に基づく数列を解くことができます。漸化式は、数列の各項が前の項や前のいくつかの項に依存する形式で定義されます。SymPyのrsolve
メソッドを使用して漸化式を解くことができます。
1.1. 実行環境
- SymPy 1.13.0
- Python 3.12.4
2. 漸化式を解く基本的な方法
2.1. 簡単な漸化式

例えば、次の関係を持つ数列を解くことを考えます。 \[ a_n = 3a_{n-1} + 2 \] この漸化式の一般項を求めます。
import sympy as sp
# シンボリック変数の定義
n = sp.symbols('n')
a_n = sp.Function('a')(n)
# 漸化式の定義
recurrence_relation = sp.Eq(a_n, 3*a_n.subs(n, n-1) + 2)
# 漸化式の一般項
solution = sp.rsolve(recurrence_relation, a_n)
このコードは、漸化式 \( a_n = 3a_{n-1} + 2 \) の一般項を計算し、結果を表示します。出力は次のようになります。
2.2. 初期条件を含む漸化式

初期条件を含む漸化式を解く例を示します。例えば、次の漸化式と初期条件を持つ数列を解きます。\[ a_n = 2a_{n-1} + 1 \] \[ a_0 = 100\]
import sympy as sp
# シンボリック変数の定義
a_n = sp.Function('a')(n)
a_n_1 = sp.Function('a')(n - 1)
# 漸化式の定義
recurrence_relation = sp.Eq(a_n, 2*a_n_1 + 1)
# 初期条件の定義
initial_condition = sp.Eq(a_n.subs(n, 0), 1)
# 漸化式の一般項
solution = sp.rsolve(recurrence_relation, a_n, {a_n.subs(n, 0): 1})
このコードは、漸化式 \( a_n = 2a_{n-1} + 1 \) と初期条件 \( a_0 = 100 \) の一般項を計算し、結果を表示します。出力は次のようになります。
2.3. 三項間漸化式

三項間漸化式を解く例を示します。例えば、次のフィボナッチ数列を解きます。 \[ a_n = a_{n-1} + a_{n-2} \]
import sympy as sp
# シンボリック変数の定義
a_n = sp.Function('a')(n)
a_n_1 = sp.Function('a')(n - 1)
a_n_2 = sp.Function('a')(n - 2)
# 漸化式の定義
recurrence_relation = sp.Eq(a_n, a_n_1 + a_n_2)
# 初期条件の定義
initial_conditions = {a_n.subs(n, 0): 0, a_n.subs(n, 1): 1}
# 漸化式の解
solution = sp.rsolve(recurrence_relation, a_n, initial_conditions)
このコードは、漸化式 \( a_n = a_{n-1} + a_{n-2} \) と初期条件 \( a_0 = 0 \), \( a_1 = 1 \) の一般項を計算し、結果を表示します。出力は次のようになります。
2.4. シンボリック変数を含む漸化式
シンボリック変数(任意の変数)を含む漸化式を解くこともできます。例えば、次の漸化式の数列を解きます。 \[ a_n = ka_{n-1} + c \]
import sympy as sp
# シンボリック変数の定義
k, c = sp.symbols('k c')
a_n = sp.Function('a')(n)
a_n_1 = sp.Function('a')(n - 1)
# 漸化式の定義
recurrence_relation = sp.Eq(a_n, k*a_n_1 + c)
# 漸化式の解
solution = sp.rsolve(recurrence_relation, a_n)
このコードは、シンボリックな漸化式 \( a_n = ka_{n-1} + c \) の一般項を計算し、結果を表示します。出力は次のようになります。

