Sun, 12 Feb 2006
パーコレーションのシミュレーション(Java Web Start)
平面上に絶縁体の結晶が正方形で並んでいるとしよう。
結晶がランダムに伝導体のものに変化していくとしよう。
そのとき、全体の結晶のうちどれくらいの結晶が伝導体になれば
上から下まで電気が流れるであろうか?ただし、上下左右に
接している結晶にのみ電気が流れるとする。
池の中に格子状に置かれた飛び石を飛んで、端から端に渡ることを考える。
格子全体のうちどれだけの割合で飛び石を置けば、渡ることができるように
なるだろうか?
もちろん一直線に並べれば、辺の長さ分の石を置けば十分だが、
石がランダムに配置されているときは、そんなにうまくはいかない。
上の2つの問題は本質的には同じ問題である。結晶や飛び石は
2次元の格子と考えればよい。通ることのできる格子点をランダムに
配置するとき、上から下まで通れるようになるにはどのくらいの割合の
格子が通れればよいかという問題になる。この問題を
サイトパーコレーションという。
2次元格子の通ることのできる辺がランダムに配置されているときの
問題をボンドパーコレーションと言うが、ここでは扱わない。
プログラム概説
格子のサイズを入力してSTARTボタンを押すとシミュレーションが開始します。
ただし、大きなサイズのものだと
実行にかなりの時間がかかるので注意。
上辺からたどり着くことのできる格子点を赤く表し、たどり着けないところを
黒で表している。下までたどり着けた場合は上から下までたどり着けた格子を
青で塗り直して終了する。
格子点の連結した塊をクラスタと言う。パーコレーションがおこった後で
クラスタの大きさとそれぞれの大きさのクラスタがいくつあるかを調べて
リストとして出力している。
パーコレーションが起こる割合はシミュレーションの結果平均約0.59である。
つまり59%の格子点が通れるようになったときに上から下までの道ができると
いうことである。また、クラスタ統計を見るとパーコレーションしたクラスタが
大半を占め、その他のクラスタはサイズがずっと小さくなっている。
posted at 20:49 |
category: /Program/Physics |
固定リンク(パーコレーション
)
Sat, 11 Feb 2006
Ising 模型シミュレーション(Java Web Start)
履歴
- 2003/10/12
- インターフェイス改良。画像復元シミュレーションが可能に。
- 2003/10/05
- 久しぶりにソースの見直し。パフォーマンスとデータ構造のチェック。
シミュレーション結果
100x100サイズの格子について、温度(エネルギー)を変化させながら、
100x100x1000回メトロポリス法に従いランダムに格子の状態を変化させた結果の
Hamiltonianを計算する。そのシミュレーションをそれぞれの温度のときに
100回繰り返したときの平均をグラフにすると下のようになる。
これによると、温度が2.5ぐらいの時に相転移が起こっていることが観察できる。
posted at 01:45 |
category: /Program/Physics |
固定リンク(イジング模型
)
Spin Glass シミュレーション(Java Web Start)
Ising 模型における相互作用を表すパラメータは定数(強磁性モデル)だったが、
相互作用パラメータにヘップ則によるパターンを与えることで、
連想記憶をさせることができる。ここでは◯と×をシミュレーションすることにする。
履歴
- 2003/11/16
- Ising 模型のシミュレーションを改良して作成。
スピングラスとは
岩波講座物理の世界
「スピングラスと連想記憶」[1]
にコンパクトにまとまっている。+1 と -1 の二つの状態(スピンと言う)をとるセルと、
セルの間の相互作用を表すパラメータで系の状態を記述する。
強磁性体の場合は、相互作用を表すパラメータは空間的に一定で
その場合セルのスピンはそろう方が系は安定する。
一方スピングラスの場合は相互作用を表すパラメータは空間に対して一定でなく
その結果安定な状態が複数現れる。
ここでは◯と×のパターンを記憶するような相互作用を表すパラメータを
ヘップ則([1]33ページ)にしたがって与え、
ホップフィールド模型をシミュレーションしている。
「温度」によって系のゆらぎをメトロポリス法で与え、ハミルトニアンの値が
小さくなるように系の状態が変化していく。
ランダムに見えるパターンが〇か×のどちらかに収束していく。
どちらになるかは初期状態がどちらに近いかでほぼ決まる。
今後の予定
〇と×のパターンでハミルトニアンが極小値をとると考えられるが、
〇から×へパターンが変化する、すなわち峠を越えるにはどれくらいの温度が必要か、
また〇と×のそれぞれのパターンに収束する確率を計算する。
(確率を計算する方法はあるのだろうか?)
もちろん三次元のパターン記憶のシミュレーションも。
(ホップフィールド模型は相互作用を全てのセルに対して行うので次元に依らずにできるはず。)
posted at 01:32 |
category: /Program/Physics |
固定リンク(スピングラス
)
Wed, 11 Jan 2006
3次元の常微分方程式の中で視覚化することに意義があるものとして
取り上げた。たぶん一番最初に作ったまともな Java3D の
プログラムだったような・・・・・。
方程式
x' = -10x + 10y
y' = 28x -y -xz
z' = xy - 8/3z
を初期値 (x,y,z) = (0,5,0) の下で数値計算する。
posted at 21:31 |
category: /Program/Physics |
固定リンク(ローレンツアトラクタ
)
力学の教科書の内容は質点系の力学と剛体の力学の二つに大きく分けられている。
質点系の力学を Java3D で行うことための処方箋はほぼ分かってきて、
むしろネタ切れの感があったので、剛体の力学に挑戦することにした。
使い方
内部角運動量、慣性テンソル、軌道を表示する場合の局所座標の点、外部重力ベクトル
を与えて、シミュレーションをする。剛体の運動方程式に従って数値計算を行う。
剛体は独楽のような形をしているが、便宜上であって、独楽の慣性モーメントを
持つわけではない。次のような特徴的な初期値を与えることができる。
- Unstable
- 主慣性モーメント(つまり慣性作用素が対角行列のときの対角成分)が全て
異なるときに、中間の大きさの主慣性軸は安定ではない。そこで、
その方向の角運動量を大きくとって、それ以外の角運動量をわずかな値にして
シミュレーションをすると興味深い運動が見られる。
- Lagrange
- いわゆるラグランジュのコマ。回転の軸に対して、主慣性モーメントが対称。
- Kowalevski
- いわゆるコワレスカヤのコマ。回転軸は剛体の主軸と一致するが、
主慣性モーメントは回転軸と、それに垂直な一成分が等しく、
残りの一成分はそれらの2倍。
剛体の運動を空間上の回転を表すリー群上の運動だと思い、
角運動量はそのリー環(本当はその双対空間とすべきだけど、計量によって
同一視しておく)に値を持つと考える。
慣性テンソルをリー環上の対称作用素と考えて、
リー環の変数 M についての微分方程式
dM
-- = [M,Ω]
dt
M = A(Ω)
を解いて、角運動量 M を求める。
その角運動量にしたがって
りー群上の運動を求め、それに従って剛体の座標系を回転させている。
ちなみにこれは外力のない場合、つまりは
無重力空間内での剛体の運動となっている。
剛体がある重力場の中にいるときには、次の方程式になる。
dM
-- = [M,Ω] + [G,L]
dt
M = A(Ω)
ここで、G は剛体の座標系による
重力ベクトル場で、L は固定点を原点とした時の重心の位置ベクトルである。
はじめ Arnold の「古典力学における数学的方法」を見たが、剛体の運動は
のっていても、Hamilton 力学ではない。そこで、Abraham and Marsden の
Foundations of Mechanics とか、Marsden and Ratiu の Introduction to
Mechanics and Symmetry などを参考にした。この方程式の導出自体は
Hamilton 力学でなくてもできる。
数値計算は局所座標に書き下さずに行列のまま
vecmath パッケージを用いて計算した。ルンゲクッタ法は
行列環上の演算に翻訳して用いている。翻訳があっているかについて
理論的にチェックしていないので、ひょっとしたら積の非可換性から
ルンゲクッタ法で保証される以上の誤差が出てきてしまうかもしれない。
履歴
- 2002/3/9
- 取りあえず重力場対応にして、重心の位置と重力場を入力可能にする。
パラメータの指定方法はあまりよい方法ではないかもしれない。
- 2002/3/6
- 軌跡を描画するための軸の方向を変更可能にする。
軌跡を書くためのクラス Tail を Shape3D から BranchGroup に変更。
さらにデータ処理方法も参照モードに変更。たぶんコピーモード
よりも速い。さらに頂点の色も指定するようにして、色が減衰してい
くようにした。オマケとして Rainbow モードで作成。
- 2002/3/4
- 軸の軌跡を描画する。
- 2002/3/3
- 数値計算をルンゲクッタ法に変える。発散はおさまる。
- 2002/2/26
- オイラー法で数値計算する。すぐ発散してしまう。
- 2002/2/23
- 開発開始。
posted at 21:19 |
category: /Program/Physics |
固定リンク(剛体の運動シミュレータ
)
三体問題は、ハミルトン系の例として教科書によく現れ、また初等的に解けない例としても
よく紹介される。そこで Java3D でハミルトン系を扱う場合の例として取り上げることにしました。
数値計算はシンプレクティック法を Java で実装したものを使っています。
開発履歴:はじめ2000年の秋頃に作ったのですが、そのときの履歴をなくしてしまいました。
- 2003/8/2
- うまく動かなくなっていたのを直す。アプレットにおけるパラメータ表示のための
スレッドの処理などを変更。
- 2000/秋頃
- 開発開始。数値計算に使うためにシンプレクティック法をパッケージ化する。
posted at 00:25 |
category: /Program/Physics |
固定リンク(三体問題のシミュレータ
)
Fri, 06 Jan 2006