ジョセフの日記

Haskellのこととか日常のこととか

数学科合宿問題 問題番号4

 

先日、数学科の主催する数学の面白い問題を解く合宿に物理学科ではあるが参加させて頂いた。数学科の先生方には、色々と良くして貰っています。ありがたいです。
今回はちょっと数式がいっぱい出てきてゴチャゴチャするので、コードだけが気になる人は流し読みでも構いません。
続きを読むからどうぞ

 

問題

今回の合宿で僕が選んだ問題は、端的にいうと数列の収束判定です。
次の漸化式で表される数列はその振る舞いでパラメータを3つの区間に分けることが出来ます。

{ x_0 =0, \quad x_{n+1} = a^{x_n}}

{x_n = a^{a^{・^{・^{・^{a^0}}}}} \qquad (n個のa)}

ちなみに、指数の肩に指数が乗っているときには、aのa乗のa乗の……ではなくて、aのaのaの……a乗乗……乗乗と読むのが正しいらしいです。紛らわしいですね。

写像ということで、手っ取り早く離散力学系についての知識を使って解いてみましょう。

離散力学系についてのあれこれ

{x_{n+1}=g(a;x_n)}として色々考えてみましょう。

不動点がない場合

数列が正の無限大に発散するのはどんなときだろう、と少し考えてやると{x_{n+1}= g(a;x_n) \gt x_n}であることが思いつくはずです。つまるところ{x_{n+1}}{x_n}のグラフを考えてやると、直線{x_{n+1} = x_n}よりも関数{g(a;x_n)}が上にあることが条件だとわかります。そして実際に{g(a;x_n)=a^{x_n}}を代入してやるとこの条件を満たすパラメータの範囲は{a \gt e^{e^{-1}}}だということがわかります。これが一つ目の区間ですね。

逆に、{x_{n+1}= g(a;x_n) \lt x_n}のときに数列は負の無限大に発散すると考えられます。その時の条件は直線{x_{n+1} = x_n}よりも関数{g(a;x_n)}が下にあることが条件だということも同様にわかります。今回はそのような条件はありませんね。

不動点がある場合前置き

それでは、{x_{n+1}= g(a;x_n) = x_n}となる不動点がある場合、どうなるでしょうか。考えてみましょう。

このときは、そのような不動点の周りでの関数の振る舞いを見てやれば良いです。不動点{x^{\ast}}とし、そこからのズレを{\mu}としましょう。この不動点の周りで{g(a;x_n)}を展開してやり、{\mu}の一次項の係数、すなわち不動点での関数{g(a;x_n)}の傾きを見てやれば、基本的に数列の挙動がわかります。

不動点がある場合の1

まず、その不動点が吸引的である場合、{-1 \lt \frac{\mathrm{d} g(a;x^{\ast})}{\mathrm{d} x_n} \lt 1}が条件となります。さらに、{-1 \lt \frac{\mathrm{d} g(a;x^{\ast})}{\mathrm{d} x_n} \lt 0}のときには振動しながら吸引されて、{0 \lt \frac{\mathrm{d} g(a;x^{\ast})}{\mathrm{d} x_n} \lt 1}のときには単調に吸引されます。

不動点がある場合の2

次に、その不動点が吸引的でない場合、{\frac{\mathrm{d} g(a;x^{\ast})}{\mathrm{d} x_n} \lt -1 ,\quad 1 \lt \frac{\mathrm{d} g(a;x^{\ast})}{\mathrm{d} x_n}}が条件となります。前者は振動しながら、後者は単調に不動点から引き離されていきます。

不動点がある場合のあまり

残った{=}の部分はその不動点周りの{\mu}の二次項に依存し振る舞いが変わるので、今回は放置しておきましょう。上で書いた基本的でない条件です。

不動点がある場合のまとめ

今回の関数{g(a;x_n)=a^{x_n}}に上の条件を適用してやり、{ x_0 =0}を考慮してやると次のことがわかります。

{e^{-e} \lt a \lt e^{e^{-1}}}のとき収束。
{a \lt e^{-e}}のとき収束しない。

下の条件は収束しない、と味気ない答えになってしまいましたが、実際の挙動は実に面白く2周期軌道を持ち始めます。不動点の近くでは引き離すような挙動をするのに、十分広い範囲で見てみると不動点に近づこうとする挙動を示すからですね。これはなんともPoincaré-Bendixson Theoremチックです。

プログラムとか

Glossをはじめたのはこの数列の挙動を確かめるためです。{g(a;x_n) : [0,1] \to [0,1] : x_n \mapsto x_{n+1}}の数列の収束などを判別出来るようにしてみました。サンプルとして動画も撮ってみたのでどうぞ。

 

 {x_{n+1}=g(a;x_n)}を赤線、{g\left(a;g(a;x_n)\right)}を水色線、数列の挙動を青線で描画しています。

a=0.08

a=0.045

a=0.045で初期値を0.035に変えてみた

不動点から引き離されているのを確認できる。