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