ウサギとフィボナッチ [応用] | 逆ポーランド電卓の実践ウェブ rpn hacks!

逆ポーランド電卓の実践ウェブ rpn hacks!

逆ポーランド電卓rpnの実践ウェブ   
rpn hacks! アールピーエヌ・ハックスサイトマップ

rpn | 応用 | rpn電卓の高いポテンシャルはビジネス・実用・ゲームなどのアプリケーションにも対応。

HOME > 応用 > ウサギとフィボナッチ

hatena twitter facebook rss ソーシャルブックマーク

ウサギとフィボナッチ

 数の列と書いて数列と言います。「1 2 3 4 5 6 7 8 9 10」も数列ですし、「1 2 4 8 16 32 64 128 256 512」も数列です。難しいように思いますが、どんな数字でも一定方向に向かって並んでいれば数列です。

子供の頃に数字の並び方のルールを当てたりして遊んだことがあるかもしれません。冒頭の2例は簡単な規則で作られていて、最初の数列は単に前の数字に1を加えたもので、後の数列は前の数字を2倍にしたものですね。

前の数字に同じ値を加えて次の数字にする数列を等差数列、前の数字に同じ値を掛けて次の数字にする数列を等比数列といいます。

よほど複雑な規則でない限り、ほとんどの数列はrpn式で簡単に作れます。ちなみに冒頭の2つの数列は以下のように1行で生成できます。DOSプロンプトを起動してからrpn式を入力してください。

  >rpn @n 1 + #n @n -b 1 #n @n -r 9 | rpn 1 -c fold
  1 2 3 4 5 6 7 8 9 10

  >rpn @n 2 * #n @n -b 1 #n @n -r 9 | rpn 1 -c fold
  1 2 4 8 16 32 64 128 256 512


フィボナッチ数列

 自然界には面白い数列が多々あります。そのような数列の1つにフィボナッチ数列があります。この数列は、0と1から始まり前の二つの数字を加えた数を次に並べていくとできる数列です。

フィボナッチは中世のイタリアの数学者で、13世紀にヨーロッパにローマ数字とは異なるアラビア式数体系(0から9の数記号と位取り)を紹介した人としても有名です。

一見簡単な規則で作られるフィボナッチ数列なのですが、この数列に関して面白い問題が提起されています。

注釈ここに親ウサギのつがい(番い)がいます。親ウサギのつがいは、1つがいの子ウサギを毎月1回出産するものとします。1つがいの子ウサギは親になるのに1ヶ月が必要ですが、それ以降は1つがいの子ウサギを毎月生み続けます。数ヵ月後のウサギのつがいの合計はいくつでしょうか。ただし、ウサギは永久に死なないものとします。

有名なウサギの子孫に関する問題です。19世紀にルカという人が作りましたが、この問題はフィボナッチの数列を再発見したことを意味します。ウサギのつがい数を計算するのは、簡単そうに思えて意外に複雑です。実際に紙に書きながら確かめてみないと、つがいの総数は分からないものです。

苦労して計算したウサギ一族のつがい数を1ヶ月毎に数列にしてならべると、「1 1 2 3 5 8 13 21 …」となるはずです。これは先のフィボナッチ数列の規則に従って作られる数列と同じです。ある意味驚きですよね。

フィボナッチ数列の作り方(その1)

 さて、フィボナッチ数列は上記の生成規則に従って作っていけばいいのですが、図形を使って生成する方法もあります。興味深いので紹介しておきます。

                               (7) □□□□□□□□□□□□□
  (1)                              □□□□□□□□□□□□□
   □                              □□□□□□□□□□□□□
   |              (3)              □□□□□□□□□□□□□
   v              □□             □□□□□□□□□□□□□
  (2)             □□             □□□□□□□□□□□□□
  ■□   ---->    ■■             □□□□□□□□□□□□□
                                   □□□□□□□□□□□□□
                 |                 □□□□□□□□□□□□□
                 |                 □□□□□□□□□□□□□
                 v                 □□□□□□□□□□□□□
            (4)                    □□□□□□□□□□□□□
            □□□■■             □□□□□□□□□□□□□
            □□□■■             ■■■■■■■■■■■■■
            □□□■■             ■■■■■■■■■■■■■
                                   ■■■■■■■■■■■■■
                 |                 ■■■■■■■■■■■■■
                 |                 ■■■■■■■■■■■■■
                 |                 ■■■■■■■■■■■■■
                 |                 ■■■■■■■■■■■■■
                 |                 ■■■■■■■■■■■■■
                 |                             ^
                 v                             |
            (5)                                |
            ■■■■■         (6) ■■■■■□□□□□□□□
            ■■■■■             ■■■■■□□□□□□□□
            ■■■■■             ■■■■■□□□□□□□□
            □□□□□             ■■■■■□□□□□□□□
            □□□□□  ------->   ■■■■■□□□□□□□□
            □□□□□             ■■■■■□□□□□□□□
            □□□□□             ■■■■■□□□□□□□□
            □□□□□             ■■■■■□□□□□□□□


(1)から(7)までを順に見ていくと、(1)の□が(2)の■に変わって、(2)の□と■が全部■に変わっていくのが分かります。つまり、■は1つ前の□ということになります。それぞれの矩形の長い辺の数を数え上げると「1 2 3 5 8 13 21」になっていることが分かります。フィボナッチ数列と同じですね。

フィボナッチ数列の作り方(その2)

 次は本格的にrpnを使って、フィボナッチ数列を生成してみましょう。rpnにはrオプションという繰り返し実行機能があります。このオプションを使って、数列を10項目まで生成してみましょう。

  >rpn @a @b + #c @c @b #a @c #b -b 0 #a 1 #b @b -r 10
  1
  1
  2
  3
  5
  8
  13
  21
  34
  55
  89


-rは10回の繰り返しですが、先頭の1を先に表示するので出力は11行になります。

rpnの引数に指定したrpn式を繰り返すのがrオプションですが、rpnプログラムをファイル化して使用することができません。つまり、「rpn <fibo.rpn -r 20」のようには記述できません。

増えるウサギのつがい

 このrpn式でウサギのつがいがどれだけの速さで増えていくのかをグラフで確かめてみましょう。まずは10世代までグラフ化します。

  >rpn @a @b + #c @c @b #a @c #b -b 0 #a 1 #b @b -r 10 >tmp
  >rpn 1 -c rownum <tmp | xyp -x,10 -y,100 -s1,20 -m
  ^y 100
  |
  -
  |
  |
  -
  |                                      *
  |
  -
  |                                  *
  |
  -                              *
  |
  |                      *   *           x
  |o *   *   *   *   *                  10
  +--|---|---|---|---|---|---|---|---|--->


横軸が世代、縦軸がつがい数です。10世代目には大体60つがいくらいに増えています。120羽のウサギを想像してみると…立派な生き物の集団ですね。ちょっとした迫力があります。次はそれから10世代が過ぎた20世代までをグラフ化してみましょう。

  >rpn @a @b + #c @c @b #a @c #b -b 0 #a 1 #b @b -r 20 >tmp
  >rpn 1 -c rownum <tmp | xyp -x,20 -y,10000 -s10,2000 -m
  ^y 10000
  |
  -
  |
  |                                      *
  -
  |
  |
  -                                    *
  |
  |
  -                                  *
  |                                *
  |                              *       x
  |* * * * * * * * * * * * * * *        20
  +------------------|------------------->


グラフを見て分かるように後半急激に増えています。縦軸もメモリが100つがいから10000つがいに変わっています。初めはたったの1つがいだったウサギが20世代目には8000つがい近くにまで増えたわけです。16000羽のウサギのいる風景は大繁殖地そのものですね。

実際はウサギの寿命は8年くらいで、ウサギが出産可能になるのは生まれてから約5ヶ月です。妊娠期間は1ヶ月強なので、年に5回くらいは妊娠できるようです。フィボナッチ数列じゃありませんが、無計画に飼っていると確実に大繁殖します。

自然界に潜むフィボナッチ数列

 フィボナッチ数列はいろんな場所に潜んでいます。花びらの数は3枚、5枚、8枚、13枚が多い…。細胞分裂の数、枝分かれの数はフィボナッチ数列に従うなどです。

  例:樹木の枝分かれのイメージ

  \/ / \/ \ \/  ・・・ 8
    \/    \  \/  ・・・・・ 5
      \     _\/  ・・・・・・・ 3
        \ /     ・・・・・・・・・ 2
          |  ・・・・・・・・・・・・・・ 1
      ____|_____


そして、フィボナッチ数列にはもう1つ興味深い数値が隠れています。それは黄金比率です。

黄金比率とは数値にして約1対1.6となるもので、古代から言い伝えられている黄金の比率です。何故か、この比率に従うと人が美しいと思う形が出来上がるのです。そして、一見関連性がないと思えるフィボナッチ数列との間にも不思議な関連性があるのです。

応用応用コーナーに戻るLinkIcon

情報黄金比率との関係については、実践コーナー数学アラカルト黄金比率とフィボナッチ数列として詳しくあります。興味のある人は閲覧ください。

警告rpnプログラムを実行するには、rpn試用版かrpn標準版が必要です(バージョンの違いはこちら)。

情報foldはユーティリティーパッケージに同梱されています。rownumはカンタン分析パッケージに同梱されています。xypとnpdはrpnの姉妹ソフトウェアです。詳しくはプロダクトを参照ください。

記事閲覧ランキング (毎月初更新)

人気記事(過去1ヶ月閲覧数)

広報アプリケーションを公開中!タブ「i~v..」をご覧ください。

※応用コーナーのTOP

紹介 rpnの利用シーンはこちら…

講座初めての人のrpn基礎もどうぞ
講座しっかり学べるrpn入門もどうぞ
講座すぐに使えるdos入門もどうぞ

実践他の分野への挑戦は実践TOP

i

アプリケーションで楽しもう

広報アプリケーションを公開中!タブ「i~v..」をご覧ください。

※応用コーナーのTOP

講座初めての人のrpn基礎もどうぞ
講座しっかり学べるrpn入門もどうぞ
講座すぐに使えるdos入門もどうぞ

実践他の分野への挑戦は実践TOP

ii

アプリケーションで楽しもう

広報アプリケーションを公開中!タブ「i~v..」をご覧ください。

※応用コーナーのTOP

講座初めての人のrpn基礎もどうぞ
講座しっかり学べるrpn入門もどうぞ
講座すぐに使えるdos入門もどうぞ

実践他の分野への挑戦は実践TOP

iii

アプリケーションで楽しもう

広報アプリケーションを公開中!タブ「i~v..」をご覧ください。

※応用コーナーのTOP

講座初めての人のrpn基礎もどうぞ
講座しっかり学べるrpn入門もどうぞ
講座すぐに使えるdos入門もどうぞ

実践他の分野への挑戦は実践TOP

iv

アプリケーションで楽しもう

広報アプリケーションを公開中!タブ「i~v..」をご覧ください。

※応用コーナーのTOP

講座初めての人のrpn基礎もどうぞ
講座しっかり学べるrpn入門もどうぞ
講座すぐに使えるdos入門もどうぞ

実践他の分野への挑戦は実践TOP

v …

アプリケーションで楽しもう

広報アプリケーションを公開中!タブ「i~v..」をご覧ください。

※応用コーナーのTOP

講座初めての人のrpn基礎もどうぞ
講座しっかり学べるrpn入門もどうぞ
講座すぐに使えるdos入門もどうぞ

実践他の分野への挑戦は実践TOP

書籍紹介

記事に関連した書籍

本ウェブサイトで扱った話題に関連した書物で、スタッフが実際に読了したものを紹介。

書籍数学の書籍
数の世界は思ったよりもエキサイティング

書籍投資の書籍
失敗しない投資には広範囲で実践的な知識が必要

警告バックスラッシュはエンマークに読み替えて下さい(IE)。
バックスラッシュとエンマーク

警告文字で作られた図表や式が崩れることがあります。ブラウザによっては固定幅フォントをMSゴシックにするときれいに表示されます。それでも崩れる場合は図表や式をメモ帳にコピー後、閲覧下さい。

警告rpn試用版と標準版(2kリビジョン)はダブルクォートで囲って下さい。

rpn 1 2 + ⇒ rpn "1 2 +"
rpn 1 -c foo ⇒ rpn "1" -c "foo"

ダブルクォートは省略できることが多いのですが、慣れない間は囲んだほうが無難です。なお、本ウェブサイトの記事ではrpn標準版(98リビジョン)を使用しているため囲っていません。詳しくは技術サポートの「rpn TIPS参照ください。

注意rpnの障害情報はこちら

警告rpn試用版の場合、複雑なプログラムや処理時間のかかるプログラムの一部には動作しないものがあるかもしれません。あくまで無料提供であることを勘案・了承ください。rpn標準版は、すべてのプログラムが動作します。