バーニングシップフラクタルと仲間たち5-1
どうも、108Hassiumです。
バーニングシップフラクタルと同じような「$${z^2+c}$$に絶対値関数を混ぜてできるフラクタル図形」をひたすら紹介する記事、第5弾(内容的には実質第4弾)です。
今回は、第2弾と第4弾で触れた$${f_1(f_2(x)+f_3(y))f_4(f_5(x)+f_6(y))+a,2f_7(x)f_8(y)+b)}$$という形の関数から生成されるマンデルブロ集合を取り上げます。
※☟第1~4弾と関連記事のリスト
なお生成されるマンデルブロ集合の数が膨大なので、複数本の記事に分けて紹介していきたいと思います。
生成規則
先述の通り、今回は$${f_1(f_2(x)+f_3(y))f_4(f_5(x)+f_6(y))+a,2f_7(x)f_8(y)+b)}$$という形の関数から生成されるマンデルブロ集合を扱います。
ただし、関数$${f_1(x),f_2(x)…f_8(x)}$$は以下の4種類の中から選びます。
$${x}$$
$${-x}$$
$${|x|}$$
$${-|x|}$$
4つの関数の中から8つ選ぶので$${4^8=65536}$$種類の関数ができそうに見えますが、実際は見た目が違うだけで同値な関数だったり、同値ではないけど生成されるマンデルブロ集合が合同だったりする関数の組み合わせが大量に混ざっています。
というわけで、式の形を制限して同値な式を潰し、同じマンデルブロ集合になるものは適当に1種類を選び、という感じで全パターンを調べ上げました。
00000000
前回・前々回と同様に、絶対値関数の使用位置によって関数をグループ分けし、各グループに対して2進数のコードを割り当てました。(1の位置が絶対値関数の位置を表しています)




絶対値の使用回数が0回のパターンです。
$${((x+y)(x+y)+a,2xy+b)}$$は展開すると$${(x^2+2xy+y^2+a,2xy+b)}$$になるので、以下の記事で取り上げたものと同じです。
00000001



$${((x+y)(x-y)+a,2x|y|+b)}$$は1本目の記事に出てくる「perpendicular burning ship」と同じです。
00000010




$${((x+y)(x-y)+a,2|x|y+b)}$$は「heart mandelbrot」、$${((x+y)(x-y)+a,-2|x|y+b)}$$は「perpendicular mandelbrot」と同じです。
00000100




各グループに属する関数の個数は、絶対値関数の位置が固定されているので符号の選び方に対応する$${2^8=256}$$個になりそうですが、同値な関数を潰していくと16個にまで減ります。(詳細は後述)
このグループのように生成されるマンデルブロ集合が全て非対称な場合は、合同な図形が4つ(上下左右反転の組み合わせ)生成され、最終的に16÷4=4種類の図形が得られます。
00001000




このグループからも非対称なマンデルブロ集合が4つ得られました。
実は00000000や00000001のような「対称性のあるやつとないやつが混在するグループ」は激レアで、今回紹介する範囲でしか登場しませんでした。
00010000




$${(-(x+y)|x-y|+a,2xy+b)}$$は、以下の記事で取り上げられています。
数え上げ
同値な式を潰していった場合、最終的に$${f_1(f_2(x)+f_3(y))f_4(f_5(x)+f_6(y))+a,2f_7(x)f_8(y)+b)}$$という形の関数は何種類になるのかを計算してみました。
まず、$${2f_7(x)f_8(y)}$$の部分に着目します。
この部分で両方ともマイナスがつく関数($${-x}$$か$${-|x|}$$)を選んだ場合、両方ともプラスを選んだ場合と被ってしまいます。
この被りは、「$${f_8(x)}$$は$${x}$$か$${|x|}$$しか選べない」というルールを追加することで解消できます。
$${f_1(x)}$$と$${f_4(x)}$$でも同じことがいえるので、$${f_4(x)}$$も符号がプラスのものに限定する必要があります。
次は、$${f_1(f_2(x)+f_3(y))}$$に着目します。
ここで例えば$${f_1(x)=-x}$$、$${f_2(x)=-|x|}$$、$${f_3(x)=-x}$$と選んだ場合、
$${f_1(f_2(x)+f_3(y))\\=-(-|x|-y)\\=-(-(|x|+y))\\=(|x|+y)}$$
・・・という式変形ができるので、$${(f_1(x),f_2(x),f_3(x))=(x,|x|,x)}$$と被ってしまいます。
また、$${f_1(x)}$$を$${-|x|}$$に変えた場合、$${|-\alpha|=|\alpha|}$$であることを使うと
$${f_1(f_2(x)+f_3(y))\\=-|-|x|-y|\\=-|-(|x|+y)|\\=||x|+y|}$$
・・・と変形でき、$${(f_1(x),f_2(x),f_3(x))=(|x|,|x|,x)}$$と被ります。
つまり、$${f_2(x)}$$と$${f_3(x)}$$を両方マイナスにすると($${f_1(x)}$$で絶対値を使っても使わなくても)被りが生じることになります。
この被りは$${f_2(x)}$$をプラスに限定することで防ぐことができ、さらに$${f_4(f_5(x)+f_6(y))}$$でも同じ現象が起きるので$${f_5(x)}$$に制限を掛けることで防げます。
以上により、$${f_2(x)}$$、$${f_4(x)}$$、$${f_5(x)}$$、$${f_8(x)}$$の選択肢を$${x}$$と$${|x|}$$の2択に絞らなければならないことがわかりました。
この時点でパターン数は4×2×4×2×2×4×4×2=4096通りにまで減りましたが、被りはまだまだあります。
なお、$${2f_7(x)f_8(y)+b}$$の部分についてはもう考えるべきことは無いので、ここからしばらくは$${f_1(f_2(x)+f_3(y))f_4(f_5(x)+f_6(y))+a}$$についてだけ考えます。
まず、$${||\alpha|+|\beta||=|\alpha|+|\beta|}$$が成り立ちます。
なのでこれを考慮した場合の$${f_4(f_5(x)+f_6(y))}$$の選び方は$${||x|+|y||}$$を除いた2×2×4-1=15通りになり、$${f_1(f_2(x)+f_3(y))}$$の方は$${-||x|+|y||}$$も除かなければならないので4×2×4-2=30通りになります。
次に、$${|x+y|(x-y)}$$と$${(x-y)|x+y|}$$のような「$${f_1(f_2(x)+f_3(y))}$$と$${f_4(f_5(x)+f_6(y))}$$の入れ替え」で同じになるパターンを考えます。
この入れ替えができないパターンは、$${f_1(f_2(x)+f_3(y))}$$のパターン数と同じだけ存在することがわかります。
よって、入れ替えを考慮した$${f_1(f_2(x)+f_3(y))f_4(f_5(x)+f_6(y))+a}$$のパターン数は、
「入れ替えを考慮しない$${f_1(f_2(x)+f_3(y))f_4(f_5(x)+f_6(y))+a}$$のパターン数」から「$${f_1(f_2(x)+f_3(y))}$$のパターン数」を引く
2で割る
「$${f_1(f_2(x)+f_3(y))}$$のパターン数」を足す
・・・という手順で求めることができます。
先程求めた$${f_1(f_2(x)+f_3(y))}$$と$${f_4(f_5(x)+f_6(y))}$$のパターン数(30と15)を使うと、入れ替えを考慮した(略)のパターン数は(30×15-30)÷2+30=240になります。
これに$${2f_7(x)f_8(y)+b}$$のパターン数を掛ければ総パターン数が求まりそうですが、残念ながらまだ細かい被りが潰せていません。
まず、
$${(x+|y|)(x-|y|)\\=x^2-|y|^2\\=x^2-y^2\\=(x+y)(x-y)}$$
・・・というようなケースを潰します。
$${|\alpha||\beta|=|\alpha\beta|}$$が成り立つので、このケースは$${f_1(x)}$$に何を選んでも発生します。
$${f_2(x)}$$と$${f_3(x)}$$の選び方については、先程の「入れ替え」を考慮して$${f_3(x)}$$の符号をプラスに固定し、さらに$${f_2(x)}$$と$${f_3(x)}$$のどちらも絶対値が付かない場合は(絶対値の使用回数が少ないパターンとの)被りが生じないので排除すると2×2-1=3通りになります。
そして$${||x|+|y||||x|-|y||}$$と$${-||x|+|y||||x|-|y||}$$は$${||x|+|y||}$$を禁止したことで既に排除済みなので、このケースに該当するパターンは4×3-2=10通りになります。
パターン数が少ないので実際に書き出してみると、
$${(x+|y|)(x-|y|)\}$$
$${(|x|+y)(|x|-y)\}$$
$${(|x|+|y|)(|x|-|y|)}$$
$${-(x+|y|)(x-|y|)}$$
$${-(|x|+y)(|x|-y)}$$
$${-(|x|+|y|)(|x|-|y|)}$$
$${|x+|y|||x-|y||}$$
$${||x|+y|||x|-y|}$$
$${-|x+|y|||x-|y||}$$
$${-||x|+y|||x|-y|}$$
・・・というようにちゃんと10種類あることがわかります。
次に、
$${|x+y||x+y|\\=|x+y|^2\\=(x+y)^2\\=(x+y)(x+y)}$$
・・・のようなケースを潰します。
このケースも考え方は先程のものと大体同じで、パターン数は2×2×4-2=14通りになります。
そして最後に、超特殊ケースとして
$${(|x|+|y|)||x|-|y||\\=||x|+|y||||x|-|y||\\=|(|x|+|y|)(|x|-|y|)|\\=||x|^2-|y|^2|\\=|x^2-y^2|\\=|(x+y)(x-y)|\\=|x+y||x-y|}$$
・・・というものがあって、これは$${(|x|+|y|)||x|-|y||}$$と$${-(|x|+|y|)||x|-|y||}$$の2種類だけです。
以上を全部踏まえると、$${f_1(f_2(x)+f_3(y))f_4(f_5(x)+f_6(y))+a,2f_7(x)f_8(y)+b)}$$という形の関数は同値なものを排除すると(240-10-14-2)×4×2=1712種類存在することがわかります。
なお、最後のやつのようなアクロバット式変形が要るようなケースを見落としている可能性はまだ否定しきれません。
そのようなケースの有無を検証するには生成されたマンデルブロ集合を全部見て被りが無いかチェックすればいいのですが、実際に生成されるマンデルブロ集合の数も膨大なので現実的ではないです。
ところで、この1712種類の関数から生成されるマンデルブロ集合の中には「向きが違うだけで形は同じ」という組み合わせが大量に含まれているのですが、それらも排除した「マンデルブロ集合のパターン数」の算出は私の計算力ではお手上げでした。
ただし、
対称性の無いものは向きが4通り
対称性があるものは向きが4通り未満
対称性があるものは無いものに比べてかなり少なくなりそう
・・・ということを考えると、実際のマンデルブロ集合のパターン数は関数のパターン数の1/3~1/4程度になると予想できます。
次回予告
今回はキリの良さを考慮して、画像の枚数は少なめになりました。
次回からは画像多め&テキスト少なめの実質「今週のフラクタル」みたいな内容になっていくと思います。
