マンデルブロ集合と複素力学系(フラクタル次元の数理)
単純な二次漸化式 から現れる、無限の自己相似とカオスの小宇宙
- 1
- 複素数 に対して初期値 から を繰り返し計算したとき、数列が無限大に発散しない点 の集合を「マンデルブロ集合」と呼ぶ
- 2
- 拡大しても拡大しても常に新たな自己相似の幾何学パターンが現れ、境界線のハウスドルフ次元は整数ではなくちょうど「2」であることが証明されている
- 3
- 映画の3DCG(山脈・雲・樹木・血管のプロシージャル生成)やデータ圧縮、アンテナの小型広帯域化など工学の最前線で応用されている
なぜこれを学ぶのか? — 現実社会とテクノロジーでの価値
なぜ生まれたのか?
複素数 $c$ に対して初期値 $z_0 = 0$ から $z_{n+1} = z_n^2 + c$ を繰り返し計算したとき、数列が無限大に発散しない点 $c$ の集合を「マンデルブロ集合」と呼ぶ
身につく武器・思考力
拡大しても拡大しても常に新たな自己相似の幾何学パターンが現れ、境界線のハウスドルフ次元は整数ではなくちょうど「2」であることが証明されている
実社会・ITでの活躍現場
- •プロシージャル地形生成、フラクタル画像圧縮、広帯域フラクタルアンテナ
- •ITシステム・アルゴリズム実装における論理設計
- •データ分析やシミュレーションにおける数理モデリング
Layer 1 — 直感・シミュレーター
キャンバスの好きな場所をクリックしてみよう。その地点を中心に2.2倍ずつズームインして、無限に複雑化する境界の小宇宙を探索できる。「シーホースの谷」などの名所プリセットボタンを押すと、タツノオトシゴのような螺旋構造やミニ・マンデルブロ集合が美しく現れる様子を確認できる。
黒い領域は反復しても発散しない複素数 $c$(マンデルブロ集合)。境界線はどこまで拡大しても無限に新しい自己相似の小宇宙が現れるフラクタル構造です。
マンデルブロ集合の漸化式 において、ある反復で となったとき、その後の数列の挙動はどうなるか?
Layer 2 — 定義・受験・証明
定義
複素数平面 上の点 に対し、初期値 から定まる力学系の複素二次多項式反復:
の軌道 が有界である()ような複素数 の全体をマンデルブロ集合 と定義する。
また、固定された に対して を動かしたときに軌道が有界な領域を「充填ジュリア集合 」と呼び、マンデルブロ集合は「ジュリア集合 が連結であるようなパラメータ の集合」という深い双対性を持つ。
公式・数理モデル
証明・導出
脱出半径 の証明と発散の保証:
かつ と仮定する。 複素数の絶対値の逆三角不等式 を用いると、
ここで より、()とおくことができる。
数学的帰納法により、任意の に対して、
であるから、公比が1より大きい等比数列の下限によって で となり、無限大へ発散することが厳密に示される。よって、反復計算中に一度でも となった点は決してマンデルブロ集合の元にはなれない。
宍倉光広氏(1998年)により、マンデルブロ集合の境界 のハウスドルフ次元はちょうど であることが証明されている。これは「1次元の滑らかな線」ではなく、平面全体を隙間なく埋め尽くすほどの無限の複雑さを持つことを意味している。
押さえておきたいポイント
- たった1行の単純な漸化式 から、無限の非反復的パターンが生み出される決定論的カオスの代表例である
- メインのカージオイド(心臓形)の境界からは周期倍分岐の円盤が無限に連なっており、ロジスティック写像のカオス分岐図と完全に対応している
- 境界上のあらゆる小領域の中に、全体とほぼ同じ形をした「ミニ・マンデルブロ集合」が無数に自己埋め込みされている
本トピックの内容・数理モデルは、文部科学省学習指導要領(算数・数学・情報)および国際標準カリキュラムに準拠し、エンジニアリング現場の実装事例と照らし合わせてMath World Lab編集部により検証・作成されています。
Layer 3 — 工学応用・現場実装
プロシージャル地形生成、フラクタル画像圧縮、広帯域フラクタルアンテナ
ゲーム開発(Unreal Engine / Unity)では、パーリンノイズとフラクタルブラウン運動(fBm)を重ね合わせて広大な山脈・雲・惑星の質感をリアルタイム生成する。また、フラクタル幾何学の自己相似性を利用した金属パターンのアンテナ(フラクタルアンテナ)は、複数の異なる波長で同時に共振できるため、スマートフォンの内蔵マルチバンドアンテナとして広く実用化されている。
1// マンデルブロ集合の発散ステップ計算(GPUシェーダー / Web Worker互換)2export function getMandelbrotIteration(3 c_re: number,4 c_im: number,5 maxIterations: number = 1006): number {7 let z_re = 0;8 let z_im = 0;9 let iter = 0;1011 // 脱出条件: |z|^2 = z_re^2 + z_im^2 > 4 (半径2)12 while (z_re * z_re + z_im * z_im <= 4.0 && iter < maxIterations) {13 const next_re = z_re * z_re - z_im * z_im + c_re;14 const next_im = 2 * z_re * z_im + c_im;15 z_re = next_re;16 z_im = next_im;17 iter++;18 }1920 // 発散しなかった場合は maxIterations を返す21 if (iter === maxIterations) return maxIterations;2223 // 滑らかな着色のための正規化イテレーション (Continuous Potential)24 const log_zn = Math.log(z_re * z_re + z_im * z_im) / 2;25 const nu = Math.log(log_zn / Math.log(2)) / Math.log(2);26 return iter + 1 - nu;27}
次に学ぶならコレ!おすすめトピック
この単元と深い繋がりを持つ、あわせて学ぶと理解が深まるおすすめ単元