見出し画像

Cinderellaでカオスを描く:鳥の翼・計測

「Cinderellaでカオスを描く:鳥の翼」で描いたカオス,「カオスCGコレクション」(川上博著:サイエンス社:以下「この本」)に,

特徴は,羽根状図形の近くに,初期値をどのように選んでも最終的にはこの図形に収束し,得られる図形は同じものとなる。

と記載されています。これについて,少し詳しく調べてみましょう。ただし,「最終的に」は実際には無理なので(無限個の点を取ることはできない),まずは
  (1) たくさん点を取れば,初期値が異なってもほとんど同じ図になる
ということを現象として確かめていきます。
次に
  (2) 異なる初期値をとったときに,打たれる点はどのくらいの割合で同じになるのか
を調べます。実際にやれるのは有限回なので,その中で調べます。
さらに
  (3) なぜそうなるのか
を考えます。論理的に示す(証明)は難しいので,現象を見て「このようになっていく」ことがわかればよいとします。

 そのためのツールを作りました。(1)と(3) は同じツールで調べられます。(2) は点の個数をカウントするので別にしました。
まず(1)(3) のためのツールです。


画像1

係数は2つだけ可変にしました。アトラクタの形状に大きく関わる2つの係数です。
回数を決めるスライダが2つあります。上のスライダは1回から200回まで。下のスライダは2500回から50万回までできます。

まず,下のスライダで(1) をやります。初期状態では0回ですが(したがって図がない)ほんの少し動かすだけで2500回になります。うっすらと図が出ます。「緑描画」「青描画」「両方」のボタンで,初期値を緑の点$${(3,0)}$$,青の点$${(1,3)}$$ にした場合の図が描けます。

画像2

うっすらなので分かりにくいかもしれませんが,緑と青では打たれている点が違うようです。
50000回にしてみました。

画像3

緑と青を交互に見比べるだけではほとんど同じに見えるでしょう。両方を表示してみると緑と青が混じっているので,異なる点に打たれていると判断できます。
もっと増やすとどうなるでしょうか。
図は示しません,やってみてください。なお,回数が増えると描画に時間がかかり、スライダの動きが悪くなります。「Reset」してからやりなおすとよいでしょう。

次に(3) です。
「なぜそうなるのか」を考えるのに,関数を繰り返し使うことによって,点はどのように打たれていくのかを見ていきます。計算するのは大変なので,画面上で見ます。そのために,上のスライダを使います。まず「Reset」してはじめの状態にもどしておきます。
やることは
(a) 回数を1,2,3・・としていき,どのように点が打たれていくかを観察する。
(b) 多く点を打った図の中で,(a) をやってみる。
(c) 係数を変えて別の図で(a)(b) をやる。

の3つです。
まず(a)。式と見比べながら,その点が打たれる理由を考えましょう。(だいたいで結構)

画像4

スライダを動かしていくとそれにつれてアニメーションのように点が増えていきます。途中から,緑の点と青の点が同じような動きをしますが,打たれる点はまったく別です。

画像5

次に,「(b) 多く点を打った図の中で,(a) をやってみる」 です。下のスライダを動かして,多くの点を表示します。この状態でも上のスライダではじめの方の点の動きを見ることができます。

画像6

 次に 「(c) 係数を変えて別の図で(a)(b) をやる」です。たとえば次の図です。

画像7

この図では,初期値を示す青の点が遠くにあり,羽根から外れたところに青の軌道が描かれています。しかし,間違いではありません。はじめの方の回数を減らすと,確かに小さな点が羽根の外側にあることがわかります。

画像8

しかし,羽根の外にあるのははじめだけで,そのあとは羽根の中に入っていくようです。

おもしろいのでいろいろやってみましょう。

次は「(2) 異なる初期値をとったときに,打たれる点はどのくらいの割合で同じになるのか」です。
両方の点を記憶して同じ点がいくつあるかを数えればよいのですが,この比較にはとても時間がかかります。たとえば1万点を取ると比較回数は1万の2乗。同じ点が見つかったときに次の点に進むにしても膨大な量です。
実際にやってみると,今のパソコンなら1万点ぐらいは平気で1分以内に終わります。しかし5万点になると約13分,10万点になると2時間以上かかります。(Mac mini(M1) の場合)CindyJSに書き出してWeb上で実行すると,さらに時間がかかり,しかもブラウザによってかなり違います。大量にメモリを使うためとおもわれます。
そこで,1万点を超える場合は,1万点まで比較することにしてみました。個数を増やすとだんだん密になってくるので,1万点までの比較でも同じ点が増えると思われます。
しかし,実際にやってみると,完全に同じ点は,1万点くらいだと0なのです。画面上で密になって重なってくるように見えるのは,点に大きさがあるためです。そこで,「完全に一致」ではなく,「十分近い」にしてみました。どの程度を「十分近い」にするかも問題ですが,距離が0.1未満としたのが,次のツールです。

1000個から始められ,10000個まではすべて比較します。図も両方を描きます。
Mac mini(M1):Monterey  上のSafari では1分38秒で141個が一致,と表示されました。Cinderellaでは40秒で終わっていますのでかなり遅いことがわかります。

画像9

同じ Mac mini(M1) 上の FireFox ではさらに遅くなります。
10000を超えると,どちらをそこまで描くかで,「緑優先」「青優先」のボタンが有効になります。次は20000点の場合です。

画像10

「緑優先」の場合は緑の点の方が20000点まで描かれます。この20000点と,青の10000点を比較するわけです。結果は次のように異なったものとなります。

画像11

係数を変え,初期値も変えてやってみるとまた違った結果になります。

画像12

同じ条件で緑優先にしたのが見出し画像です。

時間はかかりますがいろいろやってみると面白いでしょう。


←前節:鳥の翼

次節:繰り返し関数の分類

目次に戻る