tsujimotterのノートブック

日曜数学者 tsujimotter の「趣味で数学」実践ノート

複素積分は整数論に使える?

ハッピーフィボナッチ!

今日は 11/23 で,フィボナッチ数の最初の4項 1, 1, 2, 3 が並ぶ日です。そのため,11/23 はフィボナッチの日と呼ばれ,親しまれているようです。

フィボナッチ数列は,

 \begin{align} F_n &= F_{n-1} + F_{n-2}\;\;\;\; (n \geqq 2), \\ F_0 &= 0, \\ F_1 &= 1 \end{align} \tag{1}

という漸化式で定義された非常に有名な数列です。「 F_n の一般項を求めよ」という問題はよく大学入試の難問として紹介されたりしますね。数学好きなら一度は計算したことがある問題ではないでしょうか。

今日は,このフィボナッチ数列の一般項のちょっぴり変わった求め方を紹介したいと思います。


複素積分

さて,大学で複素関数論を学んだ人は,必ず「複素積分」というものを教わると思います。

複素積分とは,以下の形をした積分のことでした。

 \displaystyle \oint_{C} f(z) dz \tag{2}

 C は複素平面上の閉曲線です。閉曲線の経路によらず,特異点を回ったかどうかで積分の値が決まってしまうのが面白いですよね。

tsujimotterは工学部出身で,数学は専門ではありませんが,複素関数論は習いました。当時は,この積分が何の役に立つのかさっぱりわからなかったのですが*1,最近ようやく使いどころがわかってきました。

複素積分の応用の一つとして,積分によって「数列」の解析ができる,ということを説明したいと思います。


まず, z = 0 を含む単連結な領域でテイラー展開できる複素関数を考えます。 z = 0 の周りでテイラー展開して,

 f(z) = a_0 + a_1 z + a_2 z^2 + a_3 z^3 + \cdots a_n z^n + \cdots \tag{3}

と表せたとします。

一般に,テイラー展開できる関数は,その収束範囲に含まれる閉路  C で積分すると  0 になります。これがコーシーの積分定理です。

定理:コーシーの積分定理
 f(z) を単連結領域  D において解析的であるとする.このとき, D 内の任意の単純閉曲線  C に対して,以下がなりたつ:
 \displaystyle \oint_{C} f(z) dz = 0 \tag{4}


ここでもし,負べきの項  1 / z が入っている場合はどうでしょう。 f(z) z で割って

 \displaystyle \frac{f(z)}{z} = \frac{a_0}{z} + a_1 + a_2 z + \cdots +  a_n z^{n-1} + \cdots \tag{5}

とします。すると,

 \displaystyle \oint_{C} \frac{f(z)}{z} dz = 2\pi i a_0 \tag{6}

となります。

要するに,積分することで「マイナス1次の項  1/z」の係数が, 2\pi i をかけた上で飛び出ててくるのですね。

より一般に以下が成り立ちます。

定理:コーシーの積分公式
 f(z) を単連結領域  D において解析的であるとする.このとき, D 内の任意の点  z_0 に対して単純閉曲線  C に対して
 \displaystyle \oint_{C} \frac{f(z)}{z-z_0} dz = 2\pi i f(z_0) \tag{7}

が成り立つ.ここで,積分経路  C は反時計回りに行う.

 z_0 = 0 の周りのテイラー展開を  f(z) = a_0 + a_1 z + \cdots とすると, f(z_0) =  a_0 となりますね。

同様に  z^{n+1} で割ると,

 \displaystyle \oint_{C} {\frac{f(z)}{z^{n+1}} dz} = 2\pi i a_n \tag{8}

 a_n が飛び出てきます。

この事実によって,テイラー展開の(任意の次数の)係数を取り出すことができるようになったわけです!


ここで一つ逆転の発想をするのですが, f(z) のテイラー展開の係数  a_n として,求めたい数列を選びます。たとえば, a_n = F_n としておきます。すると,先の積分によって  a_n の項を取り出すことができます。

これだけだとただ数列を出し入れするだけですが,ここで「母関数」と呼ばれるものを考えます。母関数とは,数列の  n 番目の項に  z^n をかけて足しあわせてできるべき級数のことです。

先の  f(z) は,数列  a_n の母関数になっています。さらには,フィボナッチ数の母関数は,わかりやすい形に変形できることが知られています。あとは,その簡単化された母関数の積分を実行すれば,求める数列の一般項が得られるという寸法です。

フィボナッチ数列の一般項

フィボナッチ数列  F_n の一般項を求める問題を,以上の考えを用いて解いてみましょう。

 F_n を係数に持つ母関数  F(z) を考えます。

 F(z) = F_0 + F_1 z + F_2 z^2 + \cdots + F_n z^n + \cdots \tag{9}

 F(z) は,以下のように書き表すことができます。

 \displaystyle F(z) = \frac{z}{1-z-z^2} \tag{10}

 (10) の求め方は,少し長くなるのでここではやめておきます。非常にわかりやすい解説が「数学ガール」という本に載っているので,興味がある方は読んでください。

 (10) の分母を因数分解します。二次方程式  1 - z - z^2 = 0 の解の公式より,

 \displaystyle \alpha = \frac{1 + \sqrt{5}}{2}, \;\;  \beta = \frac{1 - \sqrt{5}}{2}

とおくと,

 \displaystyle F(z) = \frac{z}{ (1 - \alpha z) (1 - \beta z) } \tag{11}

とできます。部分分数分解すると

 \displaystyle F(z) = \frac{1}{\alpha - \beta}\left\{ \frac{1}{1 - \alpha z} - \frac{1}{1 - \beta z} \right\}  \tag{12}

が得られます。

等比級数の公式より, |x| < 1 において

 \displaystyle \frac{1}{1-x} = 1 + x + x^2 + \cdots + x^n + \cdots

が成り立つから, |\alpha z| < 1, \; \; |\beta z| < 1

 \displaystyle \begin{align} \frac{1}{1-\alpha z} &= 1 + \alpha z + \alpha^2 z^2 + \cdots + \alpha^n z^n + \cdots, \\
 \frac{1}{1-\beta z} &= 1 + \beta z + \beta^2 z^2 + \cdots + \beta^n z^n + \cdots \end{align}

がそれぞれ成り立ちます。

したがって, |z| < 1/\alpha = \beta において,

 \displaystyle F(z) = \frac{1}{\alpha - \beta}\left\{ (\alpha - \beta) z + (\alpha^2 - \beta^2) z^2 + \cdots + (\alpha^n - \beta^n) z^n + \cdots  \right\}  \tag{13}

が成り立つ。


ここで  F(z)/z^{n+1} の複素積分を考えます。

 \displaystyle \oint_{C} \frac{F(z)}{z^{n+1}} dz = \oint_{C} \frac{1}{(\alpha - \beta)}\left\{ (\alpha - \beta) \frac{1}{z^{n}} + \cdots + (\alpha^n - \beta^n) \frac{1}{z} + \cdots  \right\}dz  \tag{14}

となります。コーシーの積分公式より  1/z の項以外は積分が  0 になるので,

 \displaystyle \oint_{C} \frac{F(z)}{z^{n+1}} dz = 2\pi i \frac{\alpha^n - \beta^n}{\alpha - \beta}\tag{15}

となる。

一方,上の積分は  2 \pi i F_n に一致するはずだから,

 \displaystyle F_n = \frac{\alpha^n - \beta^n}{\alpha - \beta}\tag{16}

が得られた。これはフィボナッチ数列の一般項にほかならない。

ひと仕事おしまい。

おわりに

今日は複素積分が「フィボナッチ数列の一般項」という整数論的な計算に使えるというお話をしました。

コーシーの積分公式によって,母関数から  n 番目の項が取り出せるというのがポイントでしたね。複素積分が整数論にも応用できる,というのは非常に面白い観点だと思い,今回紹介させていただきました。

実は,今回のような方法は「分割数」の計算で用いられる方法だったりします。今日は分割数の話はしませんが,まったく同じ方法で,分割数の母関数を求めて,母関数のコーシー積分によって一般項を計算することができます。

分割数の場合は,積分の計算が単純ではないので,厳密な一般項は出てきませんが, n\to \infty の漸近公式なら導くことができます。この公式が映画「奇跡がくれた数式」のテーマだったりします。

それでは今日はこの辺で。

実は・・・

ここでひとつ残念なお知らせがあります。

 (13) を計算した時点で, F(z) の定義から  n 番目の項である  F_n

 \displaystyle F_n = \frac{\alpha^n - \beta^n}{\alpha - \beta}

であることがわかってしまいます。実は,わざわざ積分するまでもなかったのです。。。

この残念な事実は,本記事の70%ぐらいを書いた段階で気づきました。
しかしせっかく書いた記事なので,もったいなくて公開してしまいました。

とにかく,今回伝えたかったことは「複素積分を計算すれば数列の各項が取り出せる」という事実です。これはフィボナッチに限らず,解析的整数論で実際に使われる技術ですので,覚えておくと面白いかもしれません。

参考

「フィボナッチ数列の一般項を複素積分を使って導けないかな」と考えていたら,こんなページに出会いました。この記事のきっかけとなった質問です。
oshiete.goo.ne.jp


フィボナッチ数列といえばこちらの記事もおすすめです:
www.ajimatics.com

*1:未だに専門の研究で複素関数論を使ったことはありません