カオス・フラクタル 講義ノート #10
担当 : 井上 純一 (情報科学研究科棟 8-13)
URL : http://chaosweb.complex.eng.hokudai.ac.jp/˜j inoue/index.html

平成 23 年 7 月 5 日

目次
13 フラクタル
13.1 自己相似性 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

84
84

13.2 計算機を使って描かれるフラクタル図形 . . . . . . . . . . . . . . . . . . . . . . .
13.2.1 線形写像の確率的切り換えによるフラクタル図形 . . . . . . . . . . . . . .

8585

13.2.2 パスカルの三角形とフラクタル図形 . . . . . . . . . . . . . . . . . . . . . .
13.2.3 フラクタル図形を「なか抜き」の繰り返しにより描く . . . . . . . . . . . .
13.2.4 粒子のランダムウォークと吸着/凝集によるフラクタル図形 . . . . . . . . .

88
89
90

13.3 カントール集合 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
13.3.1 作り方 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

90
91

13.3.2 カントール集合の 3 進小数表現と自己相似性 . . . . . . . . . . . . . . . . .

91

前回のレポート課題の解答例は別紙にて配布します.

13

フラクタル

[カオス編] は前回で終了したので, ここからはフラクタルについて学んでいく.

13.1

自己相似性

自然界には縮尺 (スケール) を変えても次々と同じ構造・形が現れるようなものが多い. 例えば,
図 47 の上 2 枚の写真はいずれもブロッコリを撮影したものであるが, それら 2 つを並べた図 47(下)の 1 枚を見るまで, 同じ大きさのブロッコリに見える. この例からわかるように, ものによっては対象への視点をズームイン/アウトしても次々と同じ形状が現れ, 我々が日頃その典型的 (特徴的)な大きさを知っている「鉛筆」や「タバコ」などの第三の物体をそれらの傍らに置かないかぎり,その大きさについて知ることはできない (図では背景にあるノートの罫線が薄く見えるが, これによってかろうじて 2 つの大小を比較することができる). このような性質を自己相似性と呼ぶ. この性質は, ここから学習していく「フラクタル」と呼ばれる複雑図形の特徴の一つとなっている.
このブロッコリの例以外にも雲や木, 海岸線など実に様々な対象がフラクタルの性質を持っている. また, このようなフラクタル図形の持つ性質を有効に使ったアルゴリズムを構築したり, ある84カオス・フラクタル 2011 #10

担当: 大学院情報科学研究科 井上 純一

図 48: 自己相似性を持つブロッコリ.
いはコンピュータ・グラフィクス (CG) に用いたりなど工学分野への「応用」も数多くなされている. ここからは, そのようなフラクタルについて基本的な事柄を学習していくが, [カオス編] 同様,この講義ではフラクタルの応用面/より進んだ内容について紹介/学習する余裕はないので, それらについて興味のある者はこの講義を受講後に大学院講義「混沌系工学特論」などを別途聴講するとよいであろう.

13.2

計算機を使って描かれるフラクタル図形

我々の身のまわりには挙げればきりがないほどのフラクタルが存在するが, [カオス編] でみたのと同様, ここでも計算機を有効に用いて人工的なフラクタル図形を描くことができる. ここではフラクタルに関する詳細を見る前にそれらについて概観しておこう.

13.2.1線形写像の確率的切り換えによるフラクタル図形

変数 r を [0, 1] の一様乱数とし, この各ステップで更新される r の値によって, 線形 2 次元写像の形が切り替わるような簡単な数理模型を考えてみる.
具体的には 0 ≤ r < 0.1 で

xn+1= 0.05 xn

(204)

yn+1

= 0.6 yn(205)

0.1 ≤ r < 0.2 では
xn+1= 0.05 xn

(206)

yn+1

= −0.5 yn + 1.0(207)
ここは 85 ページ目

カオス・フラクタル 2011 #10

担当: 大学院情報科学研究科 井上 純一

0.2 ≤ r < 0.4 では
xn+1= 0.46 xn − 0.32 yn

(208)

yn+1

= 0.39 xn + 0.38 yn + 0.6(209)xn+1= 0.47 xn − 0.15 yn

(210)

yn+1

= 0.17 xn + 0.42 yn + 1.1

(211)

xn+1

= 0.43 xn + 0.28 yn

(212)

yn+1

= −0.25 xn + 0.45 yn + 1.0(213)xn+1= 0.42 xn + 0.26 yn

(214)

yn+1

= −0.35 xn + 0.31 yn + 0.7(215)

0.4 ≤ r < 0.6 では

0.6 ≤ r < 0.8 では

0.8 ≤ r ≤ 1 ではとする. つまり, 写像の各ステップにおいて確率 1/10 で (204)(205) あるいは (206)(207), 確率 1/5
で (208)(209), または (210)(211), または (212)(213), または (214)(215) を選ぶようにする.
実際に上記の写像を 200, 1000, 5000, および 100000 回反復し, その結果を gnuplot で描画した結果を図 48 に載せよう1 . 図からわかるように得られる図形は「木」のように見え, ブロッコリと同種の自己相似性を有することがわかる. 参考までにプログラムの主要部分のみを載せておくので,各自が写像の係数や条件分岐における r の範囲を変更し, 得られる結果を考察してみると良いであろう.

#define max 100000#define SEED 23 /* 乱数の種 */main(){
int i;
double x,y,xn,yn,r;double ran3(long*);long idum=(SEED);FILE *pt;
xn = 0.5; /* 初期値 */yn = 0.0; /* 初期値 */if((pt=fopen("tree.dat","wt")) != NULL){
for(i=1; i <= max; i++){r = ran3(&idum);
if(r < 0.1){/* 乱数を入れる */xn = 0.05*x;
yn = 0.6*y;
1 Step=100000 の図形は微細な構造をも描くために, gnuplot において with dots オプションをつけてプロットした.

ここは 86 ページ目

カオス・フラクタル 2011 #10

担当: 大学院情報科学研究科 井上 純一

22

1.8

1.8

1.6

1.6

1.4

1.4

1.2

1.2

11

0.8

0.8

0.6

0.6

0.4

0.4

Step = 200

0.2
0-0.8

-0.6

-0.4

-0.2

00.2

0.4

0.6

0.8

0-0.8

22

1.8

1.81.6

1.6

1.4

1.4

1.2

1.2

11

0.8

0.8

0.6

0.6

0.4

-0.6

-0.4

-0.2

00.2

0.4

0.6

0.8

0.4

Step = 5000

0.2
0-0.8

Step = 1000

0.2

-0.6

-0.4

-0.2

00.2

0.4

Step = 100000

0.2

0.6

0.8

0-0.8

-0.6

-0.4

-0.2

00.2

0.4

0.6

0.8

1

図 49: 計算機を用いて描かれた木. ブロッコリに見えなくもない.

}else if((r > 0.1) && (r < 0.2)){
xn = 0.05*x;
yn = -0.5*y + 1.0;
}else if((r > 0.2) && (r < 0.4)){
xn = 0.46*x - 0.32*y;yn = 0.39*x + 0.38*y + 0.6;
}else if((r > 0.4) && (r < 0.6)){
xn = 0.47*x - 0.15*y;yn = 0.17*x + 0.42*y + 1.1;
}else if((r > 0.6) && (r < 0.8)){
xn = 0.43*x + 0.28*y;yn = -0.25*x + 0.45*y + 1.0;
}else{
xn = 0.42*x + 0.26*y;yn = -0.35*x + 0.31*y + 0.7;}
fprintf(pt, "%f %f\n", xn, yn);x = xn;y = yn;

ここは 87 ページ目カオス・フラクタル 2011 #10

担当: 大学院情報科学研究科 井上 純一}}
fclose(pt);}

13.2.2

パスカルの三角形とフラクタル図形

この他にも, 代表的なフラクタル図形として図 49 のようなシェルピンスキー・ガスケットが知られている. この図形の描画方法は様々あるのだが, 例えば, よく知られた「パスカルの三角形」に180160140120100806040200020406080100120140160180200

図 50: シェルピンスキー・ガスケット.
おいて奇数を●, 偶数を○で塗り分けるとシェルピンスキー・ガスケットが得られる2 .

2 かなり大きなサイズのパスカルの三角形を作らないと見えない. 計算機で描画するにはどうすればよいか考えてみるとよい.

ここは 88 ページ目

カオス・フラクタル 2011 #10

担当: 大学院情報科学研究科 井上 純一

パスカルの三角形

111145161231113610152171141510203511563521171.............................................
シェルピンスキー・ガスケット (の一部)
●
●
●
●
●
●
●
●

○

●

○
●

○

●

●
●

○
○

●
●

●

○
○

○
●

●

●
●

●

●

●
○

●

●
●

●

..............................................

13.2.3フラクタル図形を「なか抜き」の繰り返しにより描く

シェルピンスキー・ガスケットは上記以外にも, 図 50 のように正三角形の中央部分から逆正三角形を「なか抜き」していくプロセスを無限回繰り返すことでも描画することができる. この図

図 51: 正三角形の中央部分から逆正三角形を「なか抜き」していくプロセスでもガスケットは描ける. S0 , S1 , S2 は各ステップでの図形の総面積. L0 , L1 , L2 は各ステップでの図形の全周囲長.
で S0 , S1 , S2 は各ステップでの図形の総面積. L0 , L1 , L2 は各ステップでの図形の全周囲長を表すが, はじめの正三角形の一辺の長さを l とすると, その全周長は L0 = 3l である. 一方, 上記のプロセスを 1 回経た後の図形の全周囲長は L1 = 3l + (l/2) × 3 = (1 + 1/2)3l = (3/2)L0 である.
ここは 89 ページ目

カオス・フラクタル 2011 #10

担当: 大学院情報科学研究科 井上 純一

従って, このプロセスを 2 回経ると全周囲長は L2 = (3/2)L1 = (3/2)2 L0 となり, n 回繰り返せばLn = (3/2)n L0 である. 従って, この操作を無限回繰り返せば( )nLn3=→∞
L02(216)となり, 全周囲長は発散することになる.

√
一方, 面積の方は, もとの正三角形の面積が S0 = ( 3/4)l2 で与えられるが, 上記のプロセスを 1√√
回経た後には S1 = ( 3/4)(l/2)3 × 3 = ( 3/4)l2 × (3/4) = (3/4)S0 であるから, n ステップ後には Sn = (3/4)n S0 となる. 従って, この操作を無限回繰り返せばSnS0=( )n3→04(217)となって総面積はゼロになる.
このように, 無限回の操作後に描かれるこの図形の総面積はゼロに収束するが, 一方の全長が無限大に発散する. これはこの図形に特徴的な (典型的な) 長さスケールが存在しないことを意味しており, この点がフラクタル図形の持つ顕著な性質の一つとなっている.

13.2.4粒子のランダムウォークと吸着/凝集によるフラクタル図形

例えば, 菌糸の成長過程などは「核 (種)」の周りをある確率に従って動き回る微粒子が次々と核に吸着していくことにより複雑な図形が出来上がるプロセスとして計算機上で再現できる. できあがる図形はフラクタルである.
t = 10000000

t = 1000000
t = 100000

図 52: 菌糸の成長過程. 時間は左から右に流れている.
図 51 は中央に置かれた菌糸の「種」に周りからランダムウォーク (酔歩) しながらやってくる菌が次々と付着してゆくことによって, この菌糸が成長していく様子をあらわしている.

13.3

カントール集合

ここまでいくつかのフラクタル図形の作り方についてざっと観てきたが, ここではもう少しシンプルなフラクタル図形を考えることで「フラクタル」という概念についての理解を深めていこう.

ここは 90 ページ目

カオス・フラクタル 2011 #10

13.3.1

担当: 大学院情報科学研究科 井上 純一

作り方

その図形の作り方は簡単であり, 図のように長さ 1 の線分を 3 等分し, その真ん中の部分を削除する. 次いで, 両端の残された長さ 1/3 の線分を同様に 3 等分し, その真ん中の部分をそれぞれ削除する. この一連の操作を無限に繰り返す. この手続きで得られる図形はフラクタルであり, カン

図 53: カントール集合の作り方.
トール集合と呼ばれている.

13.3.2

カントール集合の 3 進小数表現と自己相似性

カントール集合の自己相似性をみるために, 上記のような作り方で「なかぬき」されて残った部分の「端点」を考えてみよう. その際, 作り方から明らかなように, 十分な繰り返しの後においても, これら端点はカントール集合の一部となることに注意しよう. ここで, 線分を 1/3 ずつ区切り,その中央線分を取り除いていくわけであるから, 端点は 1/3, 2/3, 1/9 のように, 1/3n を共通因子に持つ. そこで, これら端点を 3 進小数で表現してみることにする. [カオス編] において, ベルヌーイ写像が 2 進小数を用いて表現できることは既に学んでいるが, 3 進小数表現はそれとほぼ同じ操作を行えばよい. x を 10 進小数とすると, これを 3 進小数で書き直すためには x をx =a1 · 3−1 + a2 · 3−2 + a3 · 3−3 + · · · + an · 3−n + · · ·(218)と表して (0.a1 a2 · · · an . . .)3 , ai ∈ {0, 1, 2} がその 3 進小数表示となる.
このとき, 例えば 1/3 は

1/3 =
=

0 · 3−1 + 2 · 3−2 + 2 · 3−3 + · · · + 2 · 3−n + · · · =23{

11+ 2 + ···3 3}

2 13= 1/3
3 1 − 13(219)であるから, 1/3 = (0.02 · · ·)3 であり, 1/9 は 1/3 と同様にして1/9 ==−10·3−2+0·3

2 13= 1/99 1 − 13−3+2·3−n+ ··· + 2 · 32+ ··· =9{11++ ···
3 32}

(220)

ここは 91 ページ目

カオス・フラクタル 2011 #10

担当: 大学院情報科学研究科 井上 純一となるので, 1/9 = (0.002 · · ·)3 である.
一方, 端点ではなく, なかぬきされた方の線分上の点, 例えば x = 1/3 + 1/9 = 4/9 を 3 進小数表
現してみると 4/9 = (0.102 · · ·)3 が得られる. ここで注目すべきは, カントール集合の要素, すなわ
ち, 各ステップで残される線分の端点の 3 進小数表現には 1 が含まれず, 逆に, なかぬきされて除かれた線分上の点の 3 進小数表現には 1 が含まれるという事実である. 言い方を換えれば, カントール集合は [0, 1] の実数を 3 進小数表現した集合から, 1 を含む部分集合を取り除いた集合である.
このことから, また, カントール集合の自己相似性を 3 進小数表現の観点から直接みることができる. つまり, 任意のカントール集合の要素は

x = a1 · 3−1 + a2 · 3−2 + a3 · 3−3 + · · · + an · 3−n + · · · , ai 6= 1(221)で与えられるので, その縮尺を 1/3 倍してみるには, 上記 x を 1/3 倍すればよいので

x3= a1 · 3−2 + a2 · 3−3 + a3 · 3−4 + · · · + an · 3−n−1 + · · ·(222)が得られるが, これは x の 3 進小数を右側に 1 つシフトすることを意味するので, x の 3−i についての展開の全ての係数 ai が 1 を含まなければ x/3 の展開係数も 1 を含まず, 逆に, x の展開係数に1 が含まれれば, x/3 の展開係数にも必ず 1 が含まれることになる. よって, カントール集合は自己相似であることがわかる.

レポート課題 10
次の 1 次元写像を考える.

{xn+1=3xn−3xn + 3(x ≤ 0.5)
(x > 0.5)(223)

このとき, 写像の初期値 x0 がカントール集合の要素である場合とそれ以外の場合とで写像の振る舞いに違いがでるか, もし, 違いがでるとしたらどのような振る舞いか, を計算機を用いた数値計算で調べよ.

ここは 92 ページ目