マンデルブロのミニ解説と動画

2022/09/17

フラクタル プログラム

マンデルブロの魅力と久しぶりのプログラムの楽しさで、いろいろなマンデルブロを描いている。


マンデルブロを拡大していくと、似たような文様が次々と現れるのだが、ときどき、「こんな文様が!」という面白い図形が現れる。プログラムであちこちを拡大して見ているうちに、「これを動画にしたら面白そう」 と思いついて、動画を二本作ってみた。このブログの最後にリンクをつけている。


このブログでは動画の解説を兼ねて、マンデルブロのなんちゃって解説をしてみる。


マンデルブロ集合とは


マンデルブロ集合というのは、次のような条件を満たす複素数\(c = u + iv\)の集合である。

\[z_{n+1} = z_{n}^{2} + c\]

\[z_{0} = 0\]

nを無限に大きくした場合でも\(z_{n}\)が有限


\(c\)は複素数なので、この集合は横軸\(u\)、縦軸\(v\)の複素平面上の点集合として表すことができる。ただし、これでは集合に属するかどうかだけの2値なので、画像としては面白くない。そこで、どれだけの\(n\)で発散したかによって色を付けることで、興味深い画像を描くことが可能になる。下の図では、ダークブルーの領域がマンデルブロ集合であり、その周辺の色付けされた領域はマンデルブロ集合に属していない。



マンデルブロ集合に属しているかどうかは、定義から言えば\(n\)が無限になるまで、無限回の計算をしなければならない。ただ幸いなことに、一回でも\(z\)の絶対値が2を超えたら、それ以降はどんどん絶対値が大きくなって発散することがわかっている。


そこでプログラムでは、\(z\)の絶対値が2を超えた段階でマンデルブロ集合に属さないと判断し、計算回数\(n\)に応じて色をつけている。計算回数には上限を設定し、上限に達したら、計算を止めてマンデルブロ集合とみなし、ダークブルーの色をつけている。


上の図はそのようにして、描画したものである。このときの計算回数上限は200である。


計算回数による変化


\(z\)の初期値は0(\(z_{0}=0\))なので、全ての\(u,v\)について\(z_{0}\)の絶対値は0である。つまり初期値では全ての\(u,v\)について、絶対値が2を超えることはない。つまり\(u,v\)の複素平面は全面がマンデルブロ集合の候補となり、描画すると全面がダークブルーとなる。

※これは全面がマンデルブロ集合というわけではなく、まだマンデルブロ集合に属するかどうか未定であることを意味している。



次に\(z_{1}\)を求めてみる。この\(u,v\)平面は、

\[-2.0 \leqq u < 2.0, -1.125 \leqq < v < 1.125\]

としている。

\[z_{1} = z_{0}^{2} + c = u + iv\]

となり、\(c\)の絶対値、つまり\(\sqrt{u^{2}+v^{2}}\)が2を超える領域、つまり半径2以上の領域については、発散することがわかる。この時点で、この領域にはn=1に対応する色(オレンジ色)をつけ、マンデルブロ集合に属さないことを確定する。



\(n\)を増やしていくと、どんどん色の付いた領域が増え、ダークブルーの領域の形がマンデルブロの形に近づいていく。






そして\(n=200\)で、かなり正確なマンデルブロ図形を得ることができた。


拡大したら


上のスケールでは\(n=200\)で十分であるが、図形を拡大していくと、\(n=200\)では不十分で、もっと計算を繰り返さないと正確な図形が描けない。

例えば下の図形は、一部を32768倍に拡大したものであるが、最大繰り返し数を1056回に設定している。拡大率を上げれば上げるほど、もっと繰り返しが必要になる。


繰り返しによって、図形がどんどん正確になっていく様子を動画にしている。


マンデルブロの様々なパターンを拡大していく様子も動画にしているので、合わせてこちらも御視聴ください。


以上