最新情報

タイル並べとフィボナッチ数列の関係

タイル並べとフィボナッチ数列の関係
前項目の画像では21で数列が終わっていますが、その次の数字は何になるでしょうか?
数列を構成する各々の数を数列の「項」といいますが、この項に番号をふってみましょう。配列番号を付けるイメージです。

21の次、つまり9番目の数字を求めたいわけです。
”前2つの数字を足し合わせると次の数になる”という性質を考えると7番目+8番目なので
13+21=34 となります。
数列にふった”番号”に注目して式を作り替えるとどうなるでしょうか。
7番目+8番目=9番目 ですね。
上の式をもう少しいじってみます。7番は9番の2つ前、8番は9番の1つ前なので
(9ー2番目)+(9ー1番目)=9番目 ですよね。

VOL.110 【場合の数攻略】 -フィボナッチ数列

まず、「フィボナッチ数列」とはどんな数列かを確認しておきます。
定義そのものは小学生が理解するのは無理だと思いますが、
結果としては
「最初の2項が0、1((1、1)あるいは(1、2)も中学受験ではあり)であり、以後どの項もその直前の2項の和となっているような数列」
です。
具体的には
0,1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,1597,2584,4181,6765,・・・
となります。

実際は「第何項がいくつか」ということが大切なので、上記のような数列を「表」にまとめます。
直前の2項を足せばその項がいくつかを求められるので、少し練習すればほとんどの人が書けるようになります。
そうなると「第何項がいくつか」ということを悩む必要はほぼなくなりますね。

そして、ここまで来て初めて「場合の数」の分野に入ってきたとも言えます。
単に「第何項がいくつか」という問題ならば、「規則性」の分野と考えられるからです。
「場合の数」の問題で「フィボナッチ数列」を使って解くものは、典型的なものが2つあります。

ひとつは「階段(1段づつか1つ飛ばし)」、
もうひとつは「長方形(1×2)の敷き詰め」です。
6年生はどちらも「基本問題」として学習済みだと思いますが、ピンとこない受験生はすぐに確認することをお勧めします。

ここまで見てきて
「フィボナッチ数列で解く場合の数(前の結果の和を利用して解くものまで範囲を広げます)」
の問題で難しいものは

  • 「階段」「長方形の敷き詰め」ではないがフィボナッチ数列(それと見抜くのが難しい)
  • 単に直前の二項を足した数列ではないもの
  • 最初、1辺が1cmの正方形を2つ並べて長方形をつくり、以降は長方形の長いほうの辺にその辺と一辺の長さが等しい正方形をくっつけ新たな長方形を作るという操作を繰り返したときの、辺の長さ。
    ※これは「フィボナッチ数列」の性質のひとつである「1番目からN番目までの項をそれぞれ二乗(その数同士を2回掛け合わせること)したものの和は、N番目の項と(N+1)番目の項の積に等しい」の証明になっています。
  • 1つがいのウサギは、産まれて2か月後から毎月1つがいのウサギを産む。ウサギが死なないとしたときの、○○カ月後のつがいの数。
    ※これがフィボナッチさんが考案したとされる問題です。
  • ある整数を「偶数なら2で割り、奇数なら1を加える」という操作をその数が1になるまで繰り返す。□回の操作で1になる整数の数。

    タイル並べとフィボナッチ数列の関係
  • 「トリボナッチ数列」
    階段の問題で「1段ずつ」「1段飛ばし」「2段飛ばし」の3種類が可能なら「トリボナッチ数列」になります。バスケットボールの点数の入り方も同様です。
    ※前2つを足すのが「フィボナッチ数列」なら、前3つを足すのが「トリボナッチ数列」です。
    4つは「テトラナッチ数列」だそうです。
  • 「長方形(1×2)と正方形(2×2)の敷き詰め」
    例えば2×6の長方形に敷き詰める場合は端で分類し、以下のような表に整理します。

    上の表を自分の力で書けるようになればこの手の問題は大抵解けるようになると思います。
    大切なのは「前の結果を利用する」ということと「表に整理する」ということの2点です。

フィボナッチ数列

例えば「3, 6, 12, 24, タイル並べとフィボナッチ数列の関係 48. 」の数列で考えていきましょう。初項は3、公比は2です。
一般項、つまりn番目の項は「初項3に公比2をn-1回かけた数」なので
$a_ = タイル並べとフィボナッチ数列の関係 3 \times 2^$ となります。
$n=2$ の時、$3 \times 2^=3 \times 2 = 6$
$n=3$ の時、$3 \times 2^=3 \times 4 = 12$
$n=4$ の時、$3 \times 2^=3 \times 8 = 24$
これを一般化すると、初項 $a$、公比 $r$ の等比数列における一般項は
$a_ = a \times r^$ となります。

フィボナッチ数の等比数列

等比数列の一般項は、$a_ = タイル並べとフィボナッチ数列の関係 ar^$ ですから、次項は $a_ = ar^$、次の次項 タイル並べとフィボナッチ数列の関係 $a_ = ar^$ です。

これを二次方程式に変形すると
$r^-r-1 = 0$

二次方程式の解の公式に当てはめる

ただ、これだけだと先頭の $1$ と $1$ が満たせないので、もう一工夫必要です。
解の公式により解が2つ求まったので、$α$ と $β$ にして、$α-β$ とすると $\sqrt$ がそれぞれに付きます。あとは、$\sqrt$ で割ればフィボナッチ数列が求まります。
詳しく下記を参照してください。

Fibonacci.png

普通に実装

※ np.sqrt を使わないでPythonの基本機能で実現する場合、5**0.5 で平方根の演算ができます。

100 番目の本当のフィボナッチ数は $354224848179261915075$ です。
残念ながら値が違ってしまいますね。
$354224848179263111168$
$354224848179261915075$

たかが 100 番目くらいで正しい答えを得られないようでは"タイル並べとフィボナッチ数列の関係 なってない"といわざるを得ないではない。

計算方法を変える

計算方針を考える
落ち着こう。確かに無理数は避けて通れない。しかし、我々は無理数どころか、"もっとスゴい"数を扱ったことがあるはずだ。そう、二乗すると -1 になっちゃう愛に溢れた"アレ"を含む数、複素数である。
複素数をどう扱ったか思い出そう。次のように表現したはずだ。
$a+bi$
虚数単位 $i$ はもはや無理数ですらない。それでも我々は扱ってきた。ならばたかが $\sqrt$ 程度が扱えないわけがない。 タイル並べとフィボナッチ数列の関係
というわけで、複素数の i を $\sqrt$ に置き換えた形で今回の式を取り扱うことにしよう。
フィボナッチ数列の一般項を計算する(※ただし有理数に限る)

Haskellでは標準で Rational という有理数を扱う型があるが、Pythonでは標準 fractions を使うと分数(有理数)での計算ができる。

FibNum こと タイル並べとフィボナッチ数列の関係 Rational の二要素からなるタプルは、左に $\sqrt$ が付かない項を、右に $\sqrt$ が付く項を格納することしよう。つまり (1, 1) と書けば $1+\sqrt$ のこと。(0, 1) と書けば $\sqrt$ のこと。(1 % 2, 1 % 3) と書けば $\frac+\frac\sqrt$ のことを表す。(中略)
除算は 0 で割れないとか面倒なこともあるので、乗算の形にしておきたい。
まず、(1, 1) `fibDiv` (2, 0) は要するに $\frac<1+\sqrt>$ のことだが、こんなものは $\frac+\frac\sqrt$、つまり (1 % 2, 1 % タイル並べとフィボナッチ数列の関係 2) としてしまえば良い。
後ろ側の $\sqrt$ で割る処理は、逆数であるところの $\frac<\sqrt>$ 、つまり $\frac<\sqrt>$ を掛ければ良い。$\frac<\sqrt>$ ってことは $0+\frac\sqrt$ だから、ここでの表現では (0, 1 % 5) ってことだ。

タイル並べとフィボナッチ数列の関係

画像:パラドックスの定番として、こんな話がありますよね。
直角三角形をいくつかに分割して並べ替えると……あれ !? 同じ直角三角形のハズなのに! 面積1のピースが余っちゃうっ!
これはパズル好きな方々はすでに知っている話だろうし、これのカラクリについては特に話すことはないでしょう。でも、この話、実は一般化できるということは知ってますか?

画像:拡大図
★ パラドックスのタネ明かし ★
知らない方々のために解説を。
右図の図形は2つとも同形同大に見えますが、実は違います。
斜辺にあたる線は直線にしか見えないけれど、微妙に折れ曲がっているんですね。
見た目にはわからないほど微妙です。

これ、「フィボナッチ数列」と呼ばれるものです。
まるで、デタラメに数字が並んでいるみたいだけれど、実はちゃんとした法則があるんですね。
隣りあう3つの数を拾ってみると、その3つの数は足し算の関係になっているんです。
たとえば、3,5,8 の場合は 3+5=8 だし、34,55,89 の場合は 34+55=89 になる。
まぁ、もともとフィボナッチ数列というのは、2個の 1 から始めてそういう“足し算”の関係を満たす
ように新しい数字を次々つけ足してできた数列なんですね。
でも、実はもうひとつ、隠れた法則があるんです。
同じように隣りあう3つの数を拾います。その3つに関しては、足し算の法則以外に次のことも成り
立つんです。
なんと、両端の数の積と真ん中の数の2乗との差が 1 である、というわけですね。
実際にやってみましょう。
たとえば、3,5,8 の場合は 3×8-5^2=24-25=-1 ですね。
そして、34,55,89 の場合は 34×89-55^2=3026-3025=1 となる。
どの隣接3数をとるかによって引き算結果は変わるんだけれど、どっちにしても差は必ず 1 になるわ
けです(普通、「差」といえば大きい数から小さい数を引いた値のことを指しますもんね)。
実を言うと、この法則はすでに証明されていて、「カッシーニ - シムソンの定理」と呼ばれるそうで
す。(画像)

画像:つの数 a, b, c, d(a<b<c<d)を拾って図のような図形をつくったとき、図形内の長方形と正方形の面積は常に 1 だけ違うんです。これは、「ac と b^2 の差は 1 である」という理由によります。

【 注 意 】
フィボナッチ数列では隣りあう3数は足し算の関係にある、ということを思い出しましょう。
a+b=c と b+c=d が成り立っています。
ただ、注意しなければいけないのは、ac-b^2=1 だけでなく ac-b^2=-1 が成り立つ場合もあると
いうこと。つまり、隣りあう4数 a, b, c, d の選びかたによっては長方形の面積の方が大きい場合も
あるし、逆に正方形の面積の方が大きい場合もあるんです。
ということは、1.や3.で書いたような「あれ? タイル並べとフィボナッチ数列の関係 面積1のピースが余っちゃった!」という話だ
けでなく、「あれ? 面積1のピースが足りないぞ !?」なんていう話もつくることができるわけです
ね。ちなみに、1.での話は a=5, b=8, c=13, d=21 の場合・・・

画像:フィボナッチ数列の中の隣りあう3つの数 b, c, d(b<c<d)を拾って、一辺を c とする正方形とタテ b ×ヨコ d サイズの長方形をつくる。これで、同じようなパラドックス話を展開することができる。一般的には、フィボナッチ数列の中の隣りあう4つの数 a, b, c, d(a<b<c<d)を拾って図のような正方形と長方形をつくったとき、この2つの面積は常に 1 だけ違うんです。なぜなら、b, c, d はフィボナッチ数列において隣りあう3数だから。「両端の数の積と真ん中の数の2乗との差が 1 である」と書いたけれど、これを適用すれば bd と c^2 の差は 1 になるということが言えるわけですね。
もちろん、同様に、4数 a, b, c, d の選び方によっては bd-c^2=1 だけでなく bd-c^2=-1 が成り立つ場合もあります。だから、「あれ、面積1減った!」という話のほかに「あれ、面積1増えた !?」なんていう話もできたりするわけです。

図を見ると、少し濃いめの直角三角形が2つあって斜辺がほとんど同じ傾きになってますよね。
これにも、ちょっとした秘密がありまして。
斜辺の傾き具合というのは、直角を挟む2辺の縦横比によって決まります。
そして、その縦横比が同じであれば、傾きが同じになるんですね。
んで、その濃いめの直角三角形の縦横の長さを見てみると、どれもフィボナッチ数列の中の隣りあう数になっている。実際、1.では、小さい方が 5 と 8、大きい方が タイル並べとフィボナッチ数列の関係 8 と 13 になってますよね。
そして、3.では、小さい方が 13 と 21、大きい方が 21 と 34 になっている。
チョットこれら4つの縦横比をそれぞれ計算してみましょう。

8÷5 = 1.6
13÷8 = 1.タイル並べとフィボナッチ数列の関係 625
21÷13 = 1.615384…… タイル並べとフィボナッチ数列の関係 タイル並べとフィボナッチ数列の関係
34÷21 = 1.619047……

おおぉ! ずいぶんまた、似たような値が並びましたね。
縦横比がどれも 1:1.61 くらい。
ついでに、フィボナッチ数列の隣りあう2数でいろいろ割り算をしてみましょう。

55÷34 = 1.617647……
89÷55 = 1.618181……
144÷89 = 1.617977……
233÷144 = 1.618055……
377÷233 = 1.618025……
(以下略)

なんと! 先の4つよりもさらに値が似ているっ!
縦横比が 1:1.618 くらいですね。
もしかしたら、1.618 という数字を見て「ピーン!」ときた方々もいるかもしれません。
そうなんです。この 1:1.618 という比、「黄金比」というものに似ているんです。
この黄金比、フィボナッチ数列との間には関係がひとつありまして。
実は、こんなことが成り立つんです。
(画像)
図において2つとも合同にしか見えない理由は、濃いめの直角三角形の斜辺の傾きを表す縦横比が2つとも酷似しているということなんですね。
ちなみに、「カッシーニ - シムソンの定理」と同様に、この黄金比に関する性質もすでに証明されています。
(画像) 」

おもしろかった~~~単なる目の錯覚を使ったパズルにしかすぎないんだと思ってたわたし. ^^;
だって. 5/13≠8/(13+8)=8/21 だものって.

視覚的に理解するフィボナッチ数と再帰関数

fib1.png

本題ではないので詳しい説明は割愛しますが 0, 1 もしくは 1, 1 から始まり、前2つ前の数字を足し合わせると次の数になる数列のことです。

こんな感じ。

「うわ何や難しい文字出てきたわ戻ろ」
と思って帰りかけた文系のあなた、もうちょっとお付き合いください。
ガチガチ文系の筆者ですがなんとか理解して噛み砕いてみたので大丈夫です。多分。

fib2.png

前項目の画像では21で数列が終わっていますが、その次の数字は何になるでしょうか?
数列を構成する各々の数を数列の「項」といいますが、この項に番号をふってみましょう。配列番号を付けるイメージです。

21の次、つまり9番目の数字を求めたいわけです。
”前2つの数字を足し合わせると次の数になる”という性質を考えると7番目+8番目なので
13+21=34 となります。
数列にふった”番号”に注目して式を作り替えるとどうなるでしょうか。
7番目+8番目=9番目 ですね。
上の式をもう少しいじってみます。7番は9番の2つ前、8番は9番の1つ前なので
(9ー2番目)+(9ー1番目)=9番目 ですよね。

  • 0番目の数字は0
  • 1番目の数字は1
  • 2番目以降は前2つ前の数字を足し合わせると次の数になる

では、フィボナッチ数列(F)のn番目の数を求めるには?

上でも書いた様に0番目の数=0、1番目の数=1なのでこの2択に当てはまる場合はreturnでnを返します。
それ以降は漸化式と同じ要領でプログラムを書いてあげればOKです。
fibonacciという関数内にまたfibonacci関数が存在しているわけですが、この様な自分自身を呼び出す関数を再帰関数といいます。

処理の流れ

では処理の流れはどうなっているのでしょうか。
再帰呼び出しは
関数内にある自分自身の中に入って処理→さらにその中の自分自身の中に入って処理…
という風にreturnに引っかかるまでループを繰り返します。
例えば n = 6 とした時、2行目は条件不一致によりスキップされ3行目へ進みます。
3行目では fibonacci(4) + fibonacci(5) となり、 fibonacci(4) の処理が始まるのです。

fib3.png


こんな感じでreturnに行き当たるまでループします。
ループの戻り値である0か1を順番に足していくことで最終的にn番目の数を求めるようになっているわけですね。

再帰関数の弱点

お気づきの方もいらっしゃるかと思いますが、シンプルに書ける便利な再帰呼び出しにも弱点があります。
それは同じ項を何度も重複して計算してしまうことです!
上記の様な6番目程度の数を求める場合は大したループではないのですが、100番目の数を求めるとなると、同じ計算を何度も繰り返してしまうために処理が終わるまでに長い時間がかかってしまうのです。
この欠点を補うのがメモ化です。

上の図を見てもらうとA, B, Cと全く同じ処理が再び行われている部分がありますよね。
そこで文字通り一度計算した内容をメモ(キャッシュ)しておき2回目以降はメモをチラ見するだけで済むのがメモ化です。
メモ化を利用して書き直したプログラムがこちら

||=は「||」演算子の自己代入演算子です。
左辺が タイル並べとフィボナッチ数列の関係 偽 か 未定義 なら左辺に右辺を代入する、という意味になります。
2行目でmemoというメモ帳を用意してあげて、4行目で未だ計算したことのない値の場合はメモしておく流れになっています。

  1. We will deliver articles that match you

By following users and tags, you can catch up information on タイル並べとフィボナッチ数列の関係 technical fields that you are interested in as a whole

フィボナッチで押し目、戻し目を見極める|仮想通貨のFXチャート分析

fibonacci-eyecatch

新米くん

押し目・戻し目とは?

押し目・戻し目の説明

押し目・戻し目

上の図にもあるように、 直前の上昇に対してこれぐらい下落したから再び上昇するだろうと予測しそこで買いを入れるタイミングを押し目 といいます。

逆に、 下落トレンドのとき買いが入って少し戻すタイミングを戻し目 といいます。

フォボナッチ・リトレーメントを使えばこの押し目・戻し目を見極めることができます。

なぐ

フィボナッチ数列は不思議な数列

フィボナッチってなに?

フィボナッチ数列のフィボナッチとは中世の数学者、レオナルド・フィボナッチの名前に由来します。

フィボナッチ数列とは?

フィボナッチ数列の作り方

フィボナッチ数列

フィボナッチ数列自体はとても単純な数列で、足し算しかしないので小学生でもわかります。

  1. 1を二つ書く
  2. 前の数字と後ろの数字を足し合わせる

フィボナッチで使われる数字

投資の世界でも使われる数字が、0.618、0.382、0.236のような数字ですが、これは以下のようにして求めることができます。

フィボナッチ数列で使われる数字

0.618を出すのは、フィボナッチ数列のなかのある数字をその 1つ後ろの数字で割る ことによって、0.618に収れんしていきます。

同様に、フィボナッチ数列のなかのある数字をその 2つ後ろの数字で割る ことを繰り返すと0.382に収れんしていきます。

3つ後ろの数字で割る ことを0.236に収れんします。

フィボナッチ数列の数は自然界でも見られる

新米くん

関連記事

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次
閉じる