フラクタルを1億倍に拡大してみた

2022/08/21

フラクタル プログラム 数学

前回8月17日のブログで、フラクタルのお絵かきに挑戦した。

エクセルでプログラムを作って描いたのだが、一つの画像を描くのに30秒もの時間がかかることや、画像の解像度がどうしても粗くなってしまうのがきになっていた。


エクセルではなく、直接プログラムを書いて、画像を描けないものか、いろいろとしらべていたら、Processingというソフトがあることがわかった。 電子アートとビジュアルデザインのためのプログラミング言語で、フリーであり、初心者がプログラミングを学習するのに適しているらしい。


ということで早速Processingをインストールして、マンデルブロのお絵かきをやってみた。プログラムはJAVAなので、なんとかできそう。


マンデルブロ集合


ということで描いた作品がこれ。エクセルの作品とは色付けを少し変えている。描画時間は一瞬(1秒程度)で格段に速くなり、解像度も1200*900と十分大きくすることができた。



それではということで、このマンデルブロ図形をどこまで拡大できるかやってみた。上の図形の倍率を1倍として、まずは、四角で囲われた部分を描画する。これで倍率は10倍である。



これを更に10倍に拡大して、上の図の四角で囲われた部分を描画する。これで倍率は100倍になる。


このように、次々を10倍していく。次は1000倍。


1万倍!


10万倍!


100万倍!


1000万倍!


最後に一億倍!!!
ここまで拡大すると、エッジのギザギザがなめらかになってくる。これはマンデルブロの問題ではなく、計算上の問題。
計算は倍精度で行っているのだが、桁数が足りず、これ以上細かい計算ができないのである。4倍精度とか8倍精度など精度を上げ続ければ、理論上は無限倍に拡大可能で、似たような図形が繰り返し、現れる。


マンデルブロについては、ここまで。次はマンデルブロの派生形とも言えるジュリアン集合を絵にしてみる。


ジュリア集合


マンデルブロ集合について数学的な説明をすると、複素数\(z_{n}\)についての数列

\[z_{0} = 0\]

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

が収束するかどうかを複素数\(c\)について調べたものであった。

これに対してジュリア集合は、複素数\(c\)を固定にして、複素数\(z_{n}\)の初期値\(z_{0}\)を変化させて収束するかどうかを見るものである。どちらを変化させるかだけで、基本的には同じ数列の収束を調べていることになる。


ジュリア集合は、\(z_{0}\)の値によって、さまざまに異なるパターンを描く。ここでは

\[z_{0} = 0.32 + 0.043i\]

とした場合のパターンを見てみる。



なんだかプジョーのエンブレムみたいなパターンが出てくる。この中の四角で囲った部分を次々に拡大してみる。


まずは10倍。




この絵の中心を拡大する。倍率は100倍。



同じように。1000倍、1万倍、、、1億倍にまで拡大してみる。







最後の画像が1億倍に拡大したもの。何倍に拡大しても、同じようなパターンが現れており、言われなければ拡大したものなのかどうかもよくわからない。


このように何倍に拡大しても似たような景色が広がっているのがフラクタル世界である。


原子核の周りを電子が回り、太陽の回りを惑星が回り、銀河の中心を太陽系が回り、銀河団の中で銀河が回り。。。これもフラクタルなのかもしれない。そして宇宙全体の大規模構造が、人脳の構造に酷似している(NEWSWEEK)ということも、宇宙がフラクタルであることを示唆している。



脳と宇宙の構造は似ている(News Week)

マウスの脳内の神経細胞(ニューロン)の画像と宇宙をシミュレーションした画像

https://www.newsweekjapan.jp/stories/world/2020/11/post-95038.php