Julia(SymPy)で数列の漸化式を解く方法

どうも、木村(@kimu3_slime)です。

今回は、Julia(SymPy)で数列の漸化式を解く方法を紹介します。

 



準備

SymPyを使うので、持っていなければインストールしておきましょう。

準備として、以下のコードを実行しておきます。

 

数列の漸化式を解く方法

最初に、変数\(n\)と関数(数列)\(a(n)\)を記号として用意しておきます。

 

「Eq(左辺,右辺)」で解きたい漸化式を表現しましょう。

\[ \begin{aligned}a{\left(n + 1 \right)} = a{\left(n \right)} – 3\end{aligned} \]

「rsolve(方程式, 数列)」で漸化式を解くことができます。漸化式=再帰関係式(recurrence relation)の頭文字rです。

\[ \begin{aligned}- 2 C_{0} – 3 n\end{aligned} \]

解として、等差数列が得られました。初期値を指定していないので、定数\(C_0\)が含まれています。

「Dict(a(1)=>2)」のように辞書型によって初期値(初項)を指定して解けます。

\[ \begin{aligned}5 – 3 n\end{aligned} \]

 

比が一定となる漸化式を解けば、

\[ \begin{aligned}a{\left(n + 1 \right)} = 2 a{\left(n \right)}\end{aligned} \]

\[ \begin{aligned}2^{n} C_{0}\end{aligned} \]

等比数列が得られました。

 

比がだんだんと変わるような漸化式を解けば

\[ \begin{aligned}a{\left(n + 1 \right)} = \left(2 n + 2\right) a{\left(n \right)}\end{aligned} \]

\[ \begin{aligned}2^{n} C_{0} n!\end{aligned} \]

階乗を含む解が得られます。

 

最後に、フィボナッチ数列の漸化式

\[ \begin{aligned}a_{n+2} = a_{n+1}+a_n,\quad a_1=1,a_2=1\end{aligned} \]

を解いてみましょう。

\[ \begin{aligned}a{\left(n + 2 \right)} = a{\left(n \right)} + a{\left(n + 1 \right)}\end{aligned} \]

\[ \begin{aligned}C_{0} \left(\frac{1}{2} – \frac{\sqrt{5}}{2}\right)^{n} + C_{1} \left(\frac{1}{2} + \frac{\sqrt{5}}{2}\right)^{n}\end{aligned} \]

\[ \begin{aligned}- \frac{\sqrt{5} \left(\frac{1}{2} – \frac{\sqrt{5}}{2}\right)^{n}}{5} + \frac{\sqrt{5} \left(\frac{1}{2} + \frac{\sqrt{5}}{2}\right)^{n}}{5}\end{aligned} \]

一般項がきちんと求められました。

「数式.subs(変数,値)」で値を代入して、数列の最初の項を表示してみましょう。

 

以上、Julia(SymPy)で数列の漸化式を解く方法を紹介してきました。

コンピュータで漸化式を計算するとなると、for文を使って初項から再帰的に求めるのが普通ですが、それだと一般項の形はわかりません。SymPyでは、それが代数的に求められるのが嬉しいですね。

木村すらいむ(@kimu3_slime)でした。ではでは。

 

1から始める Juliaプログラミング
進藤 裕之(著), 佐藤 建太(著)
コロナ社 (2020-03-26T00:00:01Z)
5つ星のうち4.5
¥7,353 (コレクター商品)

 

こちらもおすすめ

漸化式(フィボナッチ数列)を線形代数(線形空間、固有ベクトル)で解く方法を解説

Julia(SymPy)で数列の和、無限級数、べき級数を求める方法