目次
漸化式の漸は「じわりじわり」の意味
数列間の関係式が漸化式です。漸化式の特徴は再帰的であることです。各項がそれ以前の項の関数として定義されるということです。
初項a0が与えられるとa1が得られ、次にa1からa2が得られ、a2からa3が得られるというように「じわりじわり」数列の項が得られていきます。a10の値を知りたい場合にはa0からa9までを求める必要があります。
この様子が「漸」には込められています。会意文字「車+斤」で、車に斤の刃をくいこまくいこませて切ること、割れ目にくいこむ意味があり、水を表す「氵」で、水がその割れ目にじわりじわりしみこむことを表しています。日本語の漸化式は見事なネーミングです。
一気にa10の値を知るもう一つの方法が一般項を求めることです。第n項anをnの式で表すことができれば、nに10を代入すればa10の値が計算できます。
Pythonでは「じわりじわり」解くのが「def文」、一般項を求めるのが「sympy.rsolve」です。前編と後編に分けてみていきます。
漸化式を「じわりじわり」解く「def文」
漸化式をdef文に翻訳するところにコツがあります。2項間漸化式、フィボナッチ数列、トリボナッチ数列の3つの漸化式を例にそのコツを見ていきます。
まず準備として、与えられた漸化式のnのナンバリングを第n項と第n-1項に変換しておきます。
1行目:def文として漸化式左辺のa(n)を定義します。
2行目:初項をifとreturnを使って定義します。
3行目:eles:return 【漸化式右辺】
これが関数の再帰的定義です。関数a(n)の定義の中でその関数自身a(n-1)が登場します。これを再帰的(recursive)といいます。それゆえ漸化式は英語でrecurrence relation(再帰的関係式)と呼ばれます。
第10項まで計算した実行結果は次のようになります。
フィボナッチ数列
有名なフィボナッチ数列は3項間漸化式で表されます。先の例との違いは初項F1の定義にelifを用いる点です。後は同じです。
第10項まで計算した実行結果は次のようになります。
トリボナッチ数列
4項間漸化式のフィボナッチ数列バージョンがトリボナッチ数列です。3つの初項T0、T1、T2の定義の仕方がこれで理解できます。
第19項まで計算した実行結果は次のようになります。
以上のように初項と漸化式のPythonコーディングはif、elif、elseの使い方のコツさえマスターすれば簡単です。
このプログラムファイル(Jupyter Notebook)は次からダウンロードできます。
https://drive.google.com/file/d/1xwb3jqkgFAPP1xfDwlvcheSfvvuHzrTp/view?usp=share_link