Fibonacciho čísla a matice

Moderators: Martin Sleziak, Ludovit_Balko, Martin Niepel, Tibor Macko

Post Reply
Martin Sleziak
Posts: 5686
Joined: Mon Jan 02, 2012 5:25 pm

Fibonacciho čísla a matice

Post by Martin Sleziak »

Toto je opäť pokus o post typu: "Pozrite, čo všetko sa už dá narobiť s tým, čo ste sa zatiaľ na tomto predmete naučili."
A snáď občas spomeniem aj nejaké veci, ktoré sa naučíme počas tohoto semestra.

Fibonacciho čísla

Fibonacciho čísla sú definované podmienkou
$$F_{n+2}=F_{n+1}+F_n\tag{1}$$
a počiatočnými podmienkami $F_0=0$, $F_1=1$.

Prvých niekoľko hodnôt je
$$
\begin{array}{|c|c|c|c|c|c|c|c|c|c|}
\hline
n & 0 & 1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 \\\hline
F_n & 0 & 1 & 1 & 2 & 3 & 5 & 8 &13 &21 \\\hline
\end{array}
$$

Binetov vzorec

Indukciou sa dá overiť, že platí
$$F_n=\frac{a^n-b^n}{a-b}=\frac{\left(\frac{1+\sqrt5}2\right)^n-\left(\frac{1+\sqrt5}2\right)^n}{\sqrt5}$$
kde $a=\frac{1+\sqrt5}2$ a $b=\frac{1-\sqrt5}2$ sú korene polynómu $x^2-x-1=0$.
(Môže byť užitočné všimnúť si, že $a+b=1$ a $ab=-1$.)
Teda čísla $a$, $b$ sú vlastne zlatý rez a jeho prevrátená hodnota.

Ukážeme si aj odvodenie pomocou matíc.

Maticové vyjadrenie Fibonacciho čísel

Označme
$A=
\begin{pmatrix}
1 & 1 \\
1 & 0
\end{pmatrix}$

Priamo roznásobením vidíme, že platí:
$$
\begin{pmatrix} F_{n+1} \\ F_{n} \end{pmatrix}=
\begin{pmatrix}
1 & 1 \\
1 & 0
\end{pmatrix}
\begin{pmatrix} F_n \\ F_{n-1} \end{pmatrix}
\tag{2}
$$
(Táto maticová rovnosť je vlastne prepísanie rekurencie definujúcej Fibonacciho čísla.)

Podobne môžeme vcelku ľahko overiť, že
$$
\begin{pmatrix}
F_{n+2} & F_{n+1} \\
F_{n+1} & F_{n}
\end{pmatrix}=
\begin{pmatrix}
1 & 1 \\
1 & 0
\end{pmatrix}
\begin{pmatrix}
F_{n+1} & F_{n} \\
F_{n} & F_{n-1}
\end{pmatrix}
$$

Keď si ešte všimneme, že
$$A=\begin{pmatrix}
1 & 1 \\
1 & 0
\end{pmatrix}=
\begin{pmatrix}
F_{2} & F_{1} \\
F_{1} & F_{0}
\end{pmatrix}
$$
tak indukciou vieme vcelku ľahko dokázať, že platí
$$A^n=
\begin{pmatrix}
1 & 1 \\
1 & 0
\end{pmatrix}^n=
\begin{pmatrix}
F_{n+1} & F_{n} \\
F_{n} & F_{n-1}
\end{pmatrix}\tag{3}
$$

Práve tento vzťah sa budeme snažiť použiť na odvodenie viacerých vlastností Fibonacciho postupnosti.

Môžete sa skúsiť zamyslieť aj nad tým, či by ste ich vedeli odvodiť nejako inak, napríklad: Ak ste sa ešte nestretli s generujúcimi funkciami, tak na matfyze je viacero predmetov, kde sa o nich môžete niečo naučiť: 1-MAT-490, 2-INF-113.

Ak vás bavia kombinatorické dôkazy, tak veľa dôkazov identít s Fibonacciho číslami sa dá nájsť v knihe Benjamin, Arthur T.; Quinn, Jennifer J.: Proofs That Really Count: The Art of Combinatorial Proof. (V prípade záujmu môžem poskytnúť.)

Pre niektoré z identít, ktoré uvedieme, by bol možno iný dôkaz jednoduchší alebo porovnateľne náročný. Pre niektoré je asi najjednoduchší postup pomocou matíc.

Charakteristický polynóm matice $A$

Pretože táto vlastnosť môže byť pre nás užitočná pri niektorých výpočtoch, môžeme si všimnúť, že
$$A^2=A+I.$$
To môžeme overiť priamym výpočtom
$\begin{pmatrix}
1 & 1 \\
1 & 0
\end{pmatrix}^2=
\begin{pmatrix}
2 & 1 \\
1 & 1
\end{pmatrix}=
\begin{pmatrix}
1 & 1 \\
1 & 0
\end{pmatrix}
+
\begin{pmatrix}
1 & 0 \\
0 & 1
\end{pmatrix}$

Platnosť tejto rovnosti však vieme aj z Cayley-Hamiltonovej vety. Stačí nájsť charakteristický polynóm matice $A$
$|xI-A|=
\begin{vmatrix}
x-1 & -1 \\
-1 & x
\end{vmatrix}=x(x-1)-1=x^2-x-1$.
Martin Sleziak
Posts: 5686
Joined: Mon Jan 02, 2012 5:25 pm

Re: Fibonacciho čísla a matice

Post by Martin Sleziak »

Cassiniho identita

Ak si všimneme, že $|A|=
\begin{vmatrix}
1 & 1 \\
1 & 0
\end{vmatrix}=-1$ tak ľahko dostaneme, že
$
F_{n+1}F_{n-1}-F_n^2=\begin{pmatrix}
F_{n+1} & F_{n} \\
F_{n} & F_{n-1}
\end{pmatrix}=
|A|^n=
(-1)^n$.

Rovnosť
$$F_{n+1}F_{n-1}-F_n^2=(-1)^n$$
sa zvykne nazývať aj Cassiniho identita

Spomedzi vecí, čo tu spomenieme, toto je asi jedna z ukážok, kde odvodenie pomocou matíc je asi výrazne jednoduchšie ako iné spôsoby odvodenia.

Podobným spôsobom by sme mohli odvodiť viaceré ďalšie podobné vzťahy.

Môžete si všimnúť, že sme našli obdĺžnik a štvorec s celočíselnými dĺžkami strán, ktorých plocha sa líši iba o 1. Útvary s podobnými obsahmi sa hodia pri rôznych hlavolamoch, kde preusporiadame časti jedného útvaru a "zázračne" dostaneme útvar s iným obsahom, ako je napríklad známa Missing square puzzle. V takýchto hlavolamoch často bývajú dĺžky niektorých strán Fibonacciho čísla. Súčet prvých $n$ Fibonacciho čísel

Využijeme rovnosti
\begin{gather*}
\begin{pmatrix}F_{n+1}\\F_n\end{pmatrix}=A^{n-1}\begin{pmatrix}F_2\\F_1\end{pmatrix},\\
\begin{pmatrix}F_{n}\\F_{n-1}\end{pmatrix}=A^{n-2}\begin{pmatrix}F_2\\F_1\end{pmatrix},\\
\vdots\\
\begin{pmatrix}F_{2}\\F_{1}\end{pmatrix}=I\begin{pmatrix}F_2\\F_1\end{pmatrix}.\\
\end{gather*}
Ich sčítaním dostaneme
$$\begin{pmatrix}
F_2+\dots+F_{n+1}\\
F_1+\dots+F_{n}
\end{pmatrix}=
(I+A+\dots+A^{n-1})\begin{pmatrix}F_2\\F_1\end{pmatrix}.$$
Všimnime si, že platí
$$(A-I)(I+A+\dots+A^{n-1})=A^n-I,$$
a teda
$$I+A+\dots+A^{n-1}=(A-I)^{-1}(A^n-I).$$
Ľahko vypočítame, že
$$(A-I)^{-1} =
\begin{pmatrix}
0 & 1 \\
1 & -1
\end{pmatrix}^{-1}=
\begin{pmatrix}
1 & 1 \\
1 & 0
\end{pmatrix}=A.$$
(Tento fakt sme mohli dostať aj z rovnosti $A^2-A-I=0$, z čoho dostaneme $A(A-I)=I$ a $(A-I)^{-1}=A$.)

Máme teda
$$\begin{pmatrix}
F_2+\dots+F_{n+1}\\
F_1+\dots+F_{n}
\end{pmatrix}=
(A-I)^{-1}(A^n-I)\begin{pmatrix}F_2\\F_1\end{pmatrix}=
\begin{pmatrix}
1 & 1 \\
1 & 0
\end{pmatrix}
\begin{pmatrix}F_{n+2}-1\\F_{n+1}-2\end{pmatrix}=
\begin{pmatrix}F_{n+3}-1\\F_{n+2}-1\end{pmatrix}
.$$

Vypočítali sme teda, že
$$\sum_{k=1}^n F_k= F_{n+2}-1.$$

Dvojnásobný index

Ak máme Fibonacciho čísla vyjadrené pomocou matice $A^n$, tak môžeme pomerne ľahko dostať vzorec pre $F_{2n}$ a $F_{2n+1}$.

Máme totiž
$A^{2n}=(A^n)^2$
$\begin{pmatrix}
F_{2n+1} & F_{2n} \\
F_{2n} & F_{2n-1}
\end{pmatrix}=
\begin{pmatrix}
F_{n+1} & F_{n} \\
F_{n} & F_{n-1}
\end{pmatrix}^2=
\begin{pmatrix}
F_{n+1}^2+F_n^2 & F_{n+1}F_{n}+F_nF_{n-1} \\
F_{n+1}F_{n}+F_nF_{n-1} & F_n^2+F_{n-1}^2
\end{pmatrix}$

Dostávame teda
$F_{2n+1}=F_n^2+F_{n+1}^2$
a
$F_{2n}=F_n(F_{n+1}+F_{n-1})$.

Keď tieto vzorce trochu poupravujeme, zistíme, že z $F_n$ a $F_{n+1}$ vieme dostať $F_{2n}$ aj $F_{2n+1}$. Takéto niečo sa nám hodí, ak by sme chceli urobiť efektívny algoritmus na výpočet Fibonacciho čísel. (K tejto otázke sa ešte vrátime.)

Súčet štvorcov Fibonacciho čísel

Všimnime si, že
$(A^{n})^2=\begin{pmatrix}
F_{n+1} & F_{n} \\
F_{n} & F_{n-1}
\end{pmatrix}^2=
\begin{pmatrix}
F_{n+1}^2+F_n^2 & F_{n+1}F_{n}+F_nF_{n-1} \\
F_{n+1}F_{n}+F_nF_{n-1} & F_n^2+F_{n-1}^2
\end{pmatrix}
$

Ak sčítame matice
$$I+A^2+\dots+A^{2n},$$
dostaneme maticu, ktorá má v ľavom hornom rohu číslo $F_0^2+F_1^2+\dots+F_{n+1}^2$ a v pravom dolnom rohu číslo $1+F_0^2+\dots+F_n^2$.

Súčasne túto maticu môžeme vypočítať z nasledujúcich rovností:
$(I+A^2+\dots+A^{2n})(A^2-I)=A^{2n+2}-I$
$(I+A^2+\dots+A^{2n})A=A^{2n+2}-I$
$I+A^2+\dots+A^{2n}=A^{2n+1}-A^{-1}$

Všimnime si, že $A^{-1}=A-I=\begin{pmatrix}0&1\\1&-1\end{pmatrix}$, lebo $A(A-I)=A^2-A=I$.

Ak sa opäť pozrieme na rohové prvky, tak dostaneme naľavo
$(F_0^2+F_1^2)+(F_1^2+F_2^2)+\dots+(F_n^2+F_{n+1}^2)=2(F_0^2+F_1^2+\dots+F_n^2)+F_{n+1}^2$
a napravo $F_{2n+2}=F_{n+1}(F_{n+2}+F_{n})$.

Po úprave dostaneme
$2(F_0^2+F_1^2+\dots+F_n^2)=F_{n+1}(F_{n+2}-F_{n+1}+F_{n})=2F_{n+1}F_n$.
$F_0^2+F_1^2+\dots+F_n^2=F_{n+1}F_n$.

Binetov vzorec

Binetov vzorec by sme mohli odvodiť aj tak, že by sme našli regulárnu maticu $P$ a diagonálnu maticu $D$ takú, že $A=PDP^{-1}$.
Môžete si vyskúšať odvodiť ho takýmto spôsobom (alebo aspoň nájsť potrebné matice), alebo si môžete pozrieť odvodenie uvedené tu (v kapitole o lineárnych rekurenciách): https://msleziak.com/vyuka/2014/alg3/alg3.pdf
Martin Sleziak
Posts: 5686
Joined: Mon Jan 02, 2012 5:25 pm

Re: Fibonacciho čísla a matice

Post by Martin Sleziak »

Algoritmus na výpočet $F_n$

Skúsme sa ešte pozrieť na otázku, či by sme boli schopní nejakým spôsobom navrhnúť efektívny algoritmus na výpočet Fibonacciho čísel.

Najprv skúsim spomenúť dva algoritmy (aj ich zapísať najkým mixom pseudokódu a Pascalu); potom sa pozrieme na to, že matice nám ich umožnia rátať rýchlejšie.

Asi najhorší možný spôsob, ako by sme mohli rátať Fibonacciho čísla je použiť veľmi naivnú rekurziu. (Viete povedať prečo je neefektívny? Skúste sa napríklad zamyslieť nad tým, koľkokrát sa takáto rekuzia dostane k volaniu Fib(1) pri výpočte Fib(4) alebo Fib(5).)

Code: Select all

function Fib(n: integer): integer;
begin
  if n=0 then
    result:=0
  else if n=1 then
    result:=1
  else
    result:=Fib(n-1)+Fib(n-2)
end;
O čosi lepšie bude fungovať, ak nebudeme počítať zbytočne tie isté veci viackrát

Code: Select all

function Fib(n: integer): integer;
var
  i,j,k,pom: integer;
begin
  i:=0; j:=1;
  for k:=0 to n do
    begin
      pom:=i+j;
      i:=j;
      j:=pom
    end;
\\v premennej i mám vždy zrátané Fib(k)
end;
Všimnime si, že na výpočet $F_n$ potrebujeme rádovo $n$ aritmetických operácií (sčitovaní).

Vypočítali sme pritom súčasne všetky Fibonacciho čísla od $1$ po $n$.
Nemohli by sme niečo ušetriť tým, že niečo preskočíme?

Skutočne mohli. Pozrime sa na to maticovo. Chceme vlastne vyrátať $n$-tú mocninu danej matice $A^n$. Na to nepotrebujeme všetky mocniny $I,A,A^2,\dots,A^n$.
Napríklad $A^{32}$ vieme vyrátať tak, že postupne vyrátame $A, A^2, A^4, \dots, A^{32}$, t.j. v každom kroku umocníme predošlú maticu na druhú.
Ak máme exponent, ktorý nie je mocnina dvojky, napríklad $A^{44}$, tak môžeme postupne rátať $A, A^2, A^4, A^5, A^{10}, A^{11}, A^{22}, A^{44}$; v každom kroku sme doteraz vypočítanú maticu buď umocňovali alebo násobili maticou $A$.
Všimnime si, že počet aritmetických operácií, ktoré takto použijeme, je rádovo (dvojkový) logaritmus z $n$.

Skúsim nechať na vás, aby ste sa zamysleli nad tým, či by ste vedeli takéto niečo naprogramovať (alebo si aspoň predstaviť, ako by zhruba algoritmus fungoval.) A pridám zopár liniek, kde sa môžete dočítať viac.

Linky
Martin Sleziak
Posts: 5686
Joined: Mon Jan 02, 2012 5:25 pm

Re: Fibonacciho čísla a matice

Post by Martin Sleziak »

Linky

A ešte pár liniek.

Tu môžete nájsť maticové odvodenia:

* Robert C. Johnson: "Fibonacci numbers and matrices" - http://www.math.u-szeged.hu/~hajnal/cou ... ohnson.pdf
* Táto bakalárska práca: http://thales.doa.fmph.uniba.sk/sleziak ... pakova.pdf
* https://msleziak.com/vyuka/2014/alg3/alg3.pdf - kapitola 3.5 (Tu nájdete ako cvičenia uvedené aj niektoré ďalšie identity, ktoré sa dajú odvodiť aj maticovo.)

Tu sú linky na rôzne odvodenia spomenutých vecí.

Cauchy-Binet:
* https://proofwiki.org/wiki/Euler-Binet_Formula

Súčet prvých $n$ Fibonacciho čísel
* https://math.stackexchange.com/question ... f-i-f-n2-1
* https://proofwiki.org/wiki/Sum_of_Seque ... ci_Numbers

Súčet prvých $n$ štvorcov
* https://math.stackexchange.com/question ... n2-f-nf-n1

Cassiniho identita:
* https://proofwiki.org/wiki/Cassini%27s_Identity
* http://math.stackexchange.com/questions ... fn1-fn2-1n

"Konvolúcia":
* http://math.stackexchange.com/questions ... f-nm-f-n-1
Post Reply