前回までは hhayyatto さんの記事で遊ばせてもらっていましたが、(私が何となくでもついて行けそうな)図形的な記事が無くなってしまいましたので、今回からは 108Hassium さんの記事を参考につつ、 Ultra Fractal(以下 UF)で遊んでみようと思っております。
今回は以下の記事を元記事とします。
とは言いつつ、元記事では「軌道の遷移」が図で出力されているものが多いのですが、UF ではそれが難しい、というか今のところ私には無理なのです。今後どうにかできるのだろうか? と疑問を抱えつつ先に進みます。
まずはマンデルブロ集合の初期値の変更からです。
漸化式と初期値は次の内容だったはずです。
$${\begin{cases} z_{n+1} = z_n^2 + c \\ z_0=0 \end{cases}}$$
マンデルブロは、$${z}$$は固定、$${c}$$はピクセル座標で計算を繰り返しますが、その$${z}$$の初期値「0」を違う値に変更してみようということですね。
UF では通常、起動時のフォーミュラはマンデルブロ集合が設定されていますし、初期値を変更するためのパラメータも用意されているので、スクリプトを変更する必要はありません。
では、初期値 1 と i の画像を描画してみましょう。
初期値 i だと「i なんて入力できない」という感じですが、これは 1i なので「虚数部が 1」ということですね。
初期値の実数部が 1 の場合。
mapping: center=-1.65/0 magn=1.1 formula: maxiter=1000 filename="SU-9_Sandbox.ufm" entry="MandelbrotMod_ORG_00" start=1/0 power=2/0 p_bailout=128 inside: transfer=linear entry="Default" outside: density=2 transfer=linear entry="Basic" type=Iteration初期値の虚数部が 1 の場合。
mapping: center=0.4/0 magn=1.2 formula: maxiter=1000 filename="SU-9_Sandbox.ufm" entry="MandelbrotMod_ORG_00" start=0/1 power=2/0 bailout=128 inside: transfer=linear entry="Default" outside: density=2 transfer=linear entry="Basic" type=Iterationこれはもう簡単というか、標準機能なので出来ないはずがないですね。
元記事を見ていると$${z=\frac{1}{2}}$$(つまり 0.5)というのが出てくるので、ついでに描画してみました。
mapping: center=-1/0 magn=1.3 formula: maxiter=1000 filename="SU-9_Sandbox.ufm" entry="MandelbrotMod_ORG_00" start=0.5/0 power=2/0 p_bailout=128 inside: transfer=linear entry="Default" outside: density=2 transfer=linear entry="Basic" type=Iterationもう少しついでに、散策してみます。
まずは、次の画像の中央。右方向にとんがった部分。
mapping: center=-0.14/0.65 magn=15 formula: maxiter=1000 filename="SU-9_Sandbox.ufm" entry="MandelbrotMod_ORG_00" start=0.5/0 power=2/0 bailout=128 inside: transfer=linear entry="Default" outside: density=2 transfer=linear entry="Basic" type=Iteration次の図のようにパターンが 2 つおきのリズムになっている部分があって…
mapping: center=-0.133946/0.649552 magn=22454 formula: maxiter=1000 filename="SU-9_Sandbox.ufm" entry="MandelbrotMod_ORG_00" start=0.5/0 power=2/0 bailout=128 inside: transfer=linear entry="Default" outside: density=2 transfer=linear entry="Basic" _type=Iterationこれが、少し右側を見てみると 3 つおきっぽく見えるようになる部分がある。なんか初期値 = 0 の模様よりも複雑になっている部分があるような?
mapping: center=-0.132654/0.649557 magn=25828 formula: maxiter=1000 filename="SU-9_Sandbox.ufm" entry="MandelbrotMod_ORG_00" start=0.5/0 power=2/0 bailout=128 inside: transfer=linear entry="Default" outside: density=2 transfer=linear entry="Basic" type=Iteration$${z=\frac{1}{2}}$$を初期値とする$${c*(z^2−z)}$$のマンデルブロというのも気になりますね。
これは Standard.ufm のマンデルブロのスクリプトを改造すれば簡単です。
mapping: center=-1/0 magn=0.8 formula: maxiter=100 filename="SU-9.ufm" entry="MandelbrotMod_ZPow2minusZ_00" start=0.5/0 power=2/0 bailout=1.0E20 inside: transfer=none outside: density=4 transfer=linear entry="Basic" type=Iterationが、Standard.ufm には Lambda(Mandelbrot) というフォーミュラがあります。以下のような図です。
mapping: center=1/0 magn=0.8 formula: maxiter=100 entry="LambdaMandelbrot" start=0.5/0 power=2/0 bailout=1.0E20 inside: transfer=none outside: density=4 transfer=linear entry="Basic" type=Iteration使われているのは次の式で、こちらも初期値は$${z=\frac{1}{2}}$$です。
$${c*z*(1-z)^{(2-1)}}$$
この 2 つフォーミュラは一見同じように見えますが、もちろん違います。
簡単には$${z^3}$$の設定にしてみるとすぐに確認できます。
次の図は$${c*(z^3−z)}$$。
mapping: center=0/0 magn=0.8 formula: maxiter=100 filename="SU-9.ufm" entry="MandelbrotMod_ZPow2minusZ_00" start=0.5/0 power=3/0 bailout=1.0E20 inside: transfer=none outside: density=4 transfer=linear entry="Basic" type=Iteration次の図は$${c*z*(1-z)^{(3-1)}}$$。
mapping: center=4/0 magn=0.37 formula: maxiter=100 filename="SU-9.ufm" entry="LambdaMandelbrotMod_00" start=0.5/0 power=3/0 bailout=1.0E20 inside: transfer=none outside: density=4 transfer=linear entry="Basic" type=Iterationえと、普通は数式の乗算の表記(x だったり * だったり)は省略するようですが、私は書くようにしています。理由は、スクリプトからコピーした時に消したり追加したりの手間や間違いを減らすためなので、あしからず。
次はマルチブロですね。
マルチブロも起動時のフォーミュラで実現可能です。
$${z^4+c}$$は以前にも触れていましたが$${z^3+c}$$はやっていなかったので描画しておきます。
mapping: center=-0.05/0 magn=1.45 formula: maxiter=1000 filename="SU-9.ufm" entry="MandelbrotMod_ORG_00" start=0/0 power=3/0 bailout=128 inside: transfer=linear entry="Default" outside: density=4 transfer=linear entry="Basic" type=Iteration次に、キャプション部分で「例外」と書かれたマンデルブロ集合がありますが、これは… もうやっちゃった気がするので先に進みます;
(しばし AI と格闘…)
ん~。やはり UF で周期を描画するのは厳しいので諦めます。
私は周期を調べたいわけでは無いですし…
周期を何らか曲線化して図形を描画するのは面白そうですが、あまりにも UF には不利な処理だと思います。前回のアトラクターのやり方を応用すればできそうな気もしますが… それこそ AI が得意な言語でプログラミングしてもらったほうが良いかもしれない。
なので、元記事で紹介されている式を再現するに留めます。
まずは$${z^3+c}$$の場合。
$${c=0.63+0.5i}$$のジュリア集合。
mapping: center=-0.1/0.1 magn=1.6 formula: maxiter=10000 filename="SU-9.ufm" entry="JuliaMod_ORG_00" seed=0.63/0.5 power=3/0 bailout=128 inside: density=2 transfer=linear entry="ExponentialSmoothing" diverge=no converge=yes divergescale=1.0 outside: density=0.5 transfer=linear entry="Smooth" power=2/0 bailout=128.0$${c=0.58+0.6i}$$のジュリア集合。
mapping: center=-0.1/0.1 magn=1.75 formula: maxiter=10000 filename="SU-9.ufm" entry="JuliaMod_ORG_00" seed=0.58/0.6 power=3/0 bailout=128 inside: density=2 transfer=linear entry="ExponentialSmoothing" diverge=no converge=yes divergescale=1.0 outside: density=0.5 transfer=linear entry="Smooth" power=2/0 bailout=128.0$${c=0.49-0.08i}$$のジュリア集合。
いや~、これが大変でした;
元記事の情報では$${0.49+0.88i}$$ですが、これでは掲載されている図のようにはならず、あちこちと探しました。おかげでずいぶんとマンデルブロを探すことになり、良い経験になりました。
mapping: center=-0.13/-0.025 magn=1.9 formula: maxiter=21000 filename="SU-9.ufm" entry="JuliaMod_ORG_00" seed=0.49/-0.08 power=3/0 bailout=3024 inside: density=1024 transfer=linear entry="Decomposition" outside: density=0.5 transfer=linear entry="Smooth" power=2/0 bailout=128.0最初はジュリア集合として探していたのですが、マンデルブロから Switch 機能を利用して探したほうが楽だと思い出したので、マンデルブロを探し回りました。
とはいっても、$${z^3}$$のマルチブロは上下左右が線対称なので、探すのは$${\frac{1}{4}}$$の範囲に絞られます。
捜索範囲で、下の元記事の画像の赤丸部分の特徴(巻き具合、縞の本数、中央の三角の具合)を目指してマンデルブロを探索するということになります。
目指す特徴下の図。子マンデルブロの渦の巻き具合の違いから、おおよその位置を特定できます。明らかに上の赤丸の方が元記事の画像の巻き方に近いですよね。
マンデルブロの渦の巻き具合これだけで、おおよそ以下の範囲に絞り込めます。
渦の具合から想定される範囲下の図は、 Switch 機能でマンデルブロの赤丸部分のジュリア集合が右側に表示されている様子です。
Switch 機能で確認 1/3
Switch 機能で確認 2/3
コブ(縞)が増えてる
Switch 機能で確認 3/3
コブ(縞)がさらに増えてる子マンデルブロ毎に大まかなパターンが違いますね。
子子マンデルブロの場合は、明らかにジュリア集合の形状が違うので、子マンデルブロに限定できます。
子子マンデルの場合
なんか筋っぽい小さいマンデルブロになるほど、縞(というかコブ)が増えています。
もちろん微妙な位置で変化するので必ずとは言えませんが、参考にはなります。
小さなマンデルブロほど縞が多い元記事の場合、縞は少し多いので、ある程度小さな子マンデル。
中央の三角から、12 本目が左の大きな三角(青)、6 本目が次に大きな三角(黄)、2 本目が更に小さな三角(紫)。青と紫の間に 4 本の小三角縞、黄色と紫の間に 4 本の小三角縞、中央の三角のすぐ左の小三角縞は紫三角より小さい。
という感じで絞り込み、スイッチ機能でしらみつぶしに探した結果、$${c}$$の値を特定できました。
さて、どんどん進みましょう。
$${c=0.02+1.12i}$$のジュリア集合。
mapping: center=0/0.2 magn=1.6 formula: maxiter=10000 filename="SU-9.ufm" entry="JuliaMod_ORG_00" seed=0.02/1.12 power=3/0 bailout=128 inside: density=16 transfer=linear entry="Decomposition" outside: transfer=linear entry="Smooth" p_power=2/0 bailout=128.0$${c=0.17+0.75i}$$のジュリア集合。
mapping: center=-0.515/-0.14 magn=3 formula: maxiter=10000 filename="SU-9.ufm" entry="JuliaMod_ORG_00" seed=0.17/0.75 power=3/0 bailout=128 inside: density=32 transfer=linear entry="Decomposition" outside: density=0.1 transfer=linear entry="Smooth" power=2/0 bailout=128.0次は$${c*(\frac{z^3}{3}-\frac{z^2}{2})}$$の場合。
まずはマンデルブロ集合ですね。
これも、Standard.ufm のマンデルブロの式とパラメータを変更すれば対応できます。
mapping: center=-3/0 magn=0.35 formula: maxiter=100 filename="SU-9.ufm" entry="MandelbrotMod_ZP1divAminusZP2divB_00" start=1/0 power1=3/0 power2=2/0 pa=3/0 pb=2/0 bailout=4 inside: transfer=none outside: density=4 transfer=linear entry="Basic" type=Iteration$${c=-6.5+1i}$$のジュリア集合。
これも、Standard.ufm のジュリア集合の式とパラメータを変更して対応。
mapping: center=0.51/0 magn=2.2 formula: maxiter=100 filename="SU-9.ufm" entry="JuliaMod_ZP1divAminusZP2divB_00" seed=-6.5/1 power1=3/0 power2=2/0 pa=3/0 pb=2/0 bailout=4.0 inside: density=8 transfer=linear entry="ExponentialSmoothing" diverge=no converge=yes divergescale=1.0 outside: density=2 transfer=linear entry="Smooth" power=2/0 bailout=128.0$${c=-6.2+1.08i}$$のジュリア集合。
mapping: center=0.95786239581/0.0552480754815 magn=21.294682 formula: maxiter=5000 adjust=yes filename="SU-9.ufm" entry="JuliaMod_ZP1divAminusZP2divB_00" seed=-6.2/1.08 power1=3/0 power2=2/0 pa=3/0 pb=2/0 bailout=4 inside: transfer=linear offset=50 entry="ExponentialSmoothing" diverge=no converge=yes divergescale=1.0 outside: density=0.05 transfer=linear entry="Smooth" power=2/0 bailout=128.0この図、元記事と設定は同じですが、微妙に違うような気がします。
元記事の図の中央部に青と水色の小さな領域がありますが、その間に隙間(小さな領域)があるように見えます。しかし、私の図では隙間が無いような? 彩色アルゴリズムのせいではないような気がするので、何か腑に落ちない。
$${c=-6.77+0.84i}$$のジュリア集合。
mapping: center=0.941929953335/0.0385193490045 magn=24.009687 formula: maxiter=5000 adjust=yes filename="SU-9.ufm" entry="JuliaMod_ZP1divAminusZP2divB_00" seed=-6.77/0.84 power1=3/0 power2=2/0 pa=3/0 pb=2/0 bailout=128 inside: transfer=linear offset=80 entry="ExponentialSmoothing" diverge=no converge=yes divergescale=1.0 outside: density=0.05 transfer=linear entry="Smooth" power=2/0 bailout=128.0UF では彩色に Gradient を使っていますが、新しい色を使いたい場合にはランダム生成もできるのでとても楽です。が、ただのランダムでは、すぐには良い感じの色の構成にならないのが悩みです。
以前、なんのソフトか忘れましたが(たぶん Apophysis?)、写真から色を抽出して Gradient を生成する機能があって、とても便利だった記憶があります。綺麗な写真は、そもそも色の構成が良いので、そこから作られるデータは使い勝手が良いのです。
この機能、UF に追加してくれないかなぁ。
AI に UF と互換性のあるデータを出力するグラデーションエディタを作ってもらうことも可能ですが、やろうと思いつつ進んでおりません;。
$${c=-6.22+1.07i}$$のジュリア集合。
mapping: center=0.95075068164/0.02800724362 magn=12.042684 formula: maxiter=5000 adjust=yes filename="SU-9.ufm" entry="JuliaMod_ZP1divAminusZP2divB_00" seed=-6.22/1.07 power1=3/0 power2=2/0 pa=3/0 pb=2/0 bailout=512 inside: density=0.1 transfer=linear offset=370 entry="ExponentialSmoothing" diverge=no converge=yes divergescale=1.0 outside: density=0.1 transfer=linear offset=250 entry="Smooth" power=2/0 bailout=512ここで元記事では Inside(非発散部)の彩色方法について「内側は周期で色決め、収束速度で陰影をつける」と書かれています。元記事の画像で黒い輪のような模様はどういう処理なのだろうと思っていました。なるほど、そういうことだったのですね。とはいっても、自分で実装はできないのですが…
108Hassium さんは彩色方法をサンプルコード付きで紹介されている記事があったはずなので、その時にでも挑戦してみようと思います。
次は$${c=-5.19+0.65i}$$のジュリア集合。
mapping: center=0.96977835804/0.1682921817755 magn=9.0111017 formula: maxiter=10000 adjust=yes filename="SU-9.ufm" entry="JuliaMod_ZP1divAminusZP2divB_00" seed=-5.19/0.65 power1=3/0 power2=2/0 pa=3/0 pb=2/0 bailout=512 inside: density=0.5 transfer=linear entry="ExponentialSmoothing" diverge=no converge=yes divergescale=1.0 outside: density=0.15 transfer=linear offset=250 entry="Smooth" power=2/0 bailout=512$${c=-6.68+1.14i}$$のジュリア集合。
mapping: center=0.95215030018/0.043398154075 magn=17.609831 formula: maxiter=10000 adjust=yes filename="SU-9.ufm" entry="JuliaMod_ZP1divAminusZP2divB_00" seed=-6.68/1.14 power1=3/0 power2=2/0 pa=3/0 pb=2/0 bailout=1E20 inside: density=0.5 transfer=linear entry="ExponentialSmoothing" diverge=no converge=yes divergescale=1.0 outside: density=0.25 transfer=linear offset=30 entry="Smooth" power=2/0 bailout=128.0次は$${\frac{c}{z^2-1}+1}$$の場合で、最初はマンデルブロ集合ですね。
mapping: center=1.3/0 magn=0.8 formula: maxiter=100 filename="SU-9.ufm" entry="MandelbrotMod_CdivZpowminusAplusB_00" start=0/0 power=2/0 pa=1/0 pb=1/0 bailout=128 inside: transfer=none outside: density=2 transfer=linear entry="Basic" type=Iteration次は$${c=1.18+0.96i}$$のジュリア集合。
mapping: center=0/0 magn=0.9 formula: maxiter=200168 adjust=yes filename="SU-9.ufm" entry="JuliaMod_CdivZpowminusAplusB_00" seed=1.18/0.96 power=2/0 pa=1/0 pb=1/0 bailout=512 inside: density=128 transfer=linear entry="Decomposition" outside: density=0.01 transfer=linear entry="Smooth" power=2/0 bailout=512先生、むっちゃ重いです;
え、108Hassium さんどんなマシン使ってるのだろう。
元記事の画像をダウンロードして情報をみましたが、画像サイズ 2001 pixels の正方形で 72 dpi。レンダリング時の設定がこのままかはわかりませんけどね。
次は$${c=1.65+1.06i}$$のジュリア集合。
mapping: center=0.14222222225/0.28444444445 magn=4.5 formula: maxiter=200400 adjust=yes filename="SU-9.ufm" entry="JuliaMod_CdivZpowminusAplusB_00" seed=1.65/1.06 power=2/0 pa=1/0 pb=1/0 bailout=1024 inside: density=128 transfer=linear entry="Decomposition" outside: density=0.01 transfer=linear entry="Smooth" power=2/0 bailout=1024この画像は 2000 pixels の正方形で 300 dpi で出力して約 1 時間。
これを掲載用として 800 pixels に変換してます。
ちなみに UF はグラボを使わないので、CPU 性能の勝負になります。
う~ん。こんど軽いデータでレンダリング設定をテストしてみないとだなぁ…
次は$${c=1.59+0.67i}$$のジュリア集合。
mapping: center=0.04444444445/0.2311111111 magn=3.6290323 formula: maxiter=200400 adjust=yes filename="SU-9.ufm" entry="JuliaMod_CdivZpowminusAplusB_00" seed=1.59/0.67 power=2/0 pa=1/0 pb=1/0 bailout=1024 inside: density=128 transfer=linear entry="Decomposition" outside: density=0.01 transfer=linear entry="Smooth" power=2/0 bailout=1024$${c=1.64+1.07i}$$のジュリア集合。
mapping: center=0.012266666955/0.0198400003035 magn=29.809221 formula: maxiter=200672 adjust=yes filename="SU-9.ufm" entry="JuliaMod_CdivZpowminusAplusB_00" seed=1.64/1.07 power=2/0 pa=1/0 pb=1/0 bailout=2048 inside: density=128 transfer=linear entry="Decomposition" outside: density=0.01 transfer=linear entry="Smooth" power=2/0 bailout=2048$${c=-0.1+0.05i}$$のジュリア集合。
mapping: center=0.0533333333/0.08 magn=6.25 formula: maxiter=200672 adjust=yes filename="SU-9.ufm" entry="JuliaMod_CdivZpowminusAplusB_00" seed=-0.1/0.05 power=2/0 pa=1/0 pb=1/0 bailout=2048 inside: density=128 transfer=linear entry="Decomposition" outside: density=0.01 transfer=linear entry="Smooth" power=2/0 bailout=2048次は$${con(z)^2+c}$$の場合のマンデルブロ集合。
mapping: center=-0.5/0 magn=1 formula: maxiter=250 filename="SU-9.ufm" entry="TricornSelf_00" start=0/0 power=2/0 pfunc=ident bailout=128 inside: transfer=linear offset=200 entry="OrbitTraps" trapshape=point diameter=1.0 traporder=4.0 trapfreq=1.0 trapcolor=distance traptype=closest threshold=0.25 trapcenter=0/0 aspect=1.0 angle=0.0 solidcolor=no outside: transfer=linear entry="Smooth" power=2/0 bailout=128.0元記事に書いてありますが「トリコーン」とか「マンデルバー」とか? 複素共役? 前にやってますね。忘れてましたが;
前回はパブリックフォーミュラを使って描画していましたが、今回は2つのパブリックフォーミュラ(sp.ufm と jlb.ufm)から良いとこどりをして自分用のフォーミュラを作りました。理由は、元記事で書かれている複素共役の記号「con」がスクリプト中でどのように書かれているのか気になったからです。見れば良い話ですが、ついでです。結果、UF には「conj」という組込関数があり、それが使われていることがわかったのが収穫です。
次は$${c=0.3+0.7i}$$のジュリア集合。
mapping: center=0.32974214299/0.18234507965 magn=3.3045825 formula: maxiter=2173 adjust=yes filename="SU-9.ufm" entry="TricornJuliaSelf_00" power=2/0 seed=0.3/0.7 pfunc=ident bailout=128 inside: density=16 transfer=linear offset=100 entry="Decomposition" outside: density=0.15 transfer=linear entry="Smooth" power=2/0 bailout=128.0$${c=0.79+0.09i}$$のジュリア集合。
mapping: center=0.35855941615/0.19826997975 magn=2.872866 formula: maxiter=2153 adjust=yes filename="SU-9.ufm" entry="TricornJuliaSelf_00" power=2/0 seed=-0.79/0.09 pfunc=ident bailout=128 inside: density=32 transfer=linear offset=200 entry="Decomposition" outside: density=0.1 transfer=linear entry="Smooth" power=2/0 bailout=128.0$${c=0.65+1i}$$のジュリア集合。
mapping: center=0.1213963604/0.29951216845 magn=2.7055633 formula: maxiter=2000 adjust=yes filename="SU-9.ufm" entry="TricornJuliaSelf_00" power=2/0 seed=0.65/1 pfunc=ident bailout=4.0 inside: density=16 transfer=linear entry="Decomposition" outside: density=0.5 transfer=linear entry="Smooth" power=2/0 bailout=128.0$${c=-0.67+0.07i}$$のジュリア集合。
mapping: center=0.32279884395/0.20572690885 magn=2.872866 formula: maxiter=2000 adjust=yes filename="SU-9.ufm" entry="TricornJuliaSelf_00" power=2/0 seed=-0.67/0.07 pfunc=ident bailout=4.0 inside: density=4 transfer=linear offset=-84 entry="Decomposition" outside: density=0.5 transfer=linear entry="Smooth" power=2/0 bailout=128.0$${c=0.56+0.77i}$$のジュリア集合。
mapping: center=-0.0060084993/0.46710849715 magn=2.9901099 formula: maxiter=2000 adjust=yes filename="SU-9.ufm" entry="TricornJuliaSelf_00" power=2/0 seed=0.56/0.77 pfunc=ident bailout=128 inside: density=32 transfer=linear offset=250 entry="Decomposition" outside: density=0.5 transfer=linear entry="Smooth" power=2/0 bailout=128.0$${c=0.61+0.86i}$$のジュリア集合。
mapping: center=0.04172020812/0.464279721685 magn=3.3045824 formula: maxiter=2000 adjust=yes filename="SU-9.ufm" entry="TricornJuliaSelf_00" power=2/0 seed=0.61/0.86 pfunc=ident bailout=128 inside: density=16 transfer=linear entry="Decomposition" outside: density=0.5 transfer=linear entry="Smooth" power=2/0 bailout=128.0次は$${(z^2+c)^2+d}$$の場合のマンデルブロ集合から。
元記事では「$${c=-2}$$で固定してマンデルブロを描画」と書かれていますが、マンデルブロの場合に固定するのは $${z}$$ の初期値でしたよね…
まいいや。
私の結果は以下の通り。$${d=0}$$です。
mapping: center=-0.2/0 magn=1.7 formula: maxiter=2076 adjust=yes filename="SU-9.ufm" entry="MandelbrotMod_SU9_00" start=0/0 power1=2/0 power2=2/0 pd=0/0 bailout=4 inside: density=8 transfer=linear entry="Default" outside: transfer=linear entry="Smooth" power=2/0 bailout=4なんか$${z^4}$$のマルチブロですね。何か間違えたか?
元記事では、マンデルブロの本体らしき領域が図の右端に描画されていますが、私の図とはずいぶん違う…
次の図は$${d=-4}$$の図ですが、なんか元記事の図と近い気がしますが…
mapping: center=-1.54/0 magn=4.5 formula: maxiter=2337 adjust=yes filename="SU-9.ufm" entry="MandelbrotMod_SU9_00" start=0/0 power1=2/0 power2=2/0 pd=-4/0 bailout=4 inside: density=8 transfer=linear entry="Default" outside: transfer=linear entry="Smooth" power=2/0 bailout=4まいっか。
さて、どうして$${z^4+c}$$のマルチブロと同じに見えるのか? です。
なんででしょう?
今回の式は$${(z^2+c)^2+d}$$で、今は$${d=0}$$なので、$${(z^2+c)^2}$$の状態。
これを展開すると$${z^4+2cz^2+c^2}$$で、$${z^4+c}$$とは違います。
ここで、わかりやすくするために両方の式を調整します。
$${a^4+c}$$
$${b^4+2cb^2+c^2}$$
これに、ステップ 1 として初期値$${z=0}$$(つまり$${a=0、b=0}$$)を入れた結果は…
$${a_1=c}$$
$${b_1=c^2}$$
これは$${a_n=b_n^2}$$の関係で、その後の反復計算の結果でも成立するようです。
つまり、両方の式の違いは「発散速度」だけ、ということになる。
マンデルブロ集合のあの形は「発散するかしないかの境界」が見えているのですよね? なので、両方の式で境界自体は変化しない、つまり「形は同じ」なのですね。
でも、発散速度が違うのなら、それを確認できるはず。
発散部の彩色アルゴリズムを変更して確認してみましょう。
UF では Standard.ucl の Basic というアルゴリズムで反復回数(Iteration)による彩色ができます。
以下はその結果。
二つの式での発散速度の違い左が$${z^4+c}$$、右が$${(z^2+c)^2+d}$$です。
一見わかりにくいですが違いますね。
うむ。満足満足。
え~っと、別にこういう事をしたかったわけでは無いのですが…
まいっか。気になったものはしかたない。
で、次は$${c=-0.7+0.6i、d=-0.4+0.8i}$$のジュリア集合。
mapping: center=-0.20561757129/0.244019989585 magn=4.9037489 formula: maxiter=2000 filename="SU-9.ufm" entry="JuliaMod_SU9_00" seed=-0.7/0.6 pd=-0.4/0.8 power1=2/0 power2=2/0 bailout=128 inside: density=8 transfer=linear entry="Decomposition" outside: density=0.05 transfer=linear entry="Smooth" power=2/0 bailout=128.0$${c=0.1+0.1i、d=-0.7+0.2i}$$のジュリア集合。
mapping: center=0.31697690235/0.3701662865 magn=2.9481239 formula: maxiter=80000 filename="SU-9.ufm" entry="JuliaMod_SU9_00" seed=0.1/0.1 pd=-0.7/-0.2 power1=2/0 power2=2/0 bailout=128 inside: density=4 transfer=linear offset=200 entry="Decomposition" outside: density=0.05 transfer=linear entry="Smooth" power=2/0 bailout=128.0$${c=-0.4+0.1i、d=0.5+0.6i}$$のジュリア集合。
mapping: center=0.356851480445/0.148228241505 magn=3.9399538 formula: maxiter=10000 filename="SU-9.ufm" entry="JuliaMod_SU9_00" seed=-0.4/0.1 pd=0.5/0.6 power1=2/0 power2=2/0 bailout=128 inside: density=32 transfer=linear entry="Decomposition" outside: density=0.1 transfer=linear entry="Smooth" power=2/0 bailout=128.0$${c=-0.7+0.2i、d=0.1-0.1i}$$のジュリア集合。
mapping: center=-0.5678588172/0.01888797135 magn=2.7731948 formula: maxiter=100316 adjust=yes filename="SU-9.ufm" entry="JuliaMod_SU9_00" seed=-0.7/0.2 pd=0.1/-0.1 power1=2/0 power2=2/0 bailout=4 inside: density=16 transfer=linear entry="Decomposition" outside: density=0.5 transfer=linear entry="Smooth" power=2/0 bailout=4$${c=-1.0+0.8i、d=-0.4+1.4i}$$のジュリア集合。
mapping: center=0.211575374357/-0.148894009915 magn=6.7609878 formula: maxiter=10000 filename="SU-9.ufm" entry="JuliaMod_SU9_00" seed=-1/0.8 pd=-0.4/1.4 power1=2/0 power2=2/0 bailout=256 inside: density=32 transfer=linear offset=200 entry="Decomposition" outside: density=0.1 transfer=linear entry="Smooth" power=2/0 bailout=256$${c=-1.1+1.2i、d=-0.4+2.5i}$$のジュリア集合。
mapping: center=0.1183470404295/-0.04034959692 magn=12.822084 formula: maxiter=10000 filename="SU-9.ufm" entry="JuliaMod_SU9_00" seed=-1.1/1.2 pd=0.4/2.5 power1=2/0 power2=2/0 bailout=256 inside: density=32 transfer=linear offset=200 entry="Decomposition" outside: density=0.05 transfer=linear entry="Smooth" power=2/0 bailout=256$${c=-1.2+0.6i、d=-1.2+1.4i}$$のジュリア集合。
mapping: center=-0.1068231212245/0.1163882558315 magn=11.486461 formula: maxiter=10000 filename="SU-9.ufm" entry="JuliaMod_SU9_00" seed=-1.2/0.6 pd=-1.2/1.4 power1=2/0 power2=2/0 bailout=256 inside: density=16 transfer=linear offset=200 entry="Decomposition" outside: density=0.05 transfer=linear entry="Smooth" power=2/0 bailout=256という感じで今回は終わりです。
そして、次回の投稿予定は「不明」です;