マンデルブロ探検ベータ
マンデルブロ集合をどこまでも拡大し、クリックでジュリア集合も探検
このツールはまだ安定化中のベータ版です。結果に違和感があればお知らせください。
マウスホイールや2本指のピンチで拡大し、ドラッグで移動します。各点 c について z → z² + c を繰り返し、|z| が大きくなるまでの回数で色を塗ります(黒 = 最後まで発散しなかった点、つまり集合の内部)。対数を使ったスムーズな色付けで縞が滑らかにつながります。「ジュリアの c を選ぶ」を押してマンデルブロ集合をクリックすると、その c のジュリア集合を表示します。集合の内側の c はつながった形、外側の c は塵のように散らばった形になります。64ビット浮動小数点の限界のため、約28兆倍(2.8 × 10¹³)でそれ以上拡大できません。
処理中…
0.0
停止していません。計算が終わると結果が表示されます。
マンデルブロ探検について
画面の各ピクセルが複素数 c を1つ表します。ツールは z₀ = 0 から z → z² + c を繰り返し、|z| が256を超えたら、そこまでの反復回数で色を塗ります。最大反復回数まで一度も超えなければ黒、つまりマンデルブロ集合に属すると判定します。計算は64ビット浮動小数点(f64)で、最初の画面は中心 −0.6、短辺の幅2.8です。
「クリックでジュリアの c を選ぶ」を押してマンデルブロ集合の上をクリックするとモードが変わります。今度は c を固定し、ピクセルごとに出発点 z₀ を変えて同じ反復をします。2つの図は同じ式で、どちらを固定するかが違うだけです。
集合の定義と「2を超えたら終わり」の理由
マンデルブロ集合は、0から出発した z² + c の軌道が無限に大きくならない c の全体です。|z| が一度でも2を超えれば、その後は必ず無限大へ発散することが証明されているので、判定には半径2で足ります。このツールが256まで待つのは判定のためではなく、色をなめらかにするためです。後で説明する補正式は、脱出時の |z| が大きいほど正確になります。
いくつか手で追うと感覚がつかめます。c = −1 なら 0, −1, 0, −1… と行き来し続けるので集合の中です。c = −2 なら 0, −2, 2, 2, 2… と止まるのでやはり中で、集合が実軸上で −2 まで伸びている理由です。c = 1 なら 0, 1, 2, 5, 26, 677 と進み、5回目の反復で256を超えます。
マンデルブロは1980年の論文でこの集合の図を広く知らせ、まもなくドゥアディとハバードが「マンデルブロ集合」と名づけて連結性などの性質を証明しました。
脱出時間アルゴリズムとなめらかな色
反復回数 n をそのまま色にすると、n が整数なので色が段々の帯になります。このツールは μ = n + 1 − log₂(log₂|zₙ|) で小数部分を補います。|z| が大きくなると毎回ほぼ2乗されるので、脱出時の |z| の大きさから「実際には n と n+1 の間のどのあたりで超えたか」を推定でき、帯の境目が消えます。
高速化の工夫も1つあります。主カージオイド(いちばん大きいハート形)とその左の周期2の円板の内側は、式1つですぐ判定できます。ここは最大反復まで回しても結局黒になる場所なので、計算を省くと最初の画面がずっと速く出ます。
最大反復回数が足りないと起きること
黒は「集合の中」ではなく「最大反復までに脱出しなかった」という意味です。境界の近くには長く粘ってから脱出する点が多く、反復回数が足りないと外側の点が黒く塗られ、細いフィラメントがずんぐり見えます。
面白い例がタツノオトシゴの谷の入口、c = −0.75 付近です。c = −0.75 + εi で脱出までの反復回数に ε をかけると π に近づきます。1991年にデイブ・ボルが見つけ、2001年にクレバノフが論文にまとめた現象です。初期値の500回では、ε = 0.001 の点(実際には3,146回で脱出)を集合の中と誤って塗ります。「拡大に合わせて自動」を有効にすると、反復回数は 200 + 120 ×(log₁₀ 倍率)² で増え、最大20,000回です。
拡大が約10¹³倍で止まる理由
f64 の仮数は53ビットです。1と2の間の数は約 2.2 × 10⁻¹⁶ 間隔でしか表せず、0.5と1の間はその半分です。このツールは画面の幅が10⁻¹³を下回らないようにしていて、キャンバスが800ピクセルなら1ピクセルの間隔は 1.25 × 10⁻¹⁶ になります。実部の大きさが1を超える場所(たとえばタツノオトシゴの谷の左側、c ≈ −1.25)では、この間隔が表現できる間隔より細かくなり、隣のピクセルが同じ数に丸められて四角いブロックが見え始めます。
超高倍率の動画を作るソフトは、基準点1つだけを任意精度で計算し、残りはその差だけを f64 で計算する摂動法などを使います。このツールはブラウザで即座に動くことを優先してその方法を使っていないため、拡大の限界は約 2.8 × 10¹³ 倍です。
ジュリア集合:c をどこで選ぶか
c がマンデルブロ集合の中なら、その c のジュリア集合はひとつながりの形になり、外なら散らばった塵(カントール集合)になります。マンデルブロ集合は「ジュリア集合がつながっている c の地図」と見ることができます。境界に近い c ほどジュリア集合も複雑になり、初期値 c = −0.8 + 0.156i は境界のすぐそばの点です。
例
c = 1 をこのツールの方式で計算
- 入力
c = 1 + 0i、脱出半径256- 結果
z:0 → 1 → 2 → 5 → 26 → 677、n = 5 で脱出、なめらかな値 μ ≈ 2.77
μ = 5 + 1 − log₂(log₂ 677) = 6 − log₂(9.40) ≈ 6 − 3.23 = 2.77。反復回数5より小さくなるのは補正式の定義によるもので、色の順序さえ合っていれば問題ありません。
タツノオトシゴの谷の入口で π を見つける
- 入力
c = −0.75 + εi、ε = 0.1 / 0.01 / 0.001- 結果
脱出までの反復 36 / 318 / 3,146 → ε をかけると 3.6 / 3.18 / 3.146
ε が小さくなるほど積は π = 3.14159… に近づきます。3つ目の点は初期値の最大500回では黒く塗られるので、最大反復を5,000以上にすると外側だと分かります。
実軸の端
- 入力
c = −2 と c = −2.01- 結果
−2:0, −2, 2, 2, 2…(中)/ −2.01:8回目の反復で脱出
集合は実軸上でちょうど −2 までです。0.01だけ外れた −2.01 では軌道がすぐに大きくなります。
使い方
- ホイールか2本指のピンチで拡大し、ドラッグで移動する。
- 境界がぼやけたら最大反復を上げるか「拡大に合わせて自動」を有効にする。
- 「クリックでジュリアの c を選ぶ」を押して集合上の1点をクリックする。
- 配色を変えて反復の構造を別の見え方で確かめる。
主な用語
- 脱出時間
- 軌道の大きさが脱出半径を初めて超えるまでの反復回数。
- 主カージオイド
- 集合本体のハート形の部分。この中の c では軌道が1点に収束する。
- ジュリア集合
- c を固定したとき、z² + c の反復が発散しない出発点の集合の境界。
- 倍精度(f64)
- IEEE 754 の64ビット浮動小数点形式。仮数53ビット、10進で約15〜16桁。
よくある質問
マンデルブロ集合の面積はいくつですか?
正確な値は分かっておらず、数値的な推定で約1.5程度とされているだけです。このツールは面積を計算しません。
どこまでも拡大できると聞きましたが、なぜ止まるのですか?
数学的には境界をいくらでも拡大できますが、このツールは64ビット浮動小数点を使うため、ピクセル間隔が10⁻¹⁶に近づくと隣のピクセルを区別できません。そのため約 2.8 × 10¹³ 倍で止めています。
黒い部分はすべて集合の中ですか?
最大反復までに脱出しなかったというだけです。境界の近くでは反復を増やすと黒い点の一部に色がつきます。
拡大するほど描画が遅くなるのはなぜですか?
深く入るほど境界近くの点が増え、自動の反復回数も増えるからです。ツールは8ピクセルのブロック、2ピクセル、1ピクセルの順に描いて、画面が固まらないようにしています。
出典
- B. B. Mandelbrot, Fractal aspects of the iteration of z → λz(1−z) for complex λ and z, Ann. N.Y. Acad. Sci. 357, 249–259 (1980)
- A. Klebanoff, π in the Mandelbrot set, Fractals 9(4) (2001)
- D. Goldberg, What Every Computer Scientist Should Know About Floating-Point Arithmetic (1991)
基準日: