どうも、108Hassiumです。
バーニングシップフラクタルと同じような「z2+cに絶対値関数を混ぜてできるフラクタル図形」をひたすら紹介する記事、第5弾(内容的には実質第4弾)です。
今回は、第2弾と第4弾で触れたf1(f2(x)+f3(y))f4(f5(x)+f6(y))+a,2f7(x)f8(y)+b)という形の関数から生成されるマンデルブロ集合を取り上げます。
※☟第1~4弾と関連記事のリスト
なお生成されるマンデルブロ集合の数が膨大なので、複数本の記事に分けて紹介していきたいと思います。
生成規則
先述の通り、今回はf1(f2(x)+f3(y))f4(f5(x)+f6(y))+a,2f7(x)f8(y)+b)という形の関数から生成されるマンデルブロ集合を扱います。
ただし、関数f1(x),f2(x)…f8(x)は以下の4種類の中から選びます。
x
−x
∣x∣
−∣x∣
4つの関数の中から8つ選ぶので48=65536種類の関数ができそうに見えますが、実際は見た目が違うだけで同値な関数だったり、同値ではないけど生成されるマンデルブロ集合が合同だったりする関数の組み合わせが大量に混ざっています。
というわけで、式の形を制限して同値な式を潰し、同じマンデルブロ集合になるものは適当に1種類を選び、という感じで全パターンを調べ上げました。
00000000
前回・前々回と同様に、絶対値関数の使用位置によって関数をグループ分けし、各グループに対して2進数のコードを割り当てました。(1の位置が絶対値関数の位置を表しています)
☝((x+y)(x+y)+a,2xy+b)のマンデルブロ集合
☝((x+y)(x+y)+a,-2xy+b)のマンデルブロ集合
☝((x+y)(x-y)+a,2xy+b)のマンデルブロ集合
☝((x+y)(x-y)+a,-2xy+b)のマンデルブロ集合絶対値の使用回数が0回のパターンです。
((x+y)(x+y)+a,2xy+b)は展開すると(x2+2xy+y2+a,2xy+b)になるので、以下の記事で取り上げたものと同じです。
00000001
☝((x+y)(x+y)+a,2x|y|+b)のマンデルブロ集合
☝((x+y)(x+y)+a,-2x|y|+b)のマンデルブロ集合
☝((x+y)(x-y)+a,2x|y|+b)のマンデルブロ集合((x+y)(x−y)+a,2x∣y∣+b)は1本目の記事に出てくる「perpendicular burning ship」と同じです。
00000010
☝((x+y)(x+y)+a,2|x|y+b)のマンデルブロ集合
☝((x+y)(x+y)+a,-2|x|y+b)のマンデルブロ集合
☝((x+y)(x-y)+a,2|x|y+b)のマンデルブロ集合
☝((x+y)(x-y)+a,-2|x|y+b)のマンデルブロ集合((x+y)(x−y)+a,2∣x∣y+b)は「heart mandelbrot」、((x+y)(x−y)+a,−2∣x∣y+b)は「perpendicular mandelbrot」と同じです。
00000100
☝((x+y)(x+|y|)+a,2xy+b)のマンデルブロ集合
☝((x+y)(x+|y|)+a,-2xy+b)のマンデルブロ集合
☝((x+y)(x-|y|)+a,2xy+b)のマンデルブロ集合
☝((x+y)(x-|y|)+a,-2xy+b)のマンデルブロ集合各グループに属する関数の個数は、絶対値関数の位置が固定されているので符号の選び方に対応する28=256個になりそうですが、同値な関数を潰していくと16個にまで減ります。(詳細は後述)
このグループのように生成されるマンデルブロ集合が全て非対称な場合は、合同な図形が4つ(上下左右反転の組み合わせ)生成され、最終的に16÷4=4種類の図形が得られます。
00001000
☝((x+y)(|x|+y)+a,2xy+b)のマンデルブロ集合
☝(-(x+y)(|x|+y)+a,2xy+b)のマンデルブロ集合
☝(-(x+y)(|x|+y)+a,-2xy+b)のマンデルブロ集合
☝((x+y)(|x|-y)+a,2xy+b)のマンデルブロ集合このグループからも非対称なマンデルブロ集合が4つ得られました。
実は00000000や00000001のような「対称性のあるやつとないやつが混在するグループ」は激レアで、今回紹介する範囲でしか登場しませんでした。
00010000
☝((x+y)|x+y|+a,2xy+b)のマンデルブロ集合
☝(-(x+y)|x+y|+a,2xy+b)のマンデルブロ集合
☝((x+y)|x-y|+a,2xy+b)のマンデルブロ集合
☝(-(x+y)|x-y|+a,2xy+b)のマンデルブロ集合(−(x+y)∣x−y∣+a,2xy+b)は、以下の記事で取り上げられています。
数え上げ
同値な式を潰していった場合、最終的にf1(f2(x)+f3(y))f4(f5(x)+f6(y))+a,2f7(x)f8(y)+b)という形の関数は何種類になるのかを計算してみました。
まず、2f7(x)f8(y)の部分に着目します。
この部分で両方ともマイナスがつく関数(−xか−∣x∣)を選んだ場合、両方ともプラスを選んだ場合と被ってしまいます。
この被りは、「f8(x)はxか∣x∣しか選べない」というルールを追加することで解消できます。
f1(x)とf4(x)でも同じことがいえるので、f4(x)も符号がプラスのものに限定する必要があります。
次は、f1(f2(x)+f3(y))に着目します。
ここで例えばf1(x)=−x、f2(x)=−∣x∣、f3(x)=−xと選んだ場合、
f1(f2(x)+f3(y))=−(−∣x∣−y)=−(−(∣x∣+y))=(∣x∣+y)
・・・という式変形ができるので、(f1(x),f2(x),f3(x))=(x,∣x∣,x)と被ってしまいます。
また、f1(x)を−∣x∣に変えた場合、∣−α∣=∣α∣であることを使うと
f1(f2(x)+f3(y))=−∣−∣x∣−y∣=−∣−(∣x∣+y)∣=∣∣x∣+y∣
・・・と変形でき、(f1(x),f2(x),f3(x))=(∣x∣,∣x∣,x)と被ります。
つまり、f2(x)とf3(x)を両方マイナスにすると(f1(x)で絶対値を使っても使わなくても)被りが生じることになります。
この被りはf2(x)をプラスに限定することで防ぐことができ、さらにf4(f5(x)+f6(y))でも同じ現象が起きるのでf5(x)に制限を掛けることで防げます。
以上により、f2(x)、f4(x)、f5(x)、f8(x)の選択肢をxと∣x∣の2択に絞らなければならないことがわかりました。
この時点でパターン数は4×2×4×2×2×4×4×2=4096通りにまで減りましたが、被りはまだまだあります。
なお、2f7(x)f8(y)+bの部分についてはもう考えるべきことは無いので、ここからしばらくはf1(f2(x)+f3(y))f4(f5(x)+f6(y))+aについてだけ考えます。
まず、∣∣α∣+∣β∣∣=∣α∣+∣β∣が成り立ちます。
なのでこれを考慮した場合のf4(f5(x)+f6(y))の選び方は∣∣x∣+∣y∣∣を除いた2×2×4-1=15通りになり、f1(f2(x)+f3(y))の方は−∣∣x∣+∣y∣∣も除かなければならないので4×2×4-2=30通りになります。
次に、∣x+y∣(x−y)と(x−y)∣x+y∣のような「f1(f2(x)+f3(y))とf4(f5(x)+f6(y))の入れ替え」で同じになるパターンを考えます。
この入れ替えができないパターンは、f1(f2(x)+f3(y))のパターン数と同じだけ存在することがわかります。
よって、入れ替えを考慮したf1(f2(x)+f3(y))f4(f5(x)+f6(y))+aのパターン数は、
「入れ替えを考慮しないf1(f2(x)+f3(y))f4(f5(x)+f6(y))+aのパターン数」から「f1(f2(x)+f3(y))のパターン数」を引く
2で割る
「f1(f2(x)+f3(y))のパターン数」を足す
・・・という手順で求めることができます。
先程求めたf1(f2(x)+f3(y))とf4(f5(x)+f6(y))のパターン数(30と15)を使うと、入れ替えを考慮した(略)のパターン数は(30×15-30)÷2+30=240になります。
これに2f7(x)f8(y)+bのパターン数を掛ければ総パターン数が求まりそうですが、残念ながらまだ細かい被りが潰せていません。
まず、
(x+∣y∣)(x−∣y∣)=x2−∣y∣2=x2−y2=(x+y)(x−y)
・・・というようなケースを潰します。
∣α∣∣β∣=∣αβ∣が成り立つので、このケースはf1(x)に何を選んでも発生します。
f2(x)とf3(x)の選び方については、先程の「入れ替え」を考慮してf3(x)の符号をプラスに固定し、さらにf2(x)とf3(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∣=∣x2−y2∣=∣(x+y)(x−y)∣=∣x+y∣∣x−y∣
・・・というものがあって、これは(∣x∣+∣y∣)∣∣x∣−∣y∣∣と−(∣x∣+∣y∣)∣∣x∣−∣y∣∣の2種類だけです。
以上を全部踏まえると、f1(f2(x)+f3(y))f4(f5(x)+f6(y))+a,2f7(x)f8(y)+b)という形の関数は同値なものを排除すると(240-10-14-2)×4×2=1712種類存在することがわかります。
なお、最後のやつのようなアクロバット式変形が要るようなケースを見落としている可能性はまだ否定しきれません。
そのようなケースの有無を検証するには生成されたマンデルブロ集合を全部見て被りが無いかチェックすればいいのですが、実際に生成されるマンデルブロ集合の数も膨大なので現実的ではないです。
ところで、この1712種類の関数から生成されるマンデルブロ集合の中には「向きが違うだけで形は同じ」という組み合わせが大量に含まれているのですが、それらも排除した「マンデルブロ集合のパターン数」の算出は私の計算力ではお手上げでした。
ただし、
・・・ということを考えると、実際のマンデルブロ集合のパターン数は関数のパターン数の1/3~1/4程度になると予想できます。
次回予告
今回はキリの良さを考慮して、画像の枚数は少なめになりました。
次回からは画像多め&テキスト少なめの実質「今週のフラクタル」みたいな内容になっていくと思います。