コラム 人と星とともにある数学 数学

SymPyで漸化式を解く 前編|Pythonで数学を学ぼう! 第30回

漸化式の漸は「じわりじわり」の意味

数列間の関係式が漸化式です。漸化式の特徴は再帰的であることです。各項がそれ以前の項の関数として定義されるということです。

初項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

  • この記事を書いた人
  • 最新記事

桜井進(さくらいすすむ)様

1968年山形県生まれ。 サイエンスナビゲーター®。株式会社sakurAi Science Factory 代表取締役CEO。 (略歴) 東京工業大学理学部数学科卒、同大学大学院院社会理工学研究科博士課程中退。 東京理科大学大学院非常勤講師。 理数教育研究所Rimse「算数・数学の自由研究」中央審査委員。 高校数学教科書「数学活用」(啓林館)著者。 公益財団法人 中央教育研究所 理事。 国土地理院研究評価委員会委員。 2000年にサイエンスナビゲーターを名乗り、数学の驚きと感動を伝える講演活動をスタート。東京工業大学世界文明センターフェローを経て現在に至る。 子どもから大人までを対象とした講演会は年間70回以上。 全国で反響を呼び、テレビ・新聞・雑誌など様々なメディアに出演。 著書に『感動する!数学』『わくわく数の世界の大冒険』『面白くて眠れなくなる数学』など50冊以上。 サイエンスナビゲーターは株式会社sakurAi Science Factoryの登録商標です。

あわせて読みたい

-コラム, 人と星とともにある数学, 数学
-,