忘却の微分方程式(160) Maxima、{dynamics}、カオスと「窓」? orbit

Joseph Halfmoon

前回は図形で描くカオスの中からフラクタルを紡ぎだすchaosgame関数でした。今回は「一次元離散力学系の族に関する軌道図」の中にトートツに出現するカオスを拡大したらばフラクタルなorbit関数です。お惚け老人はサッパリ分からんぜよ。まあ皆大好き(特に高校生?)漸化式を計算していたらいつの間にかカオスという感じです。

※「忘却の微分方程式」投稿順 index はこちら

※   MaximaおよびそのGUIであるwxMaximaの以下バージョンを使用させていただいております。

    • Maxima 5.46.0(x86_64-w64-mingw32)
    • wxMaxima 22.04.0
orbit関数

orbit関数の説明は以下のMaxima文書(日本語)の中に見つかります。

54. dynamics

しかし、その説明を引用すれば以下のごとし。

パラメータ xを持つ一次元離散力学系の族に関する軌道図を描画します; この種の図は一次元離散系の分岐の研究に使われます。

素人老人にはサッパリです。orbit関数の引数を勝手に解釈するとこんな感じかと(上記の文書ではxと書かれているパラメータのところを勝手に μ で書き変えてます。)

orbits (F, y0, n1, n2, [μ, μ0, μf, μstep], options, …);

まず、Fに与える「数列」の定義ですが、ぶっちゃけ漸化式です。たとえば以下のような漸化式で数列を定義できる場合

x(n) = μ * x(n-1) * (x(n-1) – 1)

は、右辺を使って μ*x*(x-1) などと記述できます。知らんけど。

その数列の初期値が y0です。そして漸化式の計算を n1 回繰り返し(時間発展)た後、n1+1回目から n1+n2+1回目までのn2個の値をプロットします。ただしその際、パラメータ μ について μ0 から μfまで μstep毎変化させて計算を繰り返します。後はフツーにplot2dの描画オプション・パラメータを受け付けるみたいです。

プロットは横軸にパラメータ μ をとり、縦軸に漸化式の値 x(n) をとる2次元のグラフです。あれまこんな感じ。

MayRecursionFormulaEC

上記をみるとμ=1から3近くまでは、単一の値に「収束」してしまうみたい。それが3近くからは2つの値の間で「振動」し、さらにμが大きくなると「カオス」な事態に陥ると。ところが、カオスの中でも時折「窓」と呼ばれる限られた値の間を振動するモードが現れるっと。

上記で使った漸化式は、Logistic Functionであり、

X(n)=μ*X(n-1)*(1-X(n-1))

「メイの漸化式」とも呼ばれるみたいです。このことは『長嶋洋一』様の以下の文書に書かれてました。

カオス・ジェネレータをつくろう

上記の文書はもともとCQ出版 インタフェース誌1994年2月号の記事でハードウエア設計コンテストの課題のようです(30年前の御本ですがお惚け老人の本棚にあったです。当時の記憶はまったくないケド。)でも、まさに orbit関数で描きだせる「軌道」を扱ってます。pdf文書が上記から読め、その中にはCのソースも含まれてます。なお、上記のグラフを描く場合のorbit関数は以下のようになります。

orbits(μ*x*(1-x), 0.5, 100, 400, [μ, 1.0, 4.0], [style, dots]);
解説文書の例題

解説ページで扱われている漸化式Fの定義は x^2+a でした。それを描くのが以下に。

orbits(x^2+a, 0, 100, 400, [a, -2, 0.25], [style, dots]);

上記のグラフが以下に。orbitEx0

上記のグラフの赤丸付近を拡大する指定が以下に。

orbits(x^2+a, 0, 100, 400, [a,-1,-1.53], [x,-1.6,-0.8], [nticks, 400], [style,dots]);

そのグラフが以下に。orbitEx0Zoom

拡大すると「またもや」な図形が見えてきます。フラクタルだあ~。

忘却の微分方程式(159) Maxima、{dynamics}、4角と5角でカオスゲーム へ戻る

忘却の微分方程式(161) Maxima、{dynamics}、漸化式を追跡? へ進む