マンデルブロ集合 x:{-0.9232,-0.9212}, y:{0.309,0.311}先週、いやもう先々週か。フラクタルの父、マンデルブロが亡くなったそうだ。 DNA 二重らせんで有名なクリックが亡くなったというニュースに触れたとき同様、(自分が学生時代に使った教科書に載っているような人が)まだ生きてたんだねぇ、という正直な感想はさておき、個人的にはひどく感慨深い。

彼の名を冠した図形「マンデルブロ集合」は、僕が、ヒューリンクスの製品紹介デモをするときにも使ったことがある。描かれる図形のそのあまりに印象的な外観と、それを描画するために必要な予備知識のひどく少ないことが、非常にデモ向きなのだ。

ヒューリンクスに入社する以前も、僕はマンデルブロ集合を何度も描いてきた。マンデルブロ集合が僕に与えてくれた幸せな時間は、かなり長いのではないかと思う。
僕に限らず、Mathematica ユーザーで、マンデルブロ集合を描いたことがない人は、むしろ少数派なのではないかと言ったら言い過ぎだろうか。それくらい、Mathematica 紹介ネタでマンデルブロ集合は頻出するし、「Mathematica マンデルブロ」で検索すると、たくさんのページがヒットする。

僕が今まで見てきた、マンデルブロ集合を描画する Mathematica スクリプトは、つぎの3種類に大別できる。

  1. While を使うもの
  2. FixedPointList を使うもの
  3. 再帰呼び出しを使うもの

あとはこれらのそれぞれで、 関数の定義を Compile 関数を使ってコンパイルするかどうかや、 発散判定式をどう定義するかなどのバリエーションがある。もちろん、For 関数を使って書くこともできるし、その他の書き方だってできる。どの書き方が優れているというわけではない。

今日は、マンデルブロ追悼の意味をこめて、ここで挙げた3つそれぞれの1例をここで紹介したい。(使用したのは Mathematica 7)

1.While を使うもの

いわゆる普通のスクリプトで、他の多くのスクリプト言語とも、見た目の互換性がある。

mandelbrot1[c_] := Module[{z = 0. + 0. I, n = 0},
  While[n < 50 && Abs[z] < 2.,
    z = z^2 + c; n++];
  n]

2.FixedPointList を使うもの

関数ベースのプログラミングと呼ばれているもので、Mathematica の内蔵関数を積極的に活用している。

mandelbrot2[c_] :=
  Length[FixedPointList[#^2 + c &, 0. + 0. I, 50,
    SameTest -> (Abs[#2] >= 2. &)]] - 1

3.再帰呼び出しを使うもの

繰り返し限界判定や発散判定は、引数の定義に含まれている。

mandelbrot3[c_] := mandelbrot3[c, 0. + 0. I, 0]
mandelbrot3[c_, z_, 50 + 1] = 50;
mandelbrot3[c_, z_ /; Abs[z] >= 2., n_] := n
mandelbrot3[c_, z_, n_] := mandelbrot3[c, z^2 + c, n + 1]

これらの関数定義を使ってマンデルブロ集合を描画するときは、DensityPlot を使って、

DensityPlot[mandelbrot1[x + y I], {x, -2, 0.5}, {y, -1, 1},
  PlotPoints -> 80, ColorFunction -> Hue, AspectRatio -> Automatic]

Mathematica でマンデルブロ集合1

のようにするか、Table 関数で数値のリストを生成してから ArrayPlot を使って次のようにする。

ArrayPlot[
  Table[mandelbrot3[x + y I], {y, -1, 1, 0.01}, {x, -2, 0.5, 0.01}],
    ColorFunction -> Hue]

Mathematica でマンデルブロ集合2

僕はもちろん、マンデルブロその人と会ったことなんてないのだが、これまで与えてもらった幸せな時間に、心から感謝したい。ありがとうございました、マンデルブロ博士。そしてまた、僕はきっとこれからも、ことあるごとにマンデルブロ集合にお世話になると思うので、これからもよろしくお願いします。

※この記事の内容は執筆者の個人的見解で、ヒューリンクスによる公式情報ではありません。[免責事項]

トラックバック

この記事へのトラックバックURL
http://blog.hulinks.co.jp/cgi/mt/mt-tb.cgi/443
内容に対しての関連性がみられないものは削除する場合があります

以前にフラクタルの父マンデルブロのマンデルブロ集合のことを書いたが、それとは別の... 続きを読む

コメント一覧

寡黙にしてマンデルブロさん亡くなられたこと知りませんでした。私は彼のアイデアで作られた雲のCGの印象が強烈でした。

Mathematicaって、こういうことを簡単にやってのけられるところがいいですよね。もちろん、それだけに終わってしまうと勿体無いのですが。

skybird さん、いつもコメントありがとうございます。

確かに、他の処理系で書くと何十行かになる処理が、Mathematica だと数行になることが多い(もちろんその逆もあり得ますが)のは、Mathematica の楽しみ(?)のひとつですね。

コメントの投稿

Emailアドレスは表示されません。は必須項目です。
ヒューリンクス取り扱い製品の内容や購入に関するお問い合わせはヒューリンクスサイト連絡先へお願いいたします。投稿前にその他の注意事項もご覧ください。

HULINKS サイトの新着情報