2009年9月7日月曜日

セルオートマトン #1 イントロダクション

こんばんは.今回はセルオートマトンについて.
セルオートマトンで有名なのは,ライフゲーム(Game of Life)ですが,今回は違います.

1次元セルオートマトン(Cellular automaton)

1次元セルオートマトンは,最もシンプルなセルオートマトンです.
セルは1次元に並んでいて,あるセルに2つのセルが隣接しています.
また,セルの種類は“0”,“1”の2つのみです.ここでは0を□,1を■とします.

□■□■■■□□
例えばある時刻tでは,こんな感じ.

そして,

akt+1=f(ak-1t, akt, ak+1t)

という式により,セルを更新します.
aktは時刻tにおける,k番目のセルの状態であり,
ak-1tはその左隣,
ak+1tはその右隣
を表します.
つまり,時刻t+1(次の時刻)のセルの状態は,時刻t(現在)のセルとその両脇のセルの状態によって決まるわけです.

更新に使うfは例えば下のようなものです.




時刻tでの状態
(ak-1t, akt, ak+1t)
(1, 1, 1)(1, 1, 0)(1, 0, 1)(1, 0, 0)(0, 1, 1)(0, 1, 0)(0, 0, 1)(0, 0, 0)
時刻t+1での状態
akt+1=f(ak-1t, akt, ak+1t)
00011110


同じですが以下のようにも書けます.




時刻tでの状態(左,中央,右)■■■■■□■□■■□□□■■□■□□□■□□□
時刻t+1での状態(中央)□□□■■■■□


このような“ルール”を各セルに適用します.

例:
□■□■■■□□
とりあえず,両端は考えない事にします.その内側のみを更新します.
□■□ → ■
■□■ → □
□■■ → ■
■■■ → □
■■□ → □
■□□ → ■
なので,
□■□■□□■□
となります.

これを繰り返していくだけです.

この“ルール”の数は,
左,中央,右の3セルが作る状態数=8,
1つの状態に対する,次のセルの状態数=2,
であるので,
28=256通りとなります.

具体的には,




時刻tでの状態■■■■■□■□■■□□□■■□■□□□■□□□
ルール0□□□□□□□□
ルール1□□□□□□□■
ルール2□□□□□□■□
ルール3□□□□□□■■
…
ルール252■■■■■■□□
ルール253■■■■■■□■
ルール254■■■■■■■□
ルール255■■■■■■■■


□=0,■=1なので,“ルール30”とかいったら,30を2進数(=00011110)に直せばいいわけです.

以上で,このモデルの説明は終わりです.

さてさて,セルオートマトンは,その振る舞いから,以下の4クラスに分類されます.

クラス1 - セル全体が同じ状態になり,変化しなくなる.:秩序状態
クラス2 - セルの時間発展につれ,最終的に周期的な変化になる.:秩序状態
クラス3 - セル全体がランダムな変化を続ける.:カオス状態
クラス4 - 規則的なパターンとランダムなパターンが共存し,複雑なパターンを形成する.

クラス1,2は単純過ぎ(簡単に予測できる),クラス3はカオス過ぎ,クラス4が丁度良い,つまり,現実世界で起こる現象に近いのではないか,と考えられたみたいです.

というわけで,全ルールを(出来れば)紹介していきます.

2009年9月4日金曜日

数学 #9 積分記号下での微分

私淑する物理学者の中に,ファインマンという人がいます.

彼の自伝(「ご冗談でしょう、ファインマンさん」)の中にこんな文章がありました.

ウッズの本には積分記号の中で係数を微分する方法もでていたが、あれだって一種の演算だ。ところが大学ではこれをあんまり教えないし、強調もしない。僕はウッズの本のおかげでその方法の使い方を覚え、それからもずっと馬鹿の一つ覚えみたいに、あれを繰り返し役に立ててきた。何しろ本を読んで覚えた自己流だから、僕のはずいぶんへんてこな積分法だったと思う。

というわけですが,この「積分記号の中で微分する」というのが暫くどういった方法か分かりませんでした.最近になって調べ直した所,解析概論の中に例を含めて載っているとのことなので,早速見てみました

解析概論
第4章 無限級数 一様収束
48. 連続的変数に関する一様収束 積分記号下での微分積分

仮定,条件は素っ飛ばすので厳密は微塵もなくなりますが,つまりは,


ということです.

例1:
下の定積分は直ぐに求められます.


ここで,両辺をαで偏微分すると,




となります.
同様にすると,n階偏微分の時


という公式が出来ます.

例2:
下の定積分も頑張れば求められます.


そして,

と改め,αでn階偏微分すると,




となります.

こんな方法があるのでした.

2009年9月1日火曜日

物理 #3 衝突(3次元)

最終的には3次元.

球A:
位置:r1=(x1, y1, z1)T
衝突前速度:v1=(v1x, v1y, v1z)T
衝突後速度:v1'=(v1x', v1y', v1z')T
質量:m1
反発係数:e1

球B:
位置:r2=(x2, y2, z2)T
衝突前速度:v2=(v2x, v2y, v2z)T
衝突後速度:v2'=(v2x', v2y', v2z')T
質量:m2
反発係数:e2

重要なのは,正規直交基底の取り方ですが,
1つ目e1は,r2-r1を正規化したもの,
2つ目e2は,e1に垂直になるようにし,
3つ目e3は,e1,e2に垂直となるようにします.

具体的には,

e1=(x, y, z)T
とします.次に
e2として,
(0, z, -y)T/|e2|
(y, -x, 0)T/|e2|
の内,計算可能なものを選びます.
そして,
e3=e1×e2
とします(“×”は外積).

このようにすると,
e1 - 1次元での衝突
e2 - 速度は不変
e3 - 速度は不変
となります.

あとは2次元の時と同様に

v1=w1xe1+w1ye2+w1ze3
v2=w2xe1+w2ye2+w2ze3

と表した時,

w1x=v1・e1
w1y=v1・e2
w1z=v1・e3
w2x=v2・e1
w2y=v2・e2
w2z=v2・e3

だから,

w1x'=(m1w1x+m2w2x)/(m1+m2)+e(w2x-w1x)m2/(m1+m2)
w1y'=w1y
w1z'=w1z
w2x'=(m1w1x+m2w2x)/(m1+m2)+e(w1x-w2x)m1/(m1+m2)
w2y'=w2y
w2z'=w2z

となり,

v1x'=w1x'e1x+w1y'e2x+w1z'e3x
v1y'=w1x'e1y+w1y'e2y+w1z'e3y
v1z'=w1x'e1z+w1y'e2z+w1z'e3z
v2x'=w2x'e1x+w2y'e2x+w2z'e3x
v2y'=w2x'e1y+w2y'e2y+w2z'e3y
v2z'=w2x'e1z+w2y'e2z+w2z'e3z

衝突条件は勿論,

(x2-x1)2+(y2-y1)2+(z2-z1)2≦(r1+r2)2

(rはそれぞれの球の半径です)

これで終わりです.4次元,5次元と拡張する場合は,基底の取り方に注意すれば後は同じです.



シミューレーションすると,これもまた感動です.

2009年8月26日水曜日

数学 #8 初等関数

初等関数とは何でしょうか.

初等関数とは,
「複素数を変数とする多項式関数,指数関数,対数関数の四則演算,合成によって表示できる関数」

です.
例えば,
x5+ln(sin(x-1))+ecos(x4)+ln29(xln(x))

とかです.

arcsin(x)は初等関数です.何故なら,
arcsin(x)=-iln(ix+√(1-x2))

だからです.

しかし,
(1-x4)-1/2
の不定積分は初等関数では表せません.

初等関数で表せないものは,一部の特殊関数で表すようです.

特殊関数は色々あります.生涯を特殊関数に捧げるも良いかも知れません.

2009年8月22日土曜日

数学 #7 数値解析 #2 積分の近似計算

今回は,積分の近似計算について.

フレネル積分

フレネル積分は以下のように定義されています.





残念なことに,この積分は初等関数で表すことは出来ないようです.
というわけで近似計算.





↑では,
1.三角関数をマクローリン展開
2.項毎に積分
を行い,無限級数の形で解を出しています.

では,この級数のグラフを示しましょう.


Fig.1 Fresnel(cos)


Fig.2 Fresnel(sin)

第n項までの和のグラフを表示しています(nは1から40近くまで取ってあります).
この級数展開の問題は,tを大きくすると,より多くの項を計算に入れないといけないという点にあります.
実際,nを大きく取っても,tの値を大きくすると直ぐに発散してしまいます.


Fig.3 Fresnel

x(t)とy(t)をxy平面にプロットすると,上のような螺旋模様が描かれます.


Fig.4

発散した時の図,アヴァンギャルドな感じが楽しめます..

先に述べた問題が発生しない,他の近似計算法も沢山あるのですが,それは次回以降…

数学 #6 数列

問題:
次の□に入る数は何でしょう.
0, 2, 4, □, 8, …





正解:
答えは,“5”「とします」.とっても分かりやすい回答ですね.
不満がある,そんな方は下をどうぞ.





導出:
f(x)=(x4-7x3+14x2+4x)/6
という関数を用意して,
an=f(n)
とおけば,

a0=0,a1=2,a2=4,a3=5,a4=8

となります.
本当の所,上の問題であれば,どんな数でも答えとなりえます.
f(0)=0,f(1)=2,f(2)=4,f(3)=r,f(4)=8
となる関数f(x)は必ず存在します.

「子供の数だけ答えがある」というか,子供の数より答えは多いです.探そうとしていないだけの事です.

結論:
問題を作る方も,解く方も注意しましょう.

2009年8月19日水曜日

専門書を読む #14

集合・位相入門
~p69

ちまちまと.

2009年8月17日月曜日

専門書を読む #13

集合・位相入門
~p65