mk-mode BLOG

このブログは自作の自宅サーバに構築した Debian GNU/Linux で運用しています。
PC・サーバ構築等の話題を中心に公開しております。(クローンサイト: GitHub Pages

ブログ開設日2009-01-05
サーバ連続稼働時間
Reading...
Page View 合計
Reading...
今日
Reading...
昨日
Reading...

R 言語 - マンデルブロ集合!

[ プログラミング, 数学 ] [ R ]

こんばんは。

統計解析向けのプログラミング言語 R で「マンデルブロ集合」を図形化してみました。

詳しいことは述べません。「こんなこともできるんだ」程度にとどめています。

0. 前提条件

  • Linux Mint 14 での作業を想定。
  • 統計解析向けのプログラミング言語 R 導入済み。(Ver. 3.0.1 を想定)
  • 今回は、2次元グラフと3次元グラフを描画する。

1. マンデルブロ集合について

マンデルブロ集合とは、以下の条件を満たす複素数 全体が作る集合で表される複素平面上の点の集合のことである。

漸化式

で定義される複素数列{}が、 で無限大に発散しない。

また、 を点 に、 を点 にそれぞれ置き代えて、以下のように変形することもできる。

2. R ライブラリインストール

今回はグラフ描画に ggplot2(2次元)、lattice(3次元)ライブラリを使用するので、未インストールならインストールしておく。

1
> install.packages("ggplot2")

3. R ソース作成

以下のように R ソースを作成する。

【2次元】

mandelbrot_01.R
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
library(ggplot2)

g <- function(x0, y0) {
  x <- 0
  y <- 0
  for (i in 1:20) {
    xtemp <- x ^ 2 - y ^ 2 + x0
    y <- 2 * x * y + y0
    x <- xtemp
  }
  exp(-(x^2+y^2))
}
m <- 600
X <- seq(-1.8, 0.6, length.out=m)
Y <- seq(-1.2, 1.2, length.out=m)
grid   <- expand.grid(x=X, y=Y)
grid$z <- g(grid$x, grid$y)

ggplot(grid[grid$z != 0, ], aes(x=x, y=y, fill=z)) + geom_tile()

【3次元】

mandelbrot_02.R
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
library(lattice)

g <- function(x0, y0) {
  x <- 0
  y <- 0
  for (i in 1:20) {
    xtemp <- x ^ 2 - y ^ 2 + x0
    y <- 2 * x * y + y0
    x <- xtemp
  }
  exp(-(x^2+y^2))
}
m <- 600
X <- seq(-1.8, 0.6, length.out=m)
Y <- seq(-1.2, 1.2, length.out=m)
grid   <- expand.grid(x=X, y=Y)
grid$z <- g(grid$x, grid$y)

wireframe(z ~ x*y, grid, shade=TRUE)

4. R ソース実行

以下のようにして R ソースを実行してみる。

【2次元】
1
$ R --vanilla --slave < mandelbrot_01.R
【3次元】
1
$ R --vanilla --slave < mandelbrot_02.R

5. 確認

R ソースと同じディレクトリに PDF ファイルが作成されるので確認してみる。(ファイル名は2つとも同じなので上書き注意!)

R_MANDELBROT_01 R_MANDELBROT_02


以上。

Comments