R 言語 - マンデルブロ集合!
Updated:
統計解析向けのプログラミング言語 R で「マンデルブロ集合」を図形化してみました。
詳しいことは述べません。「こんなこともできるんだ」程度にとどめています。
0. 前提条件
- Linux Mint 14 での作業を想定。
- 統計解析向けのプログラミング言語 R 導入済み。(Ver. 3.0.1 を想定)
- 今回は、2次元グラフと3次元グラフを描画する。
1. マンデルブロ集合について
マンデルブロ集合とは、以下の条件を満たす複素数 \(c\) 全体が作る集合で表される複素平面上の点の集合のことである。
漸化式 \(\begin{eqnarray*} \left\{ \begin{array}{l} z_{n+1}=z_{n}^{2} + c \ (n \in \mathbb{N}) \\ z_{0}=0 \\ \end{array} \right. \end{eqnarray*}\)
で定義される複素数列{\(z_{n}|n \in \mathbb{N}\)}が、 \(n \rightarrow \infty\) で無限大に発散しない。
また、\(z _ {n}\) を点 \((x _ {n}, y _ {n})\) に、\(c\) を点 \((a, b)\) にそれぞれ置き代えて、以下のように変形することもできる。
\[\begin{eqnarray*} \left\{ \begin{array}{l} x_{n+1} = x_{n}^{2} - y_{n}^{2} + a \ (n \in \mathbb{N}) \\ y_{n+1} = 2x_{n}y_{n} + b \ (n \in \mathbb{N}) \end{array} \right. \end{eqnarray*}\]2. R ライブラリインストール
今回はグラフ描画に ggplot2(2次元)、lattice(3次元)ライブラリを使用するので、未インストールならインストールしておく。
> install.packages("ggplot2")
3. R ソース作成
以下のように R ソースを作成する。
【2次元】
File: 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次元】
File: 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 ソースを実行してみる。
File: 【2次元】
1
$ R --vanilla --slave < mandelbrot_01.R
File: 【3次元】
1
$ R --vanilla --slave < mandelbrot_02.R
5. 確認
R ソースと同じディレクトリに PDF ファイルが作成されるので確認してみる。(ファイル名は2つとも同じなので上書き注意!)
以上。
Comments