Home
Explore
Submit Search
Upload
Login
Signup
Advertisement
Check these out next
2値分類・多クラス分類
t dev
アルゴリズムイントロダクション15章 動的計画法
nitoyon
Python opt
Mikio Kubo
パターン認識と機械学習6章(カーネル法)
Yukara Ikemiya
プログラミングコンテストでの乱択アルゴリズム
Takuya Akiba
東京都市大学 データ解析入門 4 スパース性と圧縮センシング1
hirokazutanaka
色々なダイクストラ高速化
yosupo
クラシックな機械学習の入門 5. サポートベクターマシン
Hiroshi Nakagawa
1
of
30
Top clipped slide
Rでマンデルブロ集合
Jan. 27, 2012
•
0 likes
5 likes
×
Be the first to like this
Show More
•
1,726 views
views
×
Total views
0
On Slideshare
0
From embeds
0
Number of embeds
0
Download Now
Download to read offline
Report
Yoshiteru Kamiyama
Follow
Advertisement
Advertisement
Advertisement
Recommended
TokyoNLP#7 きれいなジャイアンのカカカカ☆カーネル法入門-C++
sleepy_yoshi
12.2K views
•
87 slides
【Unity道場】ゲーム制作に使う数学を学習しよう
Unity Technologies Japan K.K.
29K views
•
186 slides
TokyoNLP#5 パーセプトロンで楽しい仲間がぽぽぽぽ~ん
sleepy_yoshi
6.4K views
•
92 slides
Zetavalue
guest1637f9
505 views
•
11 slides
【Unity道場スペシャル 2017博多】クォータニオン完全マスター
Unity Technologies Japan K.K.
25.3K views
•
121 slides
CVIM#11 3. 最小化のための数値計算
sleepy_yoshi
56.3K views
•
50 slides
More Related Content
Slideshows for you
(20)
2値分類・多クラス分類
t dev
•
15.7K views
アルゴリズムイントロダクション15章 動的計画法
nitoyon
•
24K views
Python opt
Mikio Kubo
•
1.1K views
パターン認識と機械学習6章(カーネル法)
Yukara Ikemiya
•
29.3K views
プログラミングコンテストでの乱択アルゴリズム
Takuya Akiba
•
26.2K views
東京都市大学 データ解析入門 4 スパース性と圧縮センシング1
hirokazutanaka
•
534 views
色々なダイクストラ高速化
yosupo
•
24.5K views
クラシックな機械学習の入門 5. サポートベクターマシン
Hiroshi Nakagawa
•
16.4K views
Or seminar2011final
Mikio Kubo
•
2.2K views
Cv 14th
Junichi Ido
•
1.7K views
Gurobi python
Mikio Kubo
•
13.7K views
動的計画法を極める!
HCPC: 北海道大学競技プログラミングサークル
•
12.3K views
線形計画法入門
Shunji Umetani
•
57.4K views
正則化つき線形モデル(「入門機械学習第6章」より)
Eric Sartre
•
47.2K views
20111107 cvim(shirasy)
Yoichi Shirasawa
•
646 views
パターン認識 05 ロジスティック回帰
sleipnir002
•
15.8K views
文字列カーネルによる辞書なしツイート分類 〜文字列カーネル入門〜
Takeshi Arabiki
•
9.4K views
プログラミングコンテストでの動的計画法
Takuya Akiba
•
88.9K views
第17回コンピュータビジョン勉強会@関東
ukyoda
•
1.2K views
【Unite Tokyo 2018】誘導ミサイル完全マスター
Unity Technologies Japan K.K.
•
16.9K views
Similar to Rでマンデルブロ集合
(15)
Infinite SVM - ICML 2011 読み会
Shuyo Nakatani
•
1.5K views
Java数値(浮動小数点)課題勉強会
Tetsuya Yoshida
•
2.3K views
Infinite SVM [改] - ICML 2011 読み会
Shuyo Nakatani
•
2K views
数列で学ぶ初めての CommonLisp #fibonacci
pgf2alpha
•
518 views
Sec15 dynamic programming
Keisuke OTAKI
•
1.3K views
円錐曲線の極座標表示
Maruyama Tetsutaro
•
2.6K views
代数トポロジー入門
Tatsuki SHIMIZU
•
3K views
命令プログラミングから関数プログラミングへ
Naoki Kitora
•
3.7K views
TopCoder SRM614 解説
EmKjp
•
1.4K views
コンピュータービジョン最先端ガイド2 3.4ベクトルデータに対するカーネル法(SVM)
Takahiro (Poly) Horikawa
•
5K views
動的計画法入門(An introduction to Dynamic Programming)
kakira9618
•
9K views
【展開用】日曜数学会 Sinc関数の積分について
和人 桐ケ谷
•
8.3K views
【Unity道場スペシャル 2017札幌】乱数完全マスター
Unity Technologies Japan K.K.
•
13.4K views
Rで実験計画法 前編
itoyan110
•
28.9K views
パターン認識第9章 学習ベクトル量子化
Miyoshi Yuya
•
15.5K views
Advertisement
More from Yoshiteru Kamiyama
(7)
オイラーの公式で感じる次元の呪い
Yoshiteru Kamiyama
•
4.2K views
Tokyo.rの輪
Yoshiteru Kamiyama
•
1.3K views
Listを串刺し
Yoshiteru Kamiyama
•
1.1K views
R language definition3.1_3.2
Yoshiteru Kamiyama
•
907 views
rで踊るパスタ
Yoshiteru Kamiyama
•
498 views
黄金比.再帰
Yoshiteru Kamiyama
•
808 views
医療費ts
Yoshiteru Kamiyama
•
758 views
Rでマンデルブロ集合
1.0
0.5 Rでマンデルブロ集合 Im(d) 0.0 -0.5 -1.0 -2.0 -1.5 -1.0 -0.5 0.0 0.5 1.0 step: 0.03 n = 2 @manozo Tokyo.R#20 LT1 at Nifty 28.JAN.2012
なんで今さらマンデルブロ集合? • マンデルブロ博⼠の「禁断の市場」
を読んだから クオンツ⼤仏様の ご推薦本 • お断り – 「マンデルブロ集合」についてはwikipediaな どを⾒るか「禁断の市場」を読んでください。 – 数学は数ⅡB?まで(⽂系) • 複素数は⾼校時代にうっすらやった記憶あり 2
でなんとかならないものか?
と考えた • マンデルブロ集合って何という⽅へ – これwikipediaマンデルブロ集合 •マンデルブロ集合はどこだと思いますか? 3
偶然 plot(1+1i) ができること
を 知 1.4 複素平⾯(ガウス平⾯) る Y 1.2 軸 が Im(1 + (0+1i)) これ 1.0 虚 部 0.8 0.6 0.6 0.8 1.0 1.2 1.4 Re(1 + (0+1i)) X軸が実部 4
「もしかしたら出来るかも」と
思 っ 漸化式 た Zk+1=Zk 2+C Z0=0 複素数Cにおいて発散するか否か? 発散しないCがマンデルブロ集合 5
⼿順 • 複素数のリスト(ベクトル)を⽤意 • マンデルブロ集合に含まないものをリストアップ
– ネガフィルムのように • plot() – 以上なるべくRっぽく 6
準備(特別なpackage使わないで) • 材料 –
outer(): 複素数のリスト作成 – complex(real=1,imag=1) #‐>1+1i • Mod(): 絶対値 2を超えると発散してしまうらしい – 無限のチェックはいらない(is.infinite()) – setdiff(): 集合演算(差) – plot(): 複素数もplotで 7
複素数の
絶対値とは a<‐c() step=0.05 a<‐outer(seq(‐2,2,step),seq(‐2,2,step), function(x,y)complex(r=x,i=y)) 原点からの距離 d <‐ c() for(c in a){ 2 if(Mod(c) < 2) #⿊いところが絶対値が2未満 1 d<‐c(d,c) Im(d) 0 } -1 plot(d,pch=19,asp=1) -2 -3 -2 -1 0 1 2 3 Re(d) 8
スクリプト1(複素数のリストを⽤意) forの⼆重ループを使わずに
outer(1:9,1:9,"*") step=0.1 で九九 outer(1:9,1:9)でもOK! g<‐outer(seq(‐2,1,step), seq(‐1,1,step), function(x,y)complex(r=x,i=y)) 1.0 dim(g) #‐> 31 21 0.5 length(g) #‐> 651 Im(a) 0.0 plot(g) -0.5 ⼀粒⼀粒発散するか確認 -1.0 -2.0 -1.5 -1.0 -0.5 0.0 0.5 1.0 9 Re(a)
スクリプト2(マンデルブロ集合に含まれるか否か) • zの絶対値が2を超えるものをリストアップ m <‐c() #ここへリストアップ for(c in g){
z<‐0 #初期値は0とする(⼀般的なマンデルブロ集合) for(i in 1:100){#100回を超えて発散しないものをマンデルブロ集合とする z <‐ z^2 + c #漸化式 if(Mod(z) > 2){ #絶対値が2を超えると発散(マンデルブロ集合ではない) m<‐c(m,c) #リストに追加 break #抜ける } } 絶対値が2を超えるとzは無限遠に⾶んでいく } 10
スクリプト3(plotする) • mm<‐setdiff(g,m) #集合演算(差をとる) • plot(mm)
1.0 おぼろげながら 0.5 ⾒えてきた Im(g) 0.0 -0.5 1.0 0.5 Im(m) 0.0 -1.0 -0.5 -2.0 -1.5 -1.0 -0.5 0.0 Re(g) -1.0 -2.0 -1.5 -1.0 -0.5 0.0 0.5 1.0 Re(m) plot(m) この⼀粒⼀粒がマンデルブロ集合 11
mandelbrot()として
定義する • mandelbrot<‐function(step=0.1){...} #stepのデフォを0.1に – ステップ1,2,3を囲むだけ • おまけはありますが 12
やっぱり
カラフル じゃないと... mandelbrot<‐function(step=0.1,n=2){ g<‐outer(seq(‐2,1,step),seq(‐1,1,step),function(x,y)complex(r=x,i=y)) g<<‐g[Mod(g)<=2] #絶対値2以下のものだけにする #‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ m<‐c()#マンデルブロ集合でないもの(絶対値が2より⼤きいものを⼊れる) mc<‐c()#発散するまでの回数を⼊れる 発散した回を for(c in g){ z<‐0 #初期値 for(i in 1:100){ z <‐ z^n + c カウントして⾊づけ if(Mod(z) > 2){ m <‐c(m,c);mc<‐c(mc,i);break}}} #‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ #回数で⾊分け plot(m,pch=pch,xlab=paste("step:",step,"n = ",n), xlim=c(‐2,1),ylim=c(‐1,1),col = colors()[mc*30]) m<<‐m #永続化(関数の外でも使えるように) mc<<‐mc print(length(m)) } length(colors())#‐>657⾊ 13
1.0
0.5 デモ mandelbrot(0.03) Im(d) 0.0 -0.5 -1.0 -2.0 -1.5 -1.0 -0.5 0.0 0.5 1.0 step: 0.03 n = 2 14
ちょっとかわいいマンデルブロ集合ですが
い か > mandelbrot(0.03) が で n し Z k +1 = Z k + C ょ う おまけ(nを変えてみる) か > mandelbrot(0.03,11) ? Rらしくいろいろ遊べます 15
たとえば par(mfrow=c(2,5))#画⾯を2×5=10 for(i in 1:10)#nを1〜10に mandelbrot(0.1,i)
16
1.0
1.0 1.0 1.0 1.0 0.5 0.5 0.5 0.5 0.5 Im(d) Im(d) Im(d) Im(d) Im(d) 0.0 0.0 0.0 0.0 0.0 -0.5 -0.5 -0.5 -0.5 -0.5 -1.0 -1.0 -1.0 -1.0 -1.0 -2.0 n=1 -1.0 0.0 1.0 -2.0 n=2 -1.0 0.0 1.0 -2.0 n=3 -1.0 0.0 1.0 -2.0 n=4 -1.0 0.0 1.0 -2.0 n=5 -1.0 0.0 1.0 step: 0.1 n = 1 step: 0.1 n = 2 step: 0.1 n = 3 step: 0.1 n = 4 step: 0.1 n = 5 1.0 1.0 1.0 1.0 1.0 0.5 0.5 0.5 0.5 0.5 Im(d) Im(d) Im(d) Im(d) Im(d) 0.0 0.0 0.0 0.0 0.0 -0.5 -0.5 -0.5 -0.5 -0.5 -1.0 -1.0 -1.0 -1.0 -1.0 -2.0 n=6 -1.0 0.0 1.0 -2.0 n=7 -1.0 0.0 1.0 -2.0 n=8 -1.0 0.0 1.0 -2.0 n=9 -1.0 0.0 1.0 -2.0 n=10 -1.0 0.0 1.0 step: 0.1 n = 6 step: 0.1 n = 7 step: 0.1 n = 8 step: 0.1 n = 9 step: 0.1 n = 10 17
円の⼤きさは回数のlog
たとえば2 mct<‐table(mc) plot(mct,col=colors()[30*as.integer(names(mct))]) 1.0 1500 発散するまで 0.5 の回数分布 1000 table(mc) Im(m) 0.0 500 -0.5 -1.0 0 -2.0 -1.5 -1.0 -0.5 0.0 0.5 1.0 1 7 15 24 33 42 51 60 69 81 90 99 Re(m) mc 18
たとえば3
plot3d()もおもしろい • 複素数をそのまま渡してもOK! – 3D表⽰ > library(rgl) > plot3d(m,mc,col=mc) 19
?complex でヘルプをみると
... 更に、複素数値に対する初等的な三⾓関数、 対数関数、指数関数が使える。 – http://www.is.titech.ac.jp/~mase/mase/h tml.jp/temp/complex.jp.html とある。 もちろん複素数に対する四則も 20
1.0
1.0 0.5 0.5 0.0 0.0 -0.5 -0.5 -1.0 -1.0 逆数 -1 0 1 2 3 -1.5 -1.0 -0.5 0.0 0.5 1.0 -0.5 0.0 0.5 1.0 1.5 逆数 3 sin() sin() cos() cos() 2 2 1 1 0 0 -1 -1 -2 -2 -3 10 tan() 5 0 5 10 log() 05 00 05 00 05 exp() 10 15 20 25 21
まとめ • Rでマンデルブロ集合が何となく理解できる
ようになるはず • zoom in しなくても楽しい • ⾊々と試してみて下さい – ジュリア集合(Z0を0以外、Cを固定)デモします – 解像度を上げる – (⾊|n)を変える – アニメーション(gifアニメーションなど) 22
参 考 • マンデルブロ集合の不思議な世界 –
マンデルブロ集合の作り⽅ – あじさん • マンデルブロ集合のjavaアプレットあり • wikipedia マンデルブロ集合 • マンデルブロー集合ー2次関数の複素⼒学系⼊⾨ – 川平 友規(名古屋⼤学⼤学院多元数理科学研究科) – 平成24年1⽉10⽇ 23
謝謝
2 1 Im(setdiff(a, d)) 0 -1 -2 -2 -1 0 1 2 Re(setdiff(a, d)) 24
Gallery
25
2
ジュリア集合で遊ぶ 1 Im(d) 0 -1 -2 -2 -1 0 1 2 step: 0.1 ri = -0.4-1.1i • ソースは次 > par(bg=1)#バックを⿊に > julia(step=0.1, n=2, col=30) • パラパラジュリア > for(i in 1:100)julia() • サイケジュリア 2 1 > for(i in 1:100) Im(d) 0 -1 + julia(col=sample(1:100,1)) -2 -2 -1 0 1 2 step: 0.1 ri = 0.9+1.5i 26
julia<‐function(step=0.1,pch=19,col=30,n=2){ a<‐outer(seq(‐2,2,step),seq(‐2,2,step),
function(x,y)complex(r=x,i=y)) a<<‐a[Mod(a) <= 2] ri<‐sample(a,1)#Zの初期値をランダムに選ぶ d<‐c() dc<‐c() for(z in a){ c<‐ ri zz<‐z for(i in 1:100){ zz <‐ zz^n + c if(Mod(zz) >= 2){ d <‐c(d,z) dc<‐c(dc,i) #何回⽬で発散したか break } } } #発散した回数で⾊分け plot(d,pch=pch,xlab=paste("step:",step,"ri = ",ri),xlim=c(‐2,2),ylim=c(‐2,2), col=colors()[dc+col]) d<<‐d dc<<‐dc } 27
ジュリアサイコロ > par(bg=1,mfrow=c(2,3)) > for(i in 1:6)julia(n=i)
2 2 2 1 1 1 Im(d) Im(d) Im(d) 0 0 0 -1 -1 -1 -2 -2 -2 -2 -1 0 1 2 -2 -1 0 1 2 -2 -1 0 1 2 step: 0.1 ri = 0.4-1.3i step: 0.1 ri = -0.1-1.6i step: 0.1 ri = -1.2+0.5i 2 2 2 1 1 1 Im(d) Im(d) Im(d) 0 0 0 -1 -1 -1 -2 -2 -2 -2 -1 0 1 2 -2 -1 0 1 2 -2 -1 0 1 2 step: 0.1 ri = -1.6+2i step: 0.1 ri = 0+1.2i step: 0.1 ri = 0.1+1.3i 28
マンデルブロ
マスク mandelbrot(0.03)#解像度(マシンに合わせて) library(rgl) rgl.bg(col=1)#バックは⿊ plot3d(‐1i/tan(m),mc,col=heat.colors(100)[dc]) #無限ループで回す(⼿ぶらで)ESCでストップ。 i<‐0;while(1)rgl.viewpoint(i<‐i+1) 29
以上 デモしました • ジュリアサイコロはお初。
30
Advertisement