今回は 108Hassium さんの以下の記事を元記事として Ultra Fractal(以下 UF)で遊んでみようと思っております。
コラッツフラクタル(Collatz fractal)というのは初めて知りました。
氏は冒頭で wiki の内容に対して「コラッツフラクタルと呼べる図形はもっと幅があるのではないか」と疑問を呈していますが、これはまぁ、いろいろと詳しい人の場合であってですね、私的には「はいそうですか」となるわけです。というかですね、wiki 見てもわからんので「そうですか」以前ですね。
でも、以下の図は綺麗。 フラクタルとは関係なさそうですが;
https://en.wikipedia.org/wiki/Collatz_conjecture 「100 万未満の 5000 個のランダムな開始点に対する Collatz 予想パス」だそうです。面白そうですがパスです。洒落じゃないです。
今回の主役は次の画像のようです。
https://en.wikipedia.org/wiki/Collatz_conjecture 原点を中心とし、実部が -5 から 5 までのコラッツ フラクタル https://en.wikipedia.org/wiki/Collatz_conjecture 指数補間のジュリア集合 英語版の wiki 見ても、まじで何もわからないです。 英語も数式もダメ。完璧に理解不能。すばらしい。 きっと氏が何か式を書いてくださっているでしょう。 (で、元記事を見る…)
まずは「$${\cos}$$系」ですね。 え~っと、最初の方を見た感じでは、ヒントは無いですw いや、いろいろなことが書かれてます。 私が理解できないだけです。だけ;
最初のオリジナルっぽい図のキャプションは「自作プログラム」なので、これは厳しい;
第一のヒントは、その次の図のキャプションに書かれている次の式。
$${ \Large f(z,c) = \frac{z*(1 - \cos(\pi z))}{4} + \frac{(3z + k)*(1 + \cos(\pi z))}{4} }$$
なんかそれっぽい。$${f(z,c)}$$は$${f(z,k)}$$なのかな? それは置いといて、ひとまずはこの式でスクリプトを書いてみます。 式はマンデルブロの図のキャプションに書かれていましたが、今はジュリア集合として描画するので、$${z_0=pixel}$$、$${k=1}$$とします。
mapping : center=0/0 magn=1 formula : maxiter=1000 adjust=yes filename="SU-10.ufm" entry="Collatz_cos_Julia_Self_00_00" pa=4 pb=4 pk=1/0 bailout=10000 inside : transfer=linear entry="Default" outside : transfer=linear offset=280 entry="Basic" type=Iterationう~ん、全然違いますね。何かスクリプトを間違えたかな… とりあえず、この状態でマンデルブロに変更してみます。 キャプションの情報によると$${z_0=1}$$、$${k=pixel}$$です。
mapping : center=0/0 magn=1 formula : maxiter=1000 adjust=yes filename="SU-10.ufm" entry="Collatz_cos_Mandelbrot_Self_00_00" start=1/0 pa=4 pb=4 bailout=10000 inside : transfer=linear entry="Default" outside : transfer=linear offset=280 entry="Basic" type=Iterationこれも全く違いますね…
次は「マンデルブロ集合で$${z_0=k}$$」なので、同じ式でパラメータ違い。 ん? どうなるんだ? $${z_0=k=1}$$では図が出てこないだろうから、$${z_0=k=pixel}$$? ってことはジュリア集合? まいいや。
mapping : center=0/0 magn=1 formula : maxiter=1000 adjust=yes filename="SU-10.ufm" entry="Collatz_cos_Julia_Self_01_00" pa=4 pb=4 bailout=10000 inside : transfer=linear entry="Default" outside : transfer=linear offset=280 entry="Basic" type=Iterationまぁ、違いますよね… 困った。 困ったときは AI ですよね! AI 教師陣に「コラッツフラクタルの漸化式を教えて」と聞いてみたら、次のような式を教えてくれました。
まずは Gemini の高速モード。 $${ z_{n+1} = \frac{1}{4} ( 1 + 4z_n - (1 + 2z_n) \cos(\pi z_n)) }$$
はい。こういう時は複数の AI に聞いてみた方が良いですよね。
次の式は Grok です。 $${ f(z) = \frac{1}{4} \Bigl( 7z + 2 - ( 5z + 2 ) \cos( \pi z ) \Bigr) }$$
次は Deepseek です。 $${ z_{n+1} = \frac{1}{4} \Bigl( 2 + 7z_n - ( 2 + 5z_n ) \cos( \pi z_n ) \Bigr) }$$
次は本命の Claude(sonnet 4.6)です。 $${ f(z) = \frac{1}{4} \Bigl( 2 + 7z - ( 2 + 5z ) \cos( \pi z) \Bigr) }$$
Gemini だけ違いますね… そこんとこを、あえて Claude に突っ込んでみました。すると… Gemini の式はショートカット版であって、間違いではない、と。 Gemini には私が UF を使っている事を記憶させているので、処理的に有利な式を提案してきたのかもしれないですね。でも Gemini には申し訳ないですが、今は一般的な式の方が私が混乱しないで済むので、Gemini 以外の式を採用します。
AI が提案してくれた式を使う場合、$${z}$$ がピクセル値になり、ジュリア集合? として描画する感じでしょうか。氏がやっているようにマンデルブロも描画してみたいので、少し式を変更したほうが良さそうに感じます。 つまり、$${c}$$みたいな値を使いたいじゃん、ってことです。
AI 提案の式のベースになっているのは次の基本の式のようなので… $${ f(n) = \begin{cases} n/2 & (n \text{ が偶数}) \\ 3n + 1 & (n \text{ が奇数}) \end{cases} }$$
氏と同じように$${k}$$を導入してみます。 $${ f(n) = \begin{cases} n/2 & (n \text{ が偶数}) \\ 3n + k & (n \text{ が奇数}) \end{cases} }$$
これを漸化式に変換してもらいます。 $${ f(z) = \frac {1}{4} \bigl(2k + 7z - (2k + 5z)\cos(\pi z) \bigr) }$$ キタコレ! ではこれでスクリプトを修正してみましょう!
まずはジュリア集合。 $${z_0=pixel}$$、$${k=1}$$。
mapping : center=0/0 magn=1 formula : maxiter=1000 adjust=yes filename="SU-10.ufm" entry="Collatz_cos_AI_Julia_Self_00_00" pk=1/0 bailout=10000 inside : transfer=linear entry="Default" outside : transfer=linear offset=280 entry="Basic" type=Iterationきてなぁ~い。 全然きてなぁ~~い。
でもこれ、間違いではないのかもしれない。 AI にコラッツフラクタルのことを聞いていた時に、次の動画を教えててもらったので、チラ見してみました。
すると、次のようなシーンがあって、これって UF で見たのと似てるなと思ったのです。
上の動画の 1 コマ まぁ、自分が完全にアホなことをしている、というわけでもなさそうで良かった;
次の式は動画で紹介されているものです。 $${ \Large f(n) = \frac{ (7*n + 2) - k*(5*n + 2)}{4}}$$ $${ k(n) = \begin{cases} 1 & (n \text{ が偶数}) \\ -1 & (n \text{ が奇数}) \end{cases} }$$
そして、偶数と奇数の判定部分$${k}$$を次のように変更できるということかな。 $${ k(n) = \cos(\pi * n) }$$
それを、元の式に組み込むと次のようになるということかな。 $${ \Large f(n) = \frac{ (7n + 2) - \cos(\pi * n)(5*n + 2)}{4} }$$
最後に次のような式が紹介されます。 $${\Large f(n) = \frac{ (7n + 2) - e^{j \pi z}(5*n + 2)}{4} }$$
$${ k(n) = \cos(\pi * n) }$$の部分が変化していますね。 なぜこうするのか? Gemini によると… $${ \cos(\pi * n) }$$では「実部の動きに偏り」がでるそうで、$${ e^{j \pi z} }$$の方が「実数も虚数も平等 に扱うため、より純粋で美しい構造が現れる」とのこと。 すごいですね。
ちなみに$${j}$$は虚数単位だそうで、$${i}$$と同じですね。wiki によると$${k}$$までは虚数単位で、3 つ以上の場合は$${i_1,i_2, …}$$となるそうです。
さて、ほんのちょっとでもプログラムを知ってる人なら「偶数と奇数を条件分岐にすれば?」と思うはずなので Gemini に聞いてみました。すると「単純な条件分岐では整数以外の判断が困る」そうで、結果的に滑らかな画像にならないらしい。なるほど。
えっと、間が空きましたが、ついでにマンデルブロも見てみます。 $${z_0=1}$$、$${k=pixel}$$。
mapping : center=0/0 magn=1.0 formula : maxiter=1000 adjust=yes filename="SU-10.ufm" entry="Collatz_cos_AI_Mandelbrot_Self_00_00" start=1/0 bailout=10000 inside : transfer=linear entry="Default" outside : transfer=linear offset=280 entry="Basic" type=Iterationこれは動画には無かったなぁ…
さてっと、どうしたものでしょうか…
AI にサイトの解説をしてもらったときに少し気になったのが、偶数と奇数の判定部分で符号を間違えやすい傾向があったことです。 もしかしたら? と思ったので、最初に使った次の式の偶数と奇数の判定部分? の符号を入れ替えてみます。 $${ \Large z = \frac{z*(1 - \cos(\pi z))}{4} + \frac{(3z + k)(1 + \cos(\pi z))}{4} }$$ 次のようになります。 $${ \Large z = \frac{z(1 + \cos(\pi z))}{4} + \frac{(3z + k)*(1 - \cos(\pi z))}{4} }$$ パラメータ等は最初と同じで、$${z_0=pixel}$$、$${k=1}$$です。 次の図がその結果です。
mapping : center=0/0 magn=1.0 formula : maxiter=1000 adjust=yes filename="SU-10.ufm" entry="Collatz_cos_Julia_Self_00_01" pk=1/0 pa=4 pb=4 bailout=10000 inside : transfer=linear entry="Default" outside : transfer=linear offset=280 entry="Basic" type=Iterationキタコレ!!!
では、これでマンデルブロにしてみます。 $${z_0=1}$$、$${k=pixel}$$ですね。
mapping : center=0/0 magn=1.0 formula : maxiter=1000 adjust=yes filename="SU-10.ufm" entry="Collatz_cos_Mandelbrot_Self_00_01" start=1/0 pa=4 pb=4 bailout=10000 inside : transfer=linear entry="Default" outside : transfer=linear offset=280 entry="Basic" type=Iterationいいですねぇ~
次は$${z_0=k=pixel}$$。
mapping : center=0/0 magn=1.0 formula : maxiter=1000 adjust=yes filename="SU-10.ufm" entry="Collatz_cos_Julia_Self_01_01" pa=4 pb=4 bailout=10000 inside : transfer=linear entry="Default" outside : transfer=linear offset=280 entry="Basic" type=Iterationうん。いい感じだと思います。 あぁ、これでやっと、先に進めそうな予感。
ちなみに、ここ重要なのですが、私は元記事の数学的な正しさは問題にしていません。あくまでも、面白そうな図を得るために元記事を参考にしているだけなので、あしからず。
さて、次は$${k=3}$$ですね。 ということは$${z}$$がピクセル値だからジュリア扱いですね。 たぶん、同じ結果になるはず…
mapping : center=0/0 magn=1.0 formula : maxiter=1000 adjust=yes filename="SU-10.ufm" entry="Collatz_cos_Julia_Self_00_01" pk=3/0 pa=4 pb=4 bailout=10000 inside : transfer=linear entry="Default" outside : transfer=linear offset=280 entry="Basic" type=Iteration問題無さそうなので、ここからはまとめてアップします。
$${k=5}$$
mapping : center=0/0 magn=1.0 formula : maxiter=1000 adjust=yes filename="SU-10.ufm" entry="Collatz_cos_Julia_Self_00_01" pk=5/0 pa=4 pb=4 bailout=10000 inside : transfer=linear entry="Default" outside : transfer=linear offset=280 entry="Basic" type=Iteration$${k=2}$$
mapping : center=0/0 magn=1.0 formula : maxiter=1000 adjust=yes filename="SU-10.ufm" entry="Collatz_cos_Julia_Self_00_01" pk=2/0 pa=4 pb=4 bailout=10000 inside : transfer=linear entry="Default" outside : transfer=linear offset=280 entry="Basic" type=Iteration$${k=-0.3+0.1i}$$ これは値が複素数ですが、私は最初から複素数前提でスクリプトを書いているので問題無く扱えます。
mapping : center=0/0 magn=1.0 formula : maxiter=1000 adjust=yes filename="SU-10.ufm" entry="Collatz_cos_Julia_Self_00_01" pk=-0.3/0.1 pa=4 pb=4 bailout=10000 inside : transfer=linear entry="Default" outside : transfer=linear offset=280 entry="Basic" type=Iteration次は式が変わります。 右辺の最初の$${z}$$が$${-z}$$になっただけ? $${ \Large z = \frac{-z(1 + \cos(\pi z))}{4} + \frac{(3z + k)*(1 - \cos(\pi z))}{4} }$$ 偶数と奇数判定部? の符号は入替えたバージョンです。
mapping : center=0/0 magn=1.0 formula : maxiter=1000 adjust=yes filename="SU-10.ufm" entry="Collatz_cos_Julia_Self_10_00" pk=1/0 pa=4 pb=4 bailout=10000 inside : transfer=linear entry="Default" outside : transfer=linear offset=280 entry="Basic" type=Iteration次はマンデルブロバージョン。
mapping : center=0/0 magn=1.0 formula : maxiter=1000 adjust=yes filename="SU-10.ufm" entry="Collatz_cos_Mandelbrot_Self_10_00" start=1/0 pa=4 pb=4 bailout=10000 inside : transfer=linear entry="Default" outside : transfer=linear offset=280 entry="Basic" type=Iteration次は$${z_0=k=pixel}$$。
mapping : center=0/0 magn=1.0 formula : maxiter=1000 adjust=yes filename="SU-10.ufm" entry="Collatz_cos_Julia_Self_10_01" pa=4 pb=4 bailout=10000 inside : transfer=linear entry="Default" outside : transfer=linear offset=280 entry="Basic" type=Iteration次はショートカット無しバージョンだそうです。 $${ \Large z = \frac{z(1 + \cos(\pi z))}{4} + \frac{(3z + k)*(1 - \cos(\pi z))}{2} }$$ $${z_0=pixel}$$、$${k=1}$$です。
mapping : center=0/0 magn=1.0 formula : maxiter=1000 adjust=yes filename="SU-10.ufm" entry="Collatz_cos_Julia_Self_00_01" pk=1/0 pa=4 pb=2 bailout=10000 inside : transfer=linear entry="Default" outside : transfer=linear offset=280 entry="Basic" type=Iteration式は違いますが、すでにやってしまった次の式と同じ結果に見えます。 $${ f(z) = \frac {1}{4} \bigl(2k + 7z - (2k + 5z)\cos(\pi z) \bigr) }$$
そして$${z_0=1}$$、$${k=pixel}$$。
mapping : center=0/0 magn=1.0 formula : maxiter=1000 adjust=yes filename="SU-10.ufm" entry="Collatz_cos_Mandelbrot_Self_00_01" start=1/0 pa=4 pb=2 bailout=10000 inside : transfer=linear entry="Default" outside : transfer=linear offset=280 entry="Basic" type=Iteration$${z_0=k=pixel}$$
mapping : center=0/0 magn=1.0 formula : maxiter=1000 adjust=yes filename="SU-10.ufm" entry="Collatz_cos_Julia_Self_01_01" pa=4 pb=2 bailout=10000 inside : transfer=linear entry="Default" outside : transfer=linear offset=280 entry="Basic" type=Iteration次は「コラッツ予想(mod 4版)」だそうです。 凄いですねぇ。式の長さも強烈です;
$${z = \frac{z(\cos(\pi z)+1)(\cos(\pi z/2)+1)}{16}+\frac{(3z+1)(\cos(\pi (z-1))+1)(\cos(\pi (z-1)/2)+1)}{16}+\frac{(3z+2)(\cos(\pi (z-2))+1)(\cos(\pi (z-2)/2)+1)}{16}+\frac{(9z+5)(\cos(\pi (z-3))+1)(\cos(\pi (z-3)/2)+1)}{16}}$$
ん~、やっぱり乗算記号は省略した方がいいな; 次の図は$${z_0=pixel}$$のジュリア集合の図。
mapping : center=0/0 magn=1.0 formula : maxiter=1000 adjust=yes filename="SU-10.ufm" entry="Collatz_cos_Julia_Self_20_00" bailout=10000 inside : transfer=linear entry="Default" outside : transfer=linear offset=280 entry="Basic" type=Iteration次はマンデルブロ集合。 あちこちに$${k}$$が仕込まれています。 $${z = \frac{z(\cos(\pi z)+1)(\cos(\pi z/2)+1)}{16}+\frac{(3z+k)(\cos(\pi (z-1))+1)(\cos(\pi (z-1)/2)+1)}{16}+\frac{(3z+2k)(\cos(\pi (z-2))+1)(\cos(\pi (z-2)/2)+1)}{16}+\frac{(9z+5k)(\cos(\pi (z-3))+1)(\cos(\pi (z-3)/2)+1)}{16}}$$ $${z_0=1}$$、$${k=pixel}$$。
mapping : center=0/0 magn=1.0 formula : maxiter=1000 adjust=yes filename="SU-10.ufm" entry="Collatz_cos_Mandelbrot_Self_20_00" start=1/0 bailout=10000 inside : transfer=linear entry="Default" outside : transfer=linear offset=280 entry="Basic" type=Iteration次の図は探索したもの。マンデルブロなので一応。トップに使おうかなみたいな。
mapping : center=0.313/0.88 magn=534 formula : maxiter=2326 adjust=yes filename="SU-10.ufm" entry="Collatz_cos_Mandelbrot_Self_20_00" start=1/0 bailout=10000 inside : transfer=linear entry="Default" outside : density=0.25 transfer=linear offset=280 entry="Basic" type=Iteration$${z_0=k=pixel}$$
mapping : center=0/0 magn=1.0 formula : maxiter=1000 adjust=yes filename="SU-10.ufm" entry="Collatz_cos_Julia_Self_20_01" bailout=10000 inside : transfer=linear entry="Default" outside : transfer=linear offset=280 entry="Basic" type=Iteration順調順調。 次は「$${\exp}$$系」です。
今度は偶数と奇数の判定を$${\exp}$$を使ってやってみようという事のようです。画像のキャプションに書かれている式は次の通り。 $${ \large z = \frac{z(1-\exp(i \pi z))}{4} + \frac{(3z+1)(1+\exp(i \pi z))}{4} }$$ 最初は$${k}$$が設定されていないので、ジュリア集合として$${z=pixel}$$になりるはずなのですが…、そのようにスクリプトを組んでも同じ結果にならない。
mapping : center=0/0 magn=1.0 formula : maxiter=1000 adjust=yes filename="SU-10.ufm" entry="Collatz_exp_Julia_Self_00_00" pk=1/0 pa=4 pb=4 bailout=10000 inside : transfer=linear entry="Default" outside : transfer=linear offset=280 entry="Basic" type=Iteration偶数と奇数の判定部分の符号を反転して試してみる。 $${ \large z = \frac{z(1+\exp(i \pi z))}{4} + \frac{(3z+1)(1-\exp(i \pi z))}{4} }$$
上下を元記事と合わせたほうが確認しやすいので、上下反転しています。
mapping : center=0/0 magn=1.0 formula : maxiter=1000 adjust=yes filename="SU-10.ufm" entry="Collatz_exp_Julia_Self_00_01" pk=1/0 pa=4 pb=4 bailout=10000 inside : transfer=linear entry="Default" outside : transfer=linear offset=280 entry="Basic" type=Iterationこちらの方が元記事に近いですね。 図形としての基本的な部分は間違えていない気がするので、おそらく彩色アルゴリズムによる違いだろうと思っています。
私は今回は Standard.ucl の「Basic」で、カラーリングタイプは反復回数(Iteration)に設定していまいますが、氏はどのような設定なのでしょうね。
ともかく、他の図も試しておきます。 $${z_0=1}$$、$${k=pixel}$$。
mapping : center=0/0 magn=1.0 formula : maxiter=1000 adjust=yes filename="SU-10.ufm" entry="Collatz_exp_Mandelbrot_Self_00_00" start=1/0 pa=4 pb=4 bailout=10000 inside : transfer=linear entry="Default" outside : transfer=linear offset=280 entry="Basic" type=Iteration$${z_0=k=pixel}$$
mapping : center=0/0 magn=1.0 formula : maxiter=1000 adjust=yes filename="SU-10.ufm" entry="Collatz_exp_Julia_Self_01_00" pa=4 pb=4 bailout=10000 inside : transfer=linear entry="Default" outside : transfer=linear offset=280 entry="Basic" type=Iteration次は少し式が変わりますね。右側の分母が 4 から 2 になっています。 $${ \large z = \frac{z(1+\exp(i \pi z))}{4} + \frac{(3z+1)(1-\exp(i \pi z))}{2} }$$ 私の使った式では、偶数と奇数の判定部分の符号も変更しています。
$${z_0=pixel}$$
mapping : center=0/0 magn=1.0 formula : maxiter=1000 adjust=yes filename="SU-10.ufm" entry="Collatz_exp_Julia_Self_00_01" pk=1/0 pa=4 pb=2 bailout=10000 inside : transfer=linear entry="Default" outside : transfer=linear offset=280 entry="Basic" type=Iteration$${z_0=1}$$、$${k=pixel}$$。
mapping : center=0/0 magn=1.0 formula : maxiter=1000 adjust=yes filename="SU-10.ufm" entry="Collatz_exp_Mandelbrot_Self_00_00" start=1/0 pa=4 pb=2 bailout=10000 inside : transfer=linear entry="Default" outside : transfer=linear offset=280 entry="Basic" type=Iteration$${z_0=k=pixel}$$
mapping : center=0/0 magn=1.0 formula : maxiter=1000 adjust=yes filename="SU-10.ufm" entry="Collatz_exp_Julia_Self_01_00" pa=4 pb=2 bailout=10000 inside : transfer=linear entry="Default" outside : transfer=linear offset=280 entry="Basic" type=Iteration次は「$${mod}$$系」です。
元記事のキャプションに書かれている式は次の通り。 $${ \large z = \frac{z(mod(x,2)+iy)}{2} + \frac{(3z+1)(1-mod(x,2)-iy)}{2} }$$ これが上手く描画されない。
そもそも UF には$${mod}$$の組込関数は無さそうなので、私は「%」を使ってスクリプトを書いています。「%」というのは剰余演算子(Modulus Operator)といわれるもので、割り算の余りを答えてくれます。しかし、この演算子では「負の値」の場合に困るようなので、そうならないような工夫をしています(AI がね)。 具体的には次の通り。
float x = real(z)
float mod_x2 = ((x % 2.0) + 2.0) % 2.0 ; mod(x, 2) の非負版まぁこの処理が問題なのかはわかりませんが、元記事の図と違うのは変わりありません。
次の図は$${z_0=pixel}$$のジュリア集合です。
mapping : center=0/0 magn=0.7 formula : maxiter=1000 adjust=yes filename="SU-10.ufm" entry="Collatz_mod_Julia_Self_00_00" pa=2 pb=2 pk=1/0 bailout=10000 inside : transfer=linear entry="Default" outside : transfer=linear offset=260 entry="Basic" type=Iteration今までであれば符号の変更で目的の図が出てきたりしましたが、今回はダメ。できそうな部分はすべて変更してみましたが、目的の図は拝めませんでした。残念。
とりあえず、今回恒例になっているパターンで画像をアップします。 $${z_0=1}$$、$${k=pixel}$$。
mapping : center=-0.7/0 magn=0.7 formula : maxiter=1000 adjust=yes filename="SU-10.ufm" entry="Collatz_mod_Mandelbrot_Self_00_00" pa=2 pb=2 start=1/0 bailout=10000 inside : transfer=linear entry="Default" outside : transfer=linear offset=260 entry="Basic" type=Iteration$${z_0=k=pixel}$$
mapping : center=-0.7/0 magn=0.7 formula : maxiter=1000 adjust=yes filename="SU-10.ufm" entry="Collatz_mod_Julia_Self_01_00" pa=2 pb=2 bailout=10000 inside : transfer=linear entry="Default" outside : transfer=linear offset=260 entry="Basic" type=Iteration次は式の変更です。 $${ \large z = \frac{z(mod(x,2)+imod(y,2))}{2} + \frac{(3z+1)(1-mod(x,2)-imod(y,2))}{2} }$$ $${z_0=pixel}$$のジュリア集合から。
mapping : center=0/0 magn=0.4 formula : maxiter=1000 adjust=yes filename="SU-10.ufm" entry="Collatz_mod_Julia_Self_10_00" pa=2 pb=2 pk=1/0 bailout=10000 inside : transfer=linear entry="Default" outside : transfer=linear offset=10 entry="Basic" type=Iteration$${z_0=1}$$、$${k=pixel}$$。
mapping : center=0/0 magn=0.4 formula : maxiter=1000 adjust=yes filename="SU-10.ufm" entry="Collatz_mod_Mandelbrot_Self_10_00" pa=2 pb=2 start=1/0 bailout=10000 inside : transfer=linear entry="Default" outside : transfer=linear entry="Basic" type=Iteration$${z_0=k=pixel}$$
mapping : center=0/0 magn=0.4 formula : maxiter=1000 adjust=yes filename="SU-10.ufm" entry="Collatz_mod_Julia_Self_11_00" pa=2 pb=2 bailout=10000 inside : transfer=linear entry="Default" outside : transfer=linear entry="Basic" type=Iteration次は元記事でも「%」を使っていますね。 $${ \large z = \frac{z(x\%2+iy)}{2} + \frac{(3z+1)(1-x\%2-iy)}{2} }$$
やはり、この場合は「負の値」について書かれていますが、問題視はしていないようで「ならそれでやってみよう」な感じに受け取れます。
まずは$${z_0=pixel}$$のジュリア集合から。
mapping : center=0/0 magn=1 formula : maxiter=1000 adjust=yes filename="SU-10.ufm" entry="Collatz_mod_Julia_Self_20_00" pa=2 pb=2 pk=1/0 bailout=10000 inside : transfer=linear entry="Default" outside : density=4 transfer=linear entry="Basic" type=Iterationえ~っと、$${mod}$$系になってから元記事と同じ結果を得られておりません。
ここで気が付いてしまったのですが、$${\cos}$$系、$${\exp}$$系の部分では符号を逆にすることで元記事と同じ結果を得られました。なのでずっと符号を調整することばかり気にしていたのですが、符号を調整するって、式を入れ替えていることだよねと、今更ながら気付いてしまったわけです;
今さっきやった式の判定部分を変更してみます。 $${ \large z = \frac{z(1-x\%2-iy)}{2} + \frac{(3z+1)(x\%2+iy)}{2} }$$ これで$${z_0=pixel}$$のジュリア集合を描画するとどうなるのかな。
mapping : center=0/0 magn=1 formula : maxiter=1000 adjust=yes filename="SU-10.ufm" entry="Collatz_mod_Julia_Self_20_01" pa=2 pb=2 pk=1/0 bailout=10000 inside : transfer=linear entry="Default" outside : density=4 transfer=linear entry="Basic" type=Iteration!!
$${z_0=1}$$、$${k=pixel}$$。
mapping : center=0/0 magn=1 formula : maxiter=1000 adjust=yes filename="SU-10.ufm" entry="Collatz_mod_Mandelbrot_Self_20_01" pa=2 pb=2 start=1/0 bailout=10000 inside : transfer=linear entry="Default" outside : density=4 transfer=linear entry="Basic" type=Iteration$${z_0=k=pixel}$$
mapping : center=-1/0 magn=1 formula : maxiter=1000 adjust=yes filename="SU-10.ufm" entry="Collatz_mod_Julia_Self_21_01" pa=2 pb=2 bailout=10000 inside : transfer=linear entry="Default" outside : density=4 transfer=linear entry="Basic" type=Iterationえ、こうなると反転する前の式で描画するとどうなるのか気になりますね。 次は判定式を入れ替える前のマンデルブロです。 $${z_0=1}$$、$${k=pixel}$$。
mapping : center=1.5/0 magn=0.8 formula : maxiter=1000 adjust=yes filename="SU-10.ufm" entry="Collatz_mod_Mandelbrot_Self_20_00" pa=2 pb=2 start=1/0 bailout=10000 inside : transfer=linear entry="Default" outside : density=2 transfer=linear entry="Basic" type=Iteration$${z_0=k=pixel}$$
mapping : center=1.5/0 magn=1.0 formula : maxiter=1000 adjust=yes filename="SU-10.ufm" entry="Collatz_mod_Julia_Self_21_00" pa=2 pb=2 bailout=10000 inside : transfer=linear entry="Default" outside : density=4 transfer=linear entry="Basic" type=Iteration「%」を使う式については元記事と同じ結果を得られましたが、他の式についてはどうなのか…
$${mod}$$系の最初の式の判定部分を入れ替えると次のようになるので、 これで描画してみたいと思います。 $${ \large z = \frac{z(1-mod(x,2)-iy)}{2} + \frac{(3z+1)(mod(x,2)+iy)}{2} }$$
$${z_0=pixel}$$
mapping : center=-1/0 magn=1.0 formula : maxiter=1000 adjust=yes filename="SU-10.ufm" entry="Collatz_mod_Julia_Self_00_01" pa=2 pb=2 pk=1/0 bailout=10000 inside : transfer=linear entry="Default" outside : density=4 transfer=linear entry="Basic" type=Iteration残念ながらダメですね。せっかくなので、ダメでもこのまま進めてみます。 $${z_0=1}$$、$${k=pixel}$$。
mapping : center=-1.3/0 magn=1.0 formula : maxiter=1000 adjust=yes filename="SU-10.ufm" entry="Collatz_mod_Mandelbrot_Self_00_01" pa=2 pb=2 start=1/0 bailout=10000 inside : transfer=linear entry="Default" outside : density=3 transfer=linear entry="Basic" type=Iteration$${z_0=k=pixel}$$
mapping : center=-0.32/0 magn=2.9 formula : maxiter=1154 adjust=yes filename="SU-10.ufm" entry="Collatz_mod_Julia_Self_01_01" pa=2 pb=2 bailout=10000 inside : transfer=linear offset=200 entry="Default" outside : density=4 transfer=linear entry="Basic" type=Iteration次の式です。判定部分を入れ替え済みです。 $${ \large z = \frac{z(1-mod(x,2)-imod(y,2))}{2} + \frac{(3z+1)(mod(x,2)+imod(y,2))}{2} }$$
$${z_0=pixel}$$
mapping : center=0/0 magn=1.0 formula : maxiter=1000 adjust=yes filename="SU-10.ufm" entry="Collatz_mod_Julia_Self_10_01" pa=2 pb=2 pk=1/0 bailout=10000 inside : transfer=linear entry="Default" outside : density=4 transfer=linear entry="Basic" type=Iteration$${z_0=1}$$、$${k=pixel}$$。
mapping : center=-1.5/0 magn=1.0 formula : maxiter=1000 adjust=yes filename="SU-10.ufm" entry="Collatz_mod_Mandelbrot_Self_10_01" pa=2 pb=2 start=1/0 bailout=10000 inside : transfer=linear entry="Default" outside : density=4 transfer=linear entry="Basic" type=Iteration$${z_0=k=pixel}$$
mapping : center=0/0 magn=1.0 formula : maxiter=1000 adjust=yes filename="SU-10.ufm" entry="Collatz_mod_Julia_Self_11_01" pa=2 pb=2 bailout=10000 inside : transfer=linear entry="Default" outside : density=4 transfer=linear entry="Basic" type=Iteration「%」以外、全滅ですね。ちょっと、自分が何をしているのかもよくわからなくなってきました;
次は「その他」ですが「気合で解読」が必要そうですので省略します。 「没」についても省略するので、今回はここで終わりですね。
あぁ、そういえば冒頭の wiki の図って、まだ拝めていませんよね。 wiki の図の近くに次の式があるので、おそらくこれでしょう。 $${z=\frac{z}{2}\cos^2(\frac{\pi}{2}z)+\frac{3z+1}{2}\sin^2(\frac{\pi}{2}z)+\frac{1}{\pi}(\frac{1}{2}-\cos(\pi z))\sin(\pi z)+h(z)\sin^2(\pi z)}$$
$${h(z)}$$をどうすればよいのか不明だったので Claude に聞いたら「0 でも良い」とのことだったので、それで描画した結果が次の図です。
$${z_0=pixel}$$
mapping : center=0/0 magn=0.8 formula : maxiter=1000 adjust=yes filename="SU-10.ufm" entry="Collatz_wiki_Julia_Self_00_00" bailout=10000 inside : transfer=linear entry="Default" outside : density=8 transfer=linear entry="Basic" type=Iteration冒頭の図と同じですね。今回のパターンでほかの図も描画してみようと思います。
一か所だけ$${k}$$に変更しています。 $${z=\frac{z}{2}\cos^2(\frac{\pi}{2}z)+\frac{3z+k}{2}\sin^2(\frac{\pi}{2}z)+\frac{1}{\pi}(\frac{1}{2}-\cos(\pi z))\sin(\pi z)+h(z)\sin^2(\pi z)}$$
$${z_0=1}$$、$${k=pixel}$$。
mapping : center=0/0 magn=0.8 formula : maxiter=1000 adjust=yes filename="SU-10.ufm" entry="Collatz_wiki_Mandelbrot_Self_00_00" start=1/0 bailout=10000 inside : transfer=linear entry="Default" outside : density=8 transfer=linear entry="Basic" type=Iteration$${z_0=k=pixel}$$
mapping : center=1.4/0 magn=1.6 formula : maxiter=1000 adjust=yes filename="SU-10.ufm" entry="Collatz_wiki_Julia_Self_01_00" bailout=10000 inside : transfer=linear entry="Default" outside : density=4 transfer=linear offset=200 entry="Basic" type=Iteration次はもう一つの図の方です。 $${z = \frac{z}{2}+\frac{1}{4}(2z+1)(1-e^{i \pi z})}$$
$${z_0=pixel}$$
mapping : center=0/0 magn=1.0 formula : maxiter=1000 adjust=yes filename="SU-10.ufm" entry="Collatz_wiki_exp_Julia_Self_00_00" pk=1/0 pa=2 pb=4 bailout=10000 inside : transfer=linear entry="Default" outside : transfer=linear entry="Basic" type=Iteration$${\exp}$$系でやった結果とあまり変わりませんね。問題なく描画はされているようですが、やっぱり、少し変な部分は彩色方法なのかなぁ…
一か所だけ$${k}$$に変更します。 $${z = \frac{z}{2}+\frac{1}{4}(2z+k)(1-e^{i \pi z})}$$
$${z_0=1}$$、$${k=pixel}$$。
mapping : center=0/0 magn=1.0 formula : maxiter=1000 adjust=yes filename="SU-10.ufm" entry="Collatz_wiki_exp_Mandelbrot_Self_00_00" start=1/0 pa=2 pb=4 bailout=10000 inside : transfer=linear entry="Default" outside : transfer=linear entry="Basic" type=Iteration$${z_0=k=pixel}$$
mapping : center=0/-0.2 magn=1.2 formula : maxiter=1000 adjust=yes filename="SU-10.ufm" entry="Collatz_wiki_exp_Julia_Self_01_00" pa=2 pb=4 bailout=10000 inside : transfer=linear entry="Default" outside : transfer=linear entry="Basic" type=Iteration途中に再現できなかった図はありますが、おおむねは結果を得られたのではないかと思います。なので、今回はこれで終わりですね。 恒例ですが、次回の投稿予定は「不明」です;