本文 - 全学計算機システム

1
目次
第 1 章 コンピュータの使い方
1.1
1.2
基礎知識 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.3
1.4
ユーザ識別コードとパスワード . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
基本概念 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7
7
7
ログインとログアウト . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8
9
1.4.1
1.4.2
ログアウト (logout) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9
9
1.5
1.6
UNIX コマンド . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ファイル . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9
9
1.7
ファイルの編集 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10
10
1.7.1
1.7.2
vi コマンド . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ファイルの操作 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10
12
プログラムのコンパイルと実行 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
14
1.6.1
1.8
ログイン (login) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ファイル名について . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
第 2 章 グラフィックス入門
15
2.1
グラフィックスの取り扱い . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
15
2.2
中間言語 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.3
2.4
2.2.1
SCREEN 文 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
15
16
2.2.2
2.2.3
END 文 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
CLS 文 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
16
16
2.2.4
2.2.5
PSET 文 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
LINE 文 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
16
17
2.2.6
2.2.7
CIRCLE 文 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
PAINT 文 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
17
17
2.2.8
2.2.9
LOCATE 文 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
PRINT 文 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
17
17
研究課題 -sin 関数- . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
グラフィック・サブルーチン . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
17
17
2.4.1
2.4.2
17
21
graphics.f[基本] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
window.f[仮想座標系] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
第 3 章 ヒストグラミング
3.1
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
初期化 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
25
25
ヒストグラミング . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
出力 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
25
26
アルゴリズム . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
26
1次元ヒストグラム
3.1.1
3.1.2
3.1.3
3.2
25
2
3.2.1
3.2.2
必要なデータ構造 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.2.3
3.2.4
ヒストグラミング . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
プログラムの制御 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
出力 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
26
26
27
27
3.3
研究課題 -1次元ヒストグラム- . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
27
3.4
hbook.f サブルーチン . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
28
第 4 章 乱数
33
4.1
4.2
乱数とは . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.3
4.4
研究課題 I -疑似乱数- . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.5
4.6
研究課題 II -乱数の検定- . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
擬似乱数の生成 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
乱数の検定
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
34
34
いろいろな分布に従う乱数の生成 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
35
35
4.6.1
4.6.2
区間 (0,1) 上の一様分布にしたがう擬似乱数 . . . . . . . . . . . . . . . . . . . . . .
35
35
4.6.3
4.6.4
平均値 0、分散 1 の正規分布にしたがう擬似乱数 . . . . . . . . . . . . . . . . . . . .
4.6.5
平均 1 の指数分布にしたがう擬似乱数 −逆関数法− . . . . . . . . . . . . . . . . .
36
4.6.6
研究課題 V -指数乱数- . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
36
研究課題 III -一様乱数- . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
研究課題 IV -正規乱数- . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
第 5 章 モンテカルロ法
35
36
37
5.1
5.2
円周率の計算 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.3
5.4
酔歩のシミュレーション . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.5
5.6
計数の統計
研究課題 I -円周率 π- . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
37
37
研究課題 II -酔歩- . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
37
38
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
研究課題 III -放射線源の崩壊- . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
39
39
第 6 章 力学/天体物理
6.1
33
33
微分方程式の数値解法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
41
41
6.1.1
6.1.2
42
42
オイラー法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ルンゲ-クッタ法
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.2
6.3
研究課題 I -ベッセル方程式- . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
43
43
人工衛星の軌道計算
6.4
研究課題 II -人工衛星- . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
44
6.5
6.6
ボイジャー2号の木星による重力加速 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
44
45
6.7
6.8
3体問題 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
研究課題 III -重力加速- . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
研究課題 IV -3体のカオス- . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
第 7 章 分子運動論/ブラウン運動
45
46
47
47
7.1
ボルツマン分布則 −衝突/緩和モデル− . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.2
7.3
研究課題 I -ボルツマン分布則- . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
気体の中での電子の3次元酔歩 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
49
49
7.4
研究課題 II -3次元酔歩- . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
50
3
7.5
7.6
ブラウン粒子の運動
7.7
7.8
1次元ねじれ振子のブラウン運動 −ペランの実験− . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
研究課題 III -気体中のブラウン粒子の運動- . . . . . . . . . . . . . . . . . . . . . . . . . . .
研究課題 IV -ペランの実験- . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
第 8 章 サンプルプログラム
8.1
研究課題:sin 関数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8.3
8.4
8.5
52
54
55
概要 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
56
56
8.1.2 出力例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
研究課題:1次元ヒストグラム . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
56
58
8.2.1
8.2.2
58
58
8.1.1
8.2
50
52
概要 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
出力例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
研究課題:一様乱数の生成 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8.3.1
概要 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8.3.2
出力例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
61
61
研究課題:一様乱数の検定 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
61
64
8.4.1
8.4.2
出力例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
64
64
研究課題:いろいろな乱数の生成 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
67
8.5.1
8.5.2
67
67
概要 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
概要 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
出力例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8.6
研究課題:モンテカルロ法による円周率 π の計算 . . . . . . . . . . . . . . . . . . . . . . . .
概要 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
72
72
8.7
8.6.2 出力例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
研究課題:モンテカルロ法による酔歩のシミュレーション . . . . . . . . . . . . . . . . . . .
72
75
8.7.1
8.7.2
75
75
8.6.1
8.8
概要 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
出力例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
研究課題:ベッセル方程式を解く . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8.8.1
概要 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8.8.2
出力例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
78
78
研究課題:人工衛星の軌道 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
78
83
8.9.1
8.9.2
出力例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
83
83
8.10 研究課題:ボイジャーと木星 -重力加速- . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8.10.1 概要 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
89
89
8.10.2 出力例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
89
8.11 研究課題:3体問題 -天体のカオス- . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8.11.1 概要 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
93
93
8.11.2 出力例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8.12 研究課題:ボルツマン分布則 -緩和による平衡状態の実現- . . . . . . . . . . . . . . . . . . .
93
99
8.12.1 概要 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8.12.2 出力例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
99
99
8.9
概要 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8.13 研究課題:3次元酔歩 -確率過程- . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
8.13.1 概要 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
8.13.2 出力例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
4
8.14 研究課題:3次元酔歩 -拡散現象- . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
8.14.1 概要 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
8.14.2 出力例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
8.15 研究課題:気体中のブラウン粒子の運動 -座標空間像- . . . . . . . . . . . . . . . . . . . . . . 114
8.15.1 概要 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
8.15.2 出力例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
8.16 研究課題:気体中のブラウン粒子 -速度空間像- . . . . . . . . . . . . . . . . . . . . . . . . . 120
8.16.1 概要 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
8.16.2 出力例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
8.17 研究課題:気体中のブラウン粒子 -速度空間分布- . . . . . . . . . . . . . . . . . . . . . . . 125
8.17.1 概要 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
8.17.2 出力例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
5
まえがき
現在、実験・理論を問わず多くの物理学の研究分野で、コンピュータが物理現象を理解し理論を発展させ
てゆくための必要不可欠な道具となって来ている。むしろ、コンピュータと無縁な研究分野の方がまれであ
る。一方、物理学を学習するという場面では、案外、このことが了解されていないようである。もちろん、
このことは、授業そのものにおけるよりも、むしろ授業に付随した予習・復習あるいは発展学習という場に
おいて強調されるべきであろう。
物理学における実験、理論およびコンピュータの関係は図に示すような『ボロメオの輪』にたとえられ
る。図に見られるように、各々の輪(実験、理論およびコンピュータに対応している)はそれぞれ他の2つ
の輪を結び付ける役目を果していて、どれか1つでも輪をはずすと残りの2つの輪も離れてしまい全体が
バラバラになってしまう。物理学における実験、理論およびコンピュータはこのように相互に連関しあって
いて、緊密な相補的関係にある。
理論への示唆
精密計算
大規模計算
実験への 示唆
データの 解析
現象の モデル 化
コンピュータ
基礎方程式
結果の解釈
基礎 データ
実験
理論 への 示唆
理論 のテスト
理論
実験への 示唆
データの 解釈
ボロメ オ の輪
6
ところで、本学では誰もが一年時の授業(『情報処理実習』)でコンピュータの使い方を一通り学習して
いる。したがって、《物理の学習へのコンピュータ利用》がよりスムーズに行われうるものと考えられる。
とはいっても、『一通りコンピュータの使い方を学ぶ』ことと『コンピュータを物理の学習の道具として使
う』こととの間には大きなギャップがあり、各自の自主的取り組みをはばんでいるというのが現状だろう。
この授業では、そのような困難を乗り越え、各自の自主的取り組みをすすめてゆくための基礎を修得す
ることを目指している。ここでは、典型的な物理の問題について、いくつかの実例を具体的にコンピュータ
を使って考える。それらを通じて、物理現象への新しいアプローチを体得して行くことになるだろう。
特に、数値計算、シミュレーション、グラフィックス等のコンピュータ的手法を利用して、自明でない物
理現象について解析し理解を深める。もとより、ここにとりあげた諸例はあくまで一つの例である。これら
をヒントにして様々な問題にコンピュータを応用して行って欲しい。
7
第 1 章 コンピュータの使い方
この授業では、随意にコンピュータ手法を駆使(?)してさまざまな物理現象を理解してゆく。そのため
には、コンピュータの使いかたによく馴れ親しんでいることが大前提となる。とはいっても、一年のときの
記憶は時間とともに大分風化してきていると考えられるので、ここで基本的なことがらについて復習する
ことにする。
もとより、限られた紙面ですべてを詳細に述べることはできない。実際、意味も少ないだろう。ここで
は、最も基本的と思われることがらにのみふれる。さらに進んで知識を得ようとする人は筑波大学学術情
報メディアセンター備え付けのマニュアル類を参考にしてほしい。それらが読めるようになったら、もう
《シニア・ユーザーの仲間入りができた》といえるだろう。
1.1
基礎知識
一般に、コンピュータを利用して何等かの仕事を行う場合、つぎにあげる基礎知識が不可欠である。
1. コマンド
コンピュータを制御するための命令群
2. プログラミング言語
仕事の手順(プログラム)を記述するための言葉
3. ファイル・システム
作成したプログラムやデータの格納や取り出し
4. 入出力システム
プログラムとの対話や計算結果の表示や印刷
これらのうち、プログラミング言語を除いて、他はすべて利用しているコンピュータ毎に異なっている。
コンピュータを利用する場合、まず第一に上の各項について必要な知識(全部である必要はない!)を集
め、ある程度の理解を深めることが大切である。
ところが、初心者にとって、このことは案外難しい。大体、何が必要な知識なのかも分らない?
!そうい
う場合、近くのよく知っている人に必要に応じて聞くのが一番能率のよい方法である。しかし、聞かれる相
手の迷惑まで考えると以下にあげる事柄については最低限知っておくべきだろう。
1.2
基本概念
ところで、いちど典型的なコンピュータと親しみ、それについての理解を充分に深めると、別のコンピュー
タを利用するときの敷居は驚くほど低い。本質的なことは、《コンピュータについての概念形成》なのであ
る。つまり、
1. 機能
コンピュータには何ができるのか?あるいは、何ができないのか?
2. 命令
プログラムを作成するにはどうしたらよいか?
8
第1章
コンピュータの使い方
3. 実行
プログラムを実行するにはどうしたらよいか?
4. データ
入出力データの取り扱いはどうしたらよいか?
5. 結果
計算結果(数値、グラフ)の出力(印刷や表示)はどうしたらよいか?
などについての基本的概念(イメージ)を確立することである。それが確立していれば、どのようなコン
ピュータにもかんたんにアプローチできる。
要点を図式化すると下図のようになる。
コンピュータ
Computer
コマンド群
エディタ
コンパイラ
文書作成ツール
画像編集
ブラウザー
ファイル
File System
入出力
Input/Output
プログラム
データ
テキスト
ディスプレイ
プリンタ
利用者
User
コマンド
プログラム言語
エディタ使用法
文書作成言語
1.3
ユーザ識別コードとパスワード
コンピュータの利用者はセンターに登録して自分のアカウント(銀行の口座に相当)を開設する必要が
ある。そのとき、使用ディスク・ファイル容量とコンピュータ使用料金(コンピュータはただでは使えな
い!)の上限を決める。アカウントには、
1. ユーザ識別コード (uid)
1.4. ログインとログアウト
9
2. パスワード (password)
が割当てられる。コンピュータを利用する前にはこれらを正しくコンピュータに入力する必要がある。煩雑
だが、このような手続きによってコンピュータ内部のいろいろな情報の機密保護がなされている。
この授業では各個人に専用のアカウントを用意して使用する。各アカウントの uid と password ついては
授業のはじめに割当て、それを一貫して使用することになる。とくに、password の取り扱いについては注
意が必要である。(詳しくは授業で述べる。)
1.4
ログインとログアウト
コンピュータを使う時の最も基本的な命令がログインとログアウトである。人間にたとえると、
『今日は』
と『さようなら』である。この命令を抜きにしてコンピュータと対話することはできない。
1.4.1
ログイン (login)
コンピュータに向かって『今日は』と挨拶する命令。通常、UNIX マシンでは画面に
login:
password:
と表示されているので、ここに自分のアカウントの uid と password を入力する。学情センターの場合、端
末装置の電源スイッチを入れると学習支援システムが立ち上がるのでそちらにまかせることになる。詳し
くは、学習支援システムのマニュアルを参照せよ。
1.4.2
ログアウト (logout)
コンピュータに向かって『さようなら』と挨拶する命令。このときは、uid や password は入力しなくて
よい。一般には、logout コマンドまたは exit コマンドを使う。学情センターの場合、学習支援システムの
メニューから『終了』を選択することによっておこなう。詳しくは、学習支援システムのマニュアルを参照
せよ。
1.5
UNIX コマンド
この授業では、UNIX コマンドを直接利用してプログラムの作成、プログラムのコンパイル、プログラム
の実行、結果の表示、結果の印刷などの一連の操作を行なう。主な UNIX コマンドについては、1.7.2 で例
をあげる。
1.6
ファイル
コンピュータを使って仕事をするとき、必要なプログラムやデータをファイルに格納する。ファイルにつ
いてのいろいろな操作(必要に応じて学習)は対応するいろいろな UNIX コマンドによって行なう。よく
行なうファイル操作としては、
1. ファイルの作成
2. ファイルの削除
3. ファイル名の変更
10
第1章
コンピュータの使い方
4. ファイルの複写
5. ファイルへの入出力の割当て
6. ファイル名一覧の表示・印刷
7. ファイル内容の表示・印刷
などがある。
1.6.1
ファイル名について
ファイルはファイル名によって区別される。便宜上、ファイル名にはピリオド (.) を挟んだ2つの文字列
の組、すなわち’filename.ext’ という形式が使われる。特に、filename をファイルの識別子、ext を拡張子と
して考えるとよいだろう。ファイルの識別子は自由に選んでよい。一方、拡張子はファイルの種類を示すた
めに用いられる。すなわち、そのファイルがどういう情報を持ったファイルであるかをあらかじめ示してい
る。たとえば、
f
c
:
:
Fortran77 のソースプログラム
C のソースプログラム
cpp
pl
:
:
C++のソースプログラム
Perl のスクリプト
d
ps
:
:
データ
pdf
:
Pdf 形式画像ファイル
tex
tar
:
:
LaTeX 文書ファイル
圧縮ファイル
Postscript 形式画像ファイル
などが使われる。
1.7
ファイルの編集
エディタは、おそらく、いちばん頻繁に使われるプログラムである。コンピュータを使って何かの計算を
するとき、利用者はコンピュータとの対話時間の大部分をエディタを使ったいろいろな作業(プログラムの
作成、変更、保存、検索、実行、等)に費すだろう。したがって、コンピュータ利用者はコマンドについて
よく知っていなければならない。これを知らないと、プログラムやデータをコンピュータに入力することが
出来ない。多くの場合、vi コマンドや mule コマンドなどが使われる。
1.7.1
vi コマンド
vi コマンドにより、vi エディタが起動される。vi エディタは UNIX マシンでは最も標準的なエディタで
ある。以下に簡単な使用法を述べる。
1. 起動(たとえば、ファイル sin.f を編集するとき)
%vi sin.f Enter
2. 終了
Esc +Z+Z
分からなくなったら、 Esc を押す!
3. 2つの動作モード
1) コマンド・モード
1.7. ファイルの編集
11
2) 挿入モード
起動直後はコマンド・モードになっている!
4. カーソルの移動(コマンド・モード)
h
:
左移動
j
k
:
:
下移動
l
:
右移動
上移動
5. 編集の手順
(a) コマンド・モードに切替える。
Esc
(b) カーソルを入力を行なうところまで移動する。
h,j,k または l
(c) 挿入モードに切替える。
i または a
* i はカーソルの前、a はカーソルの後へ挿入
(d) テキストを入力する。
(e) (入力が終ったら)コマンド・モードに切替える。
Esc
6. 編集しているファイルの中の文字列の検索と置換
(コマンド・モードで行なう)
(a) 検索(例えば、文字列’alpha’ を)
• カーソル位置から末尾へ向かって検索
: /alpha Enter
• カーソル位置から先頭へ向かって検索
: ?alpha Enter
(b) 置換(例えば、文字列’alpha’ を文字列’beta’ に)
• テキスト中の全文字列を置換
: s/alpha/beta/g Enter
7. 編集しているファイルの中の文字(列)のカット、ペースト、操作の取消
(コマンド・モードで行なう)
(a) 文字(列)のカット
• カーソル以降の n 文字をカット
nx
• カーソルのある行をカット
dd
• カーソルのある行以降の n 行をカット
ndd
• カーソルのある行をコピー
yy
• カーソルのある行以降の n 行をコピー
nyy
(b) カット(コピー)した文字(列)のペースト
12
第1章
コンピュータの使い方
• カーソルの直後にペースト
p
• カーソルの直前にペースト
P
(c) 操作の取消
• 直前の操作の取消
u
カットした内容はバッファに保存され、任意の場所にペースト出来る。
8. 編集しているファイルの保存(コマンド・モードで行なう)
: w sin.f Enter
または
: w Enter
*ファイル名を指定すると、任意のファイルに保存出来る。
9. 既存ファイルからの読み込み(コマンド・モードで行なう)
: r sin.f Enter
10. 編集しているファイルを保存して終了(コマンド・モードで行なう)
: wq Enter
11. 強制終了(コマンド・モードで行なう)
: q! Enter
1.7.2
ファイルの操作
ファイルの操作を行なうには、UNIX 計算機のファイルシステムをよく理解していることが肝心である。
UNIX 計算機のファイルシステムはルートディレクトリー/を根とする一本の木構造をとっている。そして、
それぞれの分岐ごとに1つの独立した階層を構成している。それぞれの階層はディレクトリーとファイルか
ら成り、ディレクトリーはさらに次の階層へと分岐している。UNIX 計算機におけるディレクトリーの表記
ルール、ディレクトリーの操作によく使われる UNIX コマンド、ファイルの表記ルールおよびファイルの
操作によく使われる UNIX コマンドについての簡単な使用法を以下に述べる。
1. ディレクトリーの表記ルール
• フルネーム: /home/taroh/Sim/MC
• 相対ネーム: ./Sim/MC
• 便利な省略記号
ホームディレクトリー: ∼
ワーキングディレクトリー: .
ペアレントディレクトリー: ..
2. ワーキングディレクトリーの表示
% pwd Enter
3. ディレクトリー内容の一覧
1.7. ファイルの編集
13
• フルネーム
% ls /home/taroh/Sim/MC Enter
• 相対ネーム
% ls ./Sim/MC Enter
• ワーキングディレクトリー
% ls . Enter
• 詳細な表示
% ls -l /home/taroh/Sim/MC Enter
• その他
% ls -a /home/taroh/Sim/MC Enter
4. ディレクトリーの変更
% cd ./Sim/MC Enter
% cd /home/taroh/Sim/MC Enter
% cd .. Enter
% cd ∼ Enter
5. ディレクトリーの作成
% mkdir ./Comp Enter
6. ディレクトリーの削除
% rmdir ./Comp Enter
7. ファイルの表記ルール
• フルネーム: /home/taroh/Sim/MC/prog.f
• 相対ネーム: ./Sim/MC/prog.f
8. ファイル内容の一覧
• フルネーム
% less /home/taroh/Sim/MC/prog.f Enter
• 相対ネーム
% less ./Sim/MC/prog.f Enter
• ワーキングディレクトリー
% less ./prog.f Enter
* less コマンドと同じような UNIX コマンドとして、more コマンドや cat コマンドもよく利用される。
9. ファイルのコピー
% cp ./graph.f ./sin.f Enter
10. ファイルの移動
% mv ./fort.1 ./func.d Enter
11. ファイルの削除
% rm ./test.f Enter
補注)たいていの場合、ワーキングディレクトリーを示す./は省略できる。
14
1.8
第1章
コンピュータの使い方
プログラムのコンパイルと実行
プログラムのコンパイルや実行は、使用するプログラム言語に応じて、専用の UNIX コマンドを使う。こ
の授業ではプログラム言語として Fortran77 を採用しているので、それに準拠して説明する。
Fortran77 のソースプログラムをそのままコンピュータで実行することはできない。そのためには、ソー
スプログラムを実行プログラムへと変換してやることが必要となる。f77 コマンドはコンパイラと呼ばれる
変換ソフトウェアを起動する UNIX コマンドである。具体的な手順は以下のようになる。
手順1 vi エディタあるいは mule エディタなどを使って Fortran77 のソースプログラムを作成する。
手順2 Fortran77 のコンパイラを起動して作成したプログラムの翻訳を行ない、タイプ間違いや文法エラー
をチェックする。プログラムの翻訳を行なうには
%f77 main.f Enter
とする。この例では、メインプログラム main.f を翻訳し、タイプ間違いや文法エラーをチェックして
いる。エラーメッセージが表示されたなら、行番号などをみてエラーのある箇所とエラーの原因を特
定し、プログラムの修正をした上で、再度コンパイルを行なう。
手順3 利用するサブルーチン(群)を含めて、全プログラムの翻訳と結合編集(リンクエディット)を行
ない、実行プログラムを生成する。具体的には、
%f77 -o main main.f sub.f Enter
とする。コマンドオプション-o main は生成される実行プログラムの名前を main として指定してい
る。-o (ファイル名) を指定しないとき、実行プログラムは a.out となる。また、sub.f は利用するサ
ブルーチン(群)である。もし、エラーメッセージが表示されたら、エラーの原因を特定し(多くの
場合、サブルーチン名や関数名のタイプミス)、プログラムの修正をした上で、再度コンパイルを行
なう。
手順4 実行プログラム名を UNIX コマンドとして、コマンドを入力してプログラムを実行する。具体的に
は、
%./main Enter
とする。もし、エラーメッセージが表示されたり、計算結果が間違っていた場合、ソースプログラム
をもう一度丹念に読み直し、配列の使い方のルール違反や計算アルゴリズムの誤りなどをチェックし、
誤りを訂正して再度コンパイルおよび実行を行なう。実行結果は、画面上に表示される。画面上では
なく、ファイルに出力するときは、
%./main > out.dat Enter
とすると、out.dat の中に出力結果が保存される。(指定する出力ファイルは、新規ファイルとする。)
手順5 図を描く場合、描画用データは fort.1 に保存される。
%less fort.1 Enter
とすると、fort.1 の内容を画面に表示できる。描画はグラフィックサーバーを起動し、その中で、fort.1
ファイルを読み込むことで行う。詳細は、授業内で説明する。
15
第 2 章 グラフィックス入門
コンピュータを使って計算をするとき、計算途中の様子や計算結果を見ながらパラメータをかえてくりか
えし計算をすすめてゆく場合がよくある。このようなとき、計算途中の様子や計算結果を数値データとし
て出力(印刷・表示)したものを見ながら計算をすすめるのでは、極めて能率が悪くなる。グラフィックス
はそのようなやり方にかわる出力方法として大きな意義を持つ。つまり、出力情報を図形として表示した
り、グラフとして表示することによって、単なる数値の列を出力する場合とはくらべものにならない情報伝
達能力をコンピュータに与えることになるのである。この授業でもグラフィックスを大いに活用することに
なる。
2.1
グラフィックスの取り扱い
授業で使う UNIX コンピュータには、汎用グラフィックス・ソフトウエアである X-Window サーバーが備
わっている。また、端末装置は X-Window クライアント機能を持っている。したがって、授業では X-Window
に基づいてグラフィックスを行う。しかしながら、X-Window を利用して直接にグラフィックスを行うこと
は、ある程度の熟練が必要なので、初心者には不向きである。なんらかの別の方法でこれを利用する必要が
ある。そこで、もうすこし簡単なサービスプログラムを介在させ、グラフィックスの便宜をはかることにし
た。具体的には、次の2段階に分けて処理を行う。
第 1 段階 プログラムを実行し、グラフィック情報(点や線を描く命令の集り)をファイルに出力する。
WRITE(1,xxxx) 文を使用する 第 2 段階 サービスプログラム xg.tcl を起動し、出力ファイルからグラフィック情報を読み取って画面上に
絵を描く。また、必要に応じて、プリンターに画面のハードコピーを出力する。
グラフィック情報は、適当な中間言語によって記述することにする。ここではNEC社のパソコン PC98
シリーズの Basic 言語に類似(同じではない!)のものを使う。
2.2
SCREEN 文
グラフィックスの開始
END 文
グラフィックスの終了
CLS 文 画面の消去
PSET 文 画面上に点を打つ
LINE 文 画面上の 2 点間に直線を引く
CIRCLE 文
画面上に円を描く
PAINT 文
LINE 文および CIRCLE 文における塗りつぶし機能の制御
LOCATE 文
カーソル位置を移動する
PRINT 文 文字を画面上に描く
中間言語
中間言語としてはなにをとってもよいのだが、ここでは一般になじみのあるNEC社のパソコン PC98 シ
リーズの Basic 言語に類似のものを使う。ただし、PC98 のグラフィック命令のうち表に挙げたものに限っ
16
第 2 章 グラフィックス入門
て実行することとし、他の命令は無視する。
2.2.1
SCREEN 文
描画する Window を開いてグラフィックスを開始する。
SCREEN 2,1
とすることにより、解像度が(横700 × 縦400)ドットの高分解能カラーグラフィックモードとなる。
その他にも、種々の画面モードが可能である。カラーグラフィックスを行なうとき、描画している Window
上の座標と色の指定は次のようになっている。
W indow 上の座標 座標は、描画している Window 上のドットと1対1対応している。座標系は左手系に
なっていて、描画している Window の左上隅を座標原点としている。例えば、解像度が(横700 ×
縦400)ドットの Window の場合、横方向が左から右へ0∼699、縦方向が上から下へ0∼39
9の値をとる。
色の指定 描画する図形や文字のは色(8種類)は0∼7の色番号によって次のように 指定できる。
2.2.2
番号
色
0
黒
1
青
2
赤
3
紫
4
緑
5
水
6
黄
7
白
END 文
グラフィックスを終了する。
END
とすることにより、グラフィックデータの読み込みを止め、グラフィックスを終了する。
2.2.3
CLS 文
グラフィックスの消去を行う。
CLS
とすることにより、描画している Window 上のグラフィックスが消去される。
2.2.4
PSET 文
描画している Window 上に指定された色の点をプロットする。
PSET (100,100),2
とすることにより、描画している Window 上の座標 (100,100) に赤色(色番号2)の点がプロットされる。
2.3. 研究課題 -sin 関数-
2.2.5
LINE 文
画面上の2点間に指定された色の直線を引く。
LINE (0,0)-(100,100),5
とすることにより、座標 (0,0) と座標 (100,100) とを結ぶ直線を水色(色番号5)で引く。
2.2.6
CIRCLE 文
画面上に指定された半径および色の円を描く。
CIRCLE (200,200),50,6
とすることにより、中心の座標が (200,200) で半径 50 の黄色(色番号6)の円が描かれる。
2.2.7
PAINT 文
LINE 文および CIRCLE 文における塗りつぶし機能の制御を行なう。
PAINT 1
とすることにより、塗りつぶし機能を可能にし、
PAINT 0
とすることにより、塗りつぶし機能を抑制する。
2.2.8
LOCATE 文
画面上の指定された点へ文字カーソルを移動する。
LOCATE (200,200)
とすることにより、文字カーソルの左上隅の位置を (200,200) に移動できる。
2.2.9
PRINT 文
現在の文字カーソルの位置に指定された文字を描く。
PRINT ”TEST”
とすることにより、現在の文字カーソルの位置に文字『TEST』を描く。
2.3
研究課題 -sin 関数関数 sin θ のグラフを描け。
2.4
2.4.1
C
C
C
C
グラフィック・サブルーチン
graphics.f[基本]
Subroutines for Graphics:
PC98Basic-like Command Set
[Chapter 2]
17
18
第 2 章 グラフィックス入門
SUBROUTINE GRINIT
C>>>>>INITIALIZATION
WRITE(1,1000) ’SCREEN 2,1’
1000 FORMAT(A10)
RETURN
END
SUBROUTINE GREND
C>>>>>END GRAPGH
WRITE(1,1000)
’END’
1000 FORMAT(A3)
RETURN
END
SUBROUTINE SETCRS(XC,YC)
C>>>>>SET CURSOR ON (XC,YC)
WRITE(1,1000) ’LOCATE ’,XC,YC
1000 FORMAT(A7,F5.0,1H,,F5.0)
RETURN
END
SUBROUTINE PRTCHR(CHR,NC)
CHARACTER*1 CHR(NC)
C>>>>>PRINT CHARACTERS AT (XC,YC)
WRITE(1,1000) ’PRINT "’,(CHR(I),I=1,NC),’"’
1000 FORMAT(A7,80A1)
RETURN
END
SUBROUTINE LINE(XS,YS,XE,YE,IC)
C>>>>>DRAW LINE BETWEEN (XS,YS) AND (XE,YE) WITH COLOR(I)
WRITE(1,1000) ’LINE ’,XS,YS,XE,YE,IC
1000 FORMAT(A5,1H(,F5.0,1H,,F5.0,3H)-(,F5.0,1H,,F5.0,2H),,i1)
RETURN
END
SUBROUTINE CIRCLE(X,Y,R,IC,AS,AE)
C>>>>>DRAW CIRCLE AT (X,Y) WITH COLOR(IC)
C
R:RADIUS
AS,AE:RANGE OF ARC(IN RAD.)
WRITE(1,1000) ’CIRCLE (’,X,Y,R,IC,AS,AE
1000 FORMAT(A8,F5.0,1H,,F5.0,2H),,F5.0,1H,,I1,1H,,F7.4,1h,,f7.4)
RETURN
END
SUBROUTINE DRWAXS(SCALE,NAME,ICOLOR)
DIMENSION SCALE(3,2)
CHARACTER*8 NAME(2)
CHARACTER*7 CHAR7
CHARACTER*3 CHAR3
DATA XS/80./,YS/50./,XL/500./,YL/300./
C>>>>>DRAW X-AXIS
2.4. グラフィック・サブルーチン
XE=XS+XL
YE=YS+YL
CALL LINE(XS,YS,XE,YS,ICOLOR)
CALL LINE(XS,YE,XE,YE,ICOLOR)
XORGN=SCALE(1,1)
XMAGN=SCALE(2,1)
XDISP=SCALE(3,1)
NCRSL=IFIX(ABS(XL)/XDISP)+1
XMAX =AMAX1(XORGN,XORGN+XMAGN*FLOAT(NCRSL-1))
XMIN =AMIN1(XORGN,XORGN+XMAGN*FLOAT(NCRSL-1))
AXMAX=AMAX1(ABS(XMAX),ABS(XMIN))
NEXPX=IFIX(ALOG10(AXMAX))+1
RAT=.1**NEXPX
DO 10 I=1,NCRSL
XP=XS+XDISP*FLOAT(I-1)
IF(MOD(I,5).EQ.1) THEN
CALL LINE(XP,YS+3,XP,YS-3,ICOLOR)
CALL LINE(XP,YE+3,XP,YE-3,ICOLOR)
XVAL=RAT*(XORGN+XMAGN*FLOAT(I-1))
IF(XVAL.LT.0.) THEN
WRITE(CHAR7,’(F7.4)’) XVAL
ELSE
WRITE(CHAR7,’(1H+,F6.4)’) XVAL
ENDIF
CALL SETCRS(XP-25,YE+5)
CALL PRTCHR(CHAR7,7)
ELSE
CALL LINE(XP,YS+1,XP,YS-1,ICOLOR)
CALL LINE(XP,YE+1,XP,YE-1,ICOLOR)
ENDIF
10 CONTINUE
WRITE(CHAR3,’(I3)’) NEXPX
CALL SETCRS(XE+5,YE-12)
CALL PRTCHR(’X10’,3)
CALL SETCRS(XE+35,YE-18)
CALL PRTCHR(CHAR3,3)
C>>>>>DRAW Y-AXIS
CALL LINE(XS,YS,XS,YE,ICOLOR)
CALL LINE(XE,YS,XE,YE,ICOLOR)
YORGN=SCALE(1,2)
YMAGN=SCALE(2,2)
YDISP=SCALE(3,2)
NCRSL=IFIX(ABS(YL)/YDISP)+1
YMAX =AMAX1(YORGN,YORGN+YMAGN*FLOAT(NCRSL-1))
YMIN =AMIN1(YORGN,YORGN+YMAGN*FLOAT(NCRSL-1))
19
20
第 2 章 グラフィックス入門
AYMAX=AMAX1(ABS(YMAX),ABS(YMIN))
NEXPY=IFIX(ALOG10(AYMAX))+1
RAT=.1**NEXPY
DO 20 I=1,NCRSL
YP=YE-YDISP*FLOAT(I-1)
IF(MOD(I,5).EQ.1) THEN
CALL LINE(XE+3,YP,XE-3,YP,ICOLOR)
CALL LINE(XS+3,YP,XS-3,YP,ICOLOR)
YVAL=RAT*(YORGN+YMAGN*FLOAT(I-1))
IF(YVAL.LT.0.) THEN
WRITE(CHAR7,’(F7.4)’) YVAL
ELSE
WRITE(CHAR7,’(1H+,F6.4)’) YVAL
ENDIF
CALL SETCRS(XS-70,YP-14)
CALL PRTCHR(CHAR7,7)
ELSE
CALL LINE(XE+1,YP,XE-1,YP,ICOLOR)
CALL LINE(XS+1,YP,XS-1,YP,ICOLOR)
ENDIF
20 CONTINUE
WRITE(CHAR3,’(I3)’) NEXPY
CALL SETCRS(XS-30,YS-29)
CALL PRTCHR(’X10’,3)
CALL SETCRS(XS,YS-35)
CALL PRTCHR(CHAR3,3)
C>>>>>WRITE TITLES
CALL SETCRS(XS+XL/2-50,YE+30)
CALL PRTCHR(NAME(1),8)
CALL SETCRS(XS-50,YS-48)
CALL PRTCHR(NAME(2),8)
RETURN
END
SUBROUTINE DRWGRA(X,Y,NPNT,SCALE,ICOLOR)
DIMENSION X(NPNT),Y(NPNT)
DIMENSION SCALE(3,2)
DATA XS/80./,YS/350./
XORGN=SCALE(1,1)
XMAGN=SCALE(2,1)
XDISP=SCALE(3,1)
FX= XDISP/XMAGN
YORGN=SCALE(1,2)
YMAGN=SCALE(2,2)
YDISP=SCALE(3,2)
FY=-YDISP/YMAGN
2.4. グラフィック・サブルーチン
XP=FX*(X(1)-XORGN)+XS
YP=FY*(Y(1)-YORGN)+YS
CALL CIRCLE(XP,YP,2.,ICOLOR,0.,0.)
DO 10 I=2,NPNT
XI=FX*(X(I)-XORGN)+XS
YI=FY*(Y(I)-YORGN)+YS
CALL LINE(XP,YP,XI,YI,ICOLOR)
XP=XI
YP=YI
CALL CIRCLE(XP,YP,2.,ICOLOR,0.,0.)
10 CONTINUE
RETURN
END
2.4.2
C
C
C
window.f[仮想座標系]
Subroutines for Virtual Window:
Managing a Virtual Coordinate System
[Chapter 2]
C
SUBROUTINE GRINIT
SUBROUTINE V_WIND(V_X0,V_Y0,V_X1,V_Y1)
DATA G_XS/80./,G_YS/50./,G_XL/500./,G_YL/300./
V_XORG=V_X0
V_YORG=V_Y0
SCAL_X=G_XL/(V_X1-V_X0)
SCAL_Y=G_YL/(V_Y1-V_Y0)
IF(SCAL_X.GT.SCAL_Y) THEN
RATIO =1./SCAL_X
V_YORG=(V_Y1+V_Y0)/2.-RATIO*G_YL/2.
SCAL_Y=SCAL_X
ELSE
RATIO =1./SCAL_Y
V_XORG=(V_X1+V_X0)/2.-RATIO*G_XL/2.
SCAL_X=SCAL_Y
ENDIF
SCAL_Y=-SCAL_Y
OFFS_X= G_XS
OFFS_Y= G_YS+G_YL
RETURN
ENTRY V_LINE(V_XS,V_YS,V_XE,V_YE,IC)
XS=OFFS_X+SCAL_X*(V_XS-V_XORG)
YS=OFFS_Y+SCAL_Y*(V_YS-V_YORG)
XE=OFFS_X+SCAL_X*(V_XE-V_XORG)
21
22
第 2 章 グラフィックス入門
YE=OFFS_Y+SCAL_Y*(V_YE-V_YORG)
CALL LINE(XS,YS,XE,YE,IC)
RETURN
ENTRY V_CIRC(V_X,V_Y,V_R,IC,AS,AE)
X=OFFS_X+SCAL_X*(V_X-V_XORG)
Y=OFFS_Y+SCAL_Y*(V_Y-V_YORG)
R=2*SCAL_X*V_R
CALL CIRCLE(X,Y,R,IC,AS,AE)
RETURN
END
SUBROUTINE GRINIT
C
Begin graphics
WRITE(1,1000) ’SCREEN 2,1’
1000 FORMAT(A10)
RETURN
END
C
SUBROUTINE GREND
End graphics
WRITE(1,1000)
1000 FORMAT(A3)
’END’
RETURN
END
C
SUBROUTINE SETCRS(XC,YC)
Set cursor on (XC,YC)
WRITE(1,1000) ’LOCATE ’,XC,YC
1000 FORMAT(A7,F5.0,1H,,F5.0)
RETURN
END
C
SUBROUTINE PRTCHR(CHR,NC)
Print characters at (XC,YC)
CHARACTER*1 CHR(100)
WRITE(1,1000) ’PRINT "’,(CHR(I),I=1,NC),’"’
1000 FORMAT(A7,80A1)
RETURN
END
C
SUBROUTINE LINE(XS,YS,XE,YE,IC)
Draw line between (XS,YS) and (XE,YE) with color IC
WRITE(1,1000) ’LINE ’,XS,YS,XE,YE,IC
1000 FORMAT(A5,1H(,F5.0,1H,,F5.0,3H)-(,F5.0,1H,,F5.0,2H),,i1)
RETURN
END
C
C
SUBROUTINE CIRCLE(X,Y,R,IC,AS,AE)
Draw circle at (X,Y)
with color IC, radius R and range of arc [AS:AE](in rad.)
WRITE(1,1000) ’CIRCLE ’,X,Y,R,IC,AS,AE
2.4. グラフィック・サブルーチン
23
1000 FORMAT(A7,1H(,F5.0,1H,,F5.0,2H),,F5.0,1H,,I1,1H,,F7.4,1h,,f7.4)
RETURN
END
C
C
C
SUBROUTINE PAINTF(IP)
Set <switch to fill> on
if IP=1
off if IP=0
**effective only for circle
WRITE(1,1000) ’PAINT ’,IP
1000 FORMAT(A6,1H ,I1)
RETURN
END
25
第 3 章 ヒストグラミング
コンピュータによって生成された計算結果は、
1. 直接数字として読めばわかるもの
2. 図形として表示しなければならないもの
3. グラフとして表示しなければならないもの
4. ヒストグラム(度数分布図)として表示しなければならないもの
など、多種多様にわたっている。これらは、それぞれ『どのようにしたら人間にとってわかりやすくなる
か』ということにたいする一つの工夫のあらわれである。ここでは、たくさんの計算結果やデータを統計的
に処理して考えるときに最も有用な手法の一つとして、ヒストグラム(度数分布図)の作りかたについて学
習する。
3.1
1次元ヒストグラム
1次元ヒストグラムは、与えられた区間 (xmin , xmax ) を nbin 等分に分割して nbin 個の小区間 {(xi−1 , xi ) :
i = 1, 2, ..., nbin } を作り、与えられた n 個のデータ {Xj : j = 1, 2, ..., n} についてどの小区間に属するかを
調べ、その度数分布を図示したものである。したがって、ヒストグラムを作る手続きは次の3つの段階に分
けられる。
1. 初期化
2. ヒストグラミング
3. 出力
3.1.1
初期化
どのようなヒストグラムを作るのかを決めて初期化をおこなう。具体的には、
1. 区間 (xmin , xmax ) の大きさ
2. 分割数 nbin の大きさ
3. ヒストグラムの名称
などを決めた上で、小区間を設定するとともに各小区間に対応する度数を蓄えておくための配列 {H(i) :
i = 1, 2, ..., nbin} を 0 に初期設定する。このとき、参考のために区間 (−∞, xmin ) に属するもの、区間
(xmin , xmax ) に属するもの、および区間 (xmax , +∞) に属するものについても配列 {S(k) : k = 1, 2, 3} を
用意して統計をとると役にたつ。
3.1.2
ヒストグラミング
与えられたデータ Xj に対してどの小区間に属するかを調べ、対応する配列 H(i) および S(k) の値(度
数)を 1 増やす。
26
3.1.3
第 3 章 ヒストグラミング
出力
配列 {H(i) : i = 1, 2, ..., nbin } や配列 {S(k) : k = 1, 2, 3} をに蓄えられている度数分布をヒストグラムと
してプリンターに印刷したり、画面上に表示する。
3.2
アルゴリズム
ヒストグラムを作るプログラムはいろいろな場面でよく使われるのでサブルーチンとして作成しておく
とよい。一般に段階 1 まで含んだサブルーチンがよく使用される。しかし、無用な複雑さが生じるのを避
けるため、ここでは段階 1 についてはサブルーチンでは行わないことにする。むしろ、メイン・プログラ
ムで管理することにする。
さて、どのようにして実際のプログラムを考えていったらよいだろうか。問題点をしぼってみると、
1. 必要なデータ構造(数値変数、配列)はなにか?
2. プログラムの制御(初期化/ヒストグラミング/印刷)をどうするか?
3. ヒストグラミングのアルゴリズムはどうするか?
4. 印刷のしかたをどうするか?
があげられる。そこで、次にこれらを順次考察してゆく。
3.2.1
必要なデータ構造
必要なデータ構造としては
【数値変数】
【配列】
xmin
区間の下限値
xmax
区間の上限値
wbin
小区間の巾
nbin
区間の分割数
Xj
データ
s
スイッチ
{H(i) : i = 1, 2, ..., nbin }
各小区間の度数
{S(k) : k = 1, 2, 3}
統計
が必要である。さらに、これらはすべてメインルーチンから引数として与えられることになる。各項の意味
については自明であろう。数値変数 s の意味については以下に述べる。
3.2.2
プログラムの制御
つぎに、プログラムの制御については、『1つのサブルーチンで 2 ∼ 3 の段階をどのように識別して制
御するか』ということが問題である。前出の数値変数 s がこのためのスイッチとして使われる。すなわち、
というように使い分けるのである。
s=0
印刷
s=1
ヒストグラミング
3.3. 研究課題 -1次元ヒストグラム-
3.2.3
27
ヒストグラミング
ヒストグラムを作るアルゴリズムは、基本的には、各小区間 {(xi−1 , xi ) : i = 1, 2, ..., n} についてデータ
Xj がそこに含まれるかどうかを逐次調べて行けばよい。しかし、この方法だと計算時間がかかるので、た
とえば、次のようなやりかたで能率を上げる。
step1 Xj の値をチェック
• Xj < xmin のとき、S(1) + 1 −→ S(1)
終了
• Xj ≥ xmax のとき、S(3) + 1 −→ S(3)
終了
• xmin ≤ Xj < xmax のとき、S(2) + 1 −→ S(2)
step2 へ
step2 ヒストグラムに加える
• Xj <
xmin +xmax
2
のとき、is = 1
• Xj ≥
xmin +xmax
2
のとき、is =
nbin
2
+1
• 各小区間 {(xi−1 , xi ) : i = is , is +1, ..., is + nbin
2 −1} につ
いてデータ Xj がそこに含まれるかどうかを逐次調べて、
もし第 i 番目の区間に含まれるときは、H(i)+1 −→ H(i)
3.2.4
出力
印刷は、プリンターまたは画面に、文字を使って棒グラフ形式で出力するのが普通である。見やすいよう
に印刷するには、レイアウトについてよく検討する必要がある。たとえば、図のようなのはどうだろうか。
この出力レイアウトのなかで比較的に難しいと思われるものは度数分布図のプロットだろう。この例では、
1文字の文字変数の配列 {I(i) : i = 1, 2, ..., 51} を利用している。まず、各小区間 {(xi−1 , xi ) : i = 1, 2, ...nbin }
の度数 {H(i) : i = 1, 2, ...nbin } をしらべ、印刷面からはみだすものがないよう適当に再規格化する。これ
によって、縦軸(度数をあらわす軸)のスケールがきまる。つぎに、それぞれの H(i) を順次調べていって
その度数に相当する縦軸位置(50 分割して離散化)i を計算する。 最後に、I(i ) = ∗ としてから配列
{I(i) : i = 1, 2, ..., 51} をいっぺんに印刷する。尚、配列 {I(i) : i = 1, 2, ..., 51} には、その他の必要な文字
(’+ ’ や ’- ’)を前もって設定しておく必要がある。
問 3.1 上の方法でヒストグラムを作る場合、逐次調べるやりかたにくらべて、どこでどのように能率をあ
げているか考察せよ。
問 3.2 もっと能率をあげる方法はあるか考察せよ。
3.3
研究課題 -1次元ヒストグラム1次元ヒストグラムを作るサブルーチン HBOOK を作成せよ。ま
た、適当なデータをヒストグラムしてみよ。データとしては一様分
布や三角分布などをためしてみよ。
28
第 3 章 ヒストグラミング
VARIABLE
CONTENTS
GRAPH OF DISTRIBUTION
0
500
1000
1500
2000
2500
+----+----+----+----+----+----+----+----+----+----+
*
|
|
|
|
|
|
|
|
|
+
*
|
|
|
|
|
|
|
|
|
+
+*
|
|
|
|
|
|
|
|
|
+
+ * |
|
|
|
|
|
|
|
|
+
+----|-*--|----|----|----|----|----|----|----|----+
+
|
| * |
|
|
|
|
|
|
+
+
|
|
| * |
|
|
|
|
|
+
+
|
|
|
| * |
|
|
|
|
+
+
|
|
|
|
*|
|
|
|
|
+
+----|----|----|----|--*-|----|----|----|----|----+
+
|
|
|
|*
|
|
|
|
|
+
+
|
|
|
*|
|
|
|
|
|
+
+
|
|
*|
|
|
|
|
|
|
+
+
|
*
|
|
|
|
|
|
|
+
+----|--*-|----|----|----|----|----|----|----|----+
+
|*
|
|
|
|
|
|
|
|
+
+
*|
|
|
|
|
|
|
|
|
+
+ * |
|
|
|
|
|
|
|
|
+
+ * |
|
|
|
|
|
|
|
|
+
+*---|----|----|----|----|----|----|----|----|----+
+*
|
|
|
|
|
|
|
|
|
+
+*
|
|
|
|
|
|
|
|
|
+
*
|
|
|
|
|
|
|
|
|
+
*
|
|
|
|
|
|
|
|
|
+
*----|----|----|----|----|----|----|----|----|----+
+----+----+----+----+----+----+----+----+----+----+
0.0000
0.0800
0
0.1600
0
0.2400
45
0.3200
136
0.4000
340
0.4800
648
0.5600
897
0.6400
1088
0.7200
1211
0.8000
1139
0.8800
1041
0.9600
944
1.0400
705
1.1200
510
1.2000
389
1.2800
283
1.3600
211
1.4400
128
1.5200
83
1.6000
70
1.6800
44
1.7600
25
1.8400
19
1.9200
14
2.0000
11
2.0800
* 0.1000e+02
<NUMBER OF ENTRIES> TOT:
10000.
|
|
UNDER RANGE | IN RANGE | OVER RANGE
0. |
9981. |
19.
3.4
hbook.f サブルーチン
SUBROUTINE HBOOK(X,HPAR,HARRAY,HSTAT,ISW)
C
C
C
X
HPAR(4)
C
C
C
C
1-----LOWER BOUNDARY 2-----UPPER BOUNDARY
3-----WIDTH OF BIN
4-----NUMBER OF BIN
HARRAY()
HSTAT(3)
C
C
C
C
: VARIABLE
: PARAMETERS FOR HISTOGRAMING
: ARRAY FOR HIST.
: STATISTICS
1-----UNDER RANGE
3-----OVER RANGE
ISW
: SWITCH(ISW)
CASE 1----- HIST
2-----IN RANGE
DEFAULT-----PRINT OUT
C
INTEGER
DIMENSION
ISW,HH(6)
HARRAY(1),HPAR(4),HSTAT(3)
CHARACTER*1 II/’+’/,IJ/’|’/,IH/’-’/,BLK/’ ’/,AST/’*’/
CHARACTER*1 IMAGE(51),PRESET
C
XMIN=HPAR(1)
XMAX=HPAR(2)
WBIN=HPAR(3)
NBIN=HPAR(4)
C
3.4. hbook.f サブルーチン
C...SWITCH?
C
IF(ISW.NE.1) GOTO 20
<ISW=1>
C
C
>>>>>HIST.
...UNDER RANGE
IF(X.LT.XMIN) THEN
HSTAT(1)=HSTAT(1)+1
C
RETURN
...OVER RANGE
ELSE IF(X.GE.XMAX) THEN
HSTAT(3)=HSTAT(3)+1
C
RETURN
...IN
RANGE
ELSE IF(X.GE.(XMAX+XMIN)/2.) THEN
J=NBIN/2+1
ELSE
J=1
ENDIF
C
C
BK =XMIN+J*WBIN
...LOOP:SEARCH FOR BINS
10 CONTINUE
...IN J’TH BIN?
IF(X.LT.BK) THEN
HARRAY(J)=HARRAY(J)+1.
HSTAT(2) =HSTAT(2) +1.
RETURN
C
ELSE
...OVER J’TH BIN
J
= J+1
BK = BK+WBIN
ENDIF
GOTO 10
C
C
C
>>>>>PRINT OUT
20 CONTINUE
...SEARCH FOR MAX.OF HARRAY()
HMAX = HARRAY(1)
DO 30 I=1,NBIN
HMAX = AMAX1(HARRAY(I),HMAX)
C
30 CONTINUE
...GET SCALING FACTOR
IHS = IFIX(ALOG10(HMAX))
IHB = IFIX(HMAX/(5.*(10**IHS)))+1
IHB = IHB*(10**IHS)
C
...HMAX<10
29
30
第 3 章 ヒストグラミング
IF(IHS.LT.1) THEN
FACT = 1.0
...1/5SCALE
C
ELSE IF(HMAX.LE.IHB) THEN
FACT = 0.2
C
...1/2SCALE
ELSE IF(HMAX.LE.(2.5*IHB)) THEN
FACT = 0.5
...FULL SCALE
C
ELSE
FACT = 1.0
ENDIF
...SET ADEQUATE SCALE
C
IHB = FACT*IHB
HMAX = 5.*IHB
DO 40
I=1,6
HH(I)=IHB*(I-1)
40 CONTINUE
SCALE = ALOG10(AMAX1(ABS(XMIN),ABS(XMAX)))
IF(SCALE.LT.0.) THEN
SCALE=IFIX(SCALE-0.5)
ELSE
SCALE=IFIX(SCALE+0.5)
ENDIF
DENOM = 10**SCALE
BK
= XMIN-WBIN
C
...PRINT HISTOGRAM
WRITE(6,610) HH
DO 70 I=1,NBIN+2
IF(I.EQ.1.OR.I.EQ.NBIN+2.OR.MOD(I-1,5).EQ.0.) THEN
PRESET = IH
ELSE
PRESET = BLK
ENDIF
DO 50 J=1,51
50
IMAGE(J)=PRESET
CONTINUE
IMAGE(1) =II
DO 60 K=6,50,5
IMAGE(K)=IJ
IF(I.EQ.1.OR.I.EQ.NBIN+2) IMAGE(K)=II
60
CONTINUE
IMAGE(51)=II
BK = BK+WBIN
IF(I.EQ.1.OR.I.EQ.NBIN+2) THEN
3.4. hbook.f サブルーチン
31
WRITE(6,630) BK/DENOM,IMAGE
ELSE
J = IFIX(50.0*HARRAY(I-1)/HMAX+1.5)
IMAGE(J) = AST
WRITE(6,620) BK/DENOM,IFIX(HARRAY(I-1)),IMAGE
ENDIF
70 CONTINUE
WRITE(6,640) DENOM
TOT = HSTAT(1)+HSTAT(2)+HSTAT(3)
WRITE(6,650) TOT,(HSTAT(I),I=1,3)
RETURN
610 FORMAT( 2X,’VARIABLE
+
20X,6(I5,5X))
CONTENTS
GRAPH OF DISTRIBUTION’,/
620 FORMAT( 2X,F7.4, 3X,I7, 5X,51A1)
630 FORMAT( 2X,F7.4,
15X,51A1)
640 FORMAT( 4X,’*’,E12.4)
650 FORMAT( 4X,’<NUMBER OF ENTRIES> TOT: ’,F8.0,/
+
4X,’
|
|
+
+
’/
4X,’UNDER RANGE | IN RANGE | OVER RANGE ’/
7X,
F8.0,’ | ’,F8.0,’ | ’,
F8.0)
END
33
第 4 章 乱数
『乱数』という言葉から何を思い浮かべるだろうか。ある人はスパイ映画にでてくる暗号解読用の乱数
表を、ある人は文字通りに『メチャクチャな数(?)』を思い浮かべるかもしれない。乱数のことを英語で
Random Number と言うが、一見邪魔な要素と考えられるデタラメ加減(Randomness)が確率現象のコン
ピュータによる数値実験などにおいて大変強力は武器となっていることをまず第1に認識すべきだろう。つ
まり、『デタラメは大いに役にたつ』のである。ここでは、乱数について以下の順序で学習を進める。
1. 乱数の定義、擬似乱数の定義および擬似乱数の生成。
2. 乱数の検定。
3. いろいろな分布にしたがう擬似乱数の生成。
4.1
乱数とは
サイコロを振って出た目の数を記録するとしよう。たとえば、そのようにして得られた数を4個ずつ束
ね、1 → 0, 2 → 1, ... 対応させることによって、4桁の6進数字 xi (≡ ○△□× : i = 1, 2, 3, ...) を作るとす
ると、そのような数の出現頻度は6進数 0000 と6進数 5555 の間にどのように分布するだろうか。さらに、
ある数 xi の出現とその直前の数 xi−1 のあいだには相関があるだろうか。『サイコロを振ってある目の数を
得る』ということが完全に偶発事象だとすると、出現頻度は一様になり、相関は全くなくなる。つまり、完
全にデタラメな数の集りをつくることができる。そのような数を乱数と呼び、それらを順次並べた集りを
乱数列という。
乱数列の生成法としては、上記の方法を含めて次のようなものがある。
1. 偶発的物理現象を利用するもの。
サイコロやルーレット;電子回路の雑音や放射性物質から放射される放射線などのランダム・ノイズ
2. 算術的演算によるもの。
超越数(π 、e、オイラー数、フィボナッチ数等)
;算術的アルゴリズム
1 は偶発事象をもとにしたもので完全な乱数列を生成できる。一方、2 は人為的にある定まった規則で計算
するもので、偶発事象ではないために完全な乱数列は生成できず、所謂『擬似乱数』列を生成する。コン
ピュータでいろいろな計算をする時に使われるのは、専らこの擬似乱数である。コンピュータにとっては
〈算術的演算で乱数が生成できる〉ことはこのうえもなく都合のよいことなのである。
問 4.1 1 の乱数列生成法についてランダム・ノイズを使うとすると、どのようにしたら乱数列を生成でき
るか考察せよ。
4.2
擬似乱数の生成
擬似乱数の生成法として、現在良く使われているのは混合合同法である。この方法では乱数列 {xn : n =
1, 2, 3, ...} を次の規則で生成する。
34
第4章
xn+1 ≡ axn + b
(mod M )
乱数
(4.1)
ここで、a および b は適当な整数であり、M としてはコンピュータで使用できる最大桁に相当する整数(例
えば、2 進法 k 桁の場合 M = 2k )である。尚、計算においては桁あふれは無視する。式 4.1 によって、一
様な出現頻度を持つ 0 から M − 1 までの値をもつ擬似乱数が生成される。a および b としてどのような数
を選ぶかが性質の良い(乱数らしい)擬似乱数を生成する決め手となる。しかし、この点についてはまだ定
まった理論的研究はない。
一方、それとは別に周期性の問題がある。この方法だと、同じ数が出現した時点で生成された擬似乱数列
が周期性を持つようになることが、式 4.1 から容易にみてとれる。乱数は本来周期性を持たないものである
から、このことは重大な欠陥となる。次善の策としては、できるだけ長い周期の擬似乱数列を生成すること
である。これについては、整数論を用いて次の定理が成り立つことが証明されている。
定理 式 4.1 において、次の条件が成り立つならば、そのときに限
り、周期は M である。
1. b と M は互いに素である。
2. M の素因数 p にたいして、a ≡ 1 (mod p) である。
3. M が 4 の倍数のとき、a ≡ 1 (mod 4) である。
例えば M = 2k (k は正の整数)にとった場合、3 から a = 4n + 1(n は任意の正の整数)にとればよい。
また、1 から b は任意の正の奇数にとればよい。
しかし、長い周期をもつことだけが良い擬似乱数である条件ではない。もう1つの条件として、前後の連
なった数の間の相関が少ないことがあげられる。この点についてもいろいろ研究されてはいるが、まだ全く
明らかではない。結局、長い周期を維持しながらいろいろな a および b の値をいれて試してみる他ないの
である。
問 4.2 M = 2k(k は正の整数)、a = 4n + 1(n は任意の正の整数)、b = 任意の正の奇数の場合について、
上の定理を証明せよ。
問 4.3 他の擬似乱数生成法について調べてみよ。
4.3
研究課題 I -疑似乱数混合合同法により擬似乱数を生成し、パラメータ k 、a、および b を
変えたとき、周期性や相関がどのようになるか調べてみよ。
4.4
乱数の検定
擬似乱数については、あくまで〈実用的な観点からみて乱数とみなす〉ということであり、〈本質的には
乱数ではない〉ということに留意すべきだろう。実際、ある規則で生成された乱数列がどの程度デタラメで
あるのかは注意深く検定する必要がある。
乱数の検定法としては次の2種類に分けられる。
1. 一様分布になるか?
2. 前後の数が独立かどうか?
もちろん、もともと完全な乱数ではないのだから、それぞれその実現の度合を調べることになる。条件 1 と
2 の実現の度合を調べる方法はいろいろ提案されているが決定的なものはない。一様分布に従うかどうかの
4.5. 研究課題 II -乱数の検定-
35
検定は最小数 0 から最大数 M − 1 までを細かい区間に分けて、各区間に含まれる度数分布の一様性を検定
するのが1つの方法であろう。独立かどうかの検定は xn が第 i 番目の区間に属し xn+1 が第 j 番目の区間
に属する場合の度数を Nij として、{Nij : i = 1, 2, ...; j = 1, 2, ...} の一様性を検定するのが一つの方法であ
ろう。
問 4.4 ほかの検定方法について調べてみよ。
4.5
研究課題 II -乱数の検定課題 1 において生成した擬似乱数について条件 1 および 2 を検定
せよ。
4.6
いろいろな分布に従う乱数の生成
ここでは、前項で生成した擬似乱数を使って、応用上よくでてくる以下のいろいろな種類の擬似乱数の生
成法を学習する。
1. 区間 (0,1) 上の一様分布にしたがう擬似乱数
2. 平均値 0、分散 1 の正規分布にしたがう擬似乱数
3. 平均 1 の指数分布にしたがう擬似乱数(『逆関数法』)
4.6.1
区間 (0,1) 上の一様分布にしたがう擬似乱数
4.2 で示した擬似乱数を最大数 M − 1 で割って規格化することにより、区間 (0,1) 上の一様分布にしたが
う擬似乱数が得られる。これを U (0, 1) と呼ぶことにする。
4.6.2
研究課題 III -一様乱数U (0, 1) を生成するサブルーチンを作成せよ。
4.6.3
平均値 0、分散 1 の正規分布にしたがう擬似乱数
物理学で取り扱う確率分布に正規分布が良く出てくるのは〈中心極限定理〉によるものである。ここでは
逆に、この中心極限定理を利用して擬似乱数 U (0, 1) から平均値 0、分散 1 の正規分布にしたがう擬似乱数
を生成してみよう。
いま、n 個の独立な U (0, 1) 擬似乱数のサンプル U1 , U2 , ..., Un から総和
N =
n
Ui
(4.2)
i=1
をつくると、中心極限定理から、n → ∞ で N は正規分布になることが分かっている。ところで、n の値と
していくつ位からこのことが成り立つのだろうか。実際、n がかなり小さい値で正規分布に近付いてゆく。
どれくらいの n が妥当かは、どの程度の近似を要求するかにかかっている。
例として、n = 12 にとってみよう。このとき、
N =
12
i=1
Ui − 6
(4.3)
36
第4章
乱数
は近似的に平均値 0、分散 1 の正規分布にしたがう擬似乱数を与える。ところで、式 4.3 によると常に | N |≤ 6
である。このことは、応用される問題によっては、問題になるかもしれない。
問 4.5 式 4.3 が平均値 0、分散 1 の正規分布を与えることを示せ。
(ヒント:U (0, 1) は平均値 1/2、分散 1/12 である。)
4.6.4
研究課題 IV -正規乱数式 4.3 を使って、正規分布にしたがう擬似乱数を生成するサブルー
チンを作成せよ。
4.6.5
平均 1 の指数分布にしたがう擬似乱数 −逆関数法−
ここでは、一般的な擬似乱数生成法の一つである『逆関数法』を使ってみよう。そのためには、累積分布
関数 F (x) を定義することから始めよう。いま、擬似乱数のしたがうべき分布を f (x) とすると、F (x) は次
の式で与えられる。
F (x) =
NF
1
NF
x1
=
x
f (X)dX
(4.4)
x0
f (X)dX
x0
ここで、f (x) および F (x) は区間 (x0 , x1 ) で定義されているものとする。そこで F (x) の逆関数 F −1 (x) が
なんらかの方法で分かれば、変換
X = {x | x = F −1 (u); u ∈ U (0, 1)}
(4.5)
によって分布 f (x) にしたがう擬似乱数 X が得られる。この方法は逆関数 F −1 (x) が容易に求まる場合には
極めて有効であるが、実際にはそうでない場合も多く、この方法と相補的な一般的方法として『棄却法』が
ある。
次に、この方法を用いて平均 1 の指数分布
f (x) = exp (−x) (0 ≤ x ≤ ∞)
(4.6)
にしたがう擬似乱数を生成してみよう。累積分布関数は
F (x) = 1 − exp (−x)
(4.7)
F −1 (u) = − ln (1 − u)
(4.8)
である。したがって、逆関数として
を得る。
問 4.6 式 4.4 と式 4.5 によって分布 f (x) にしたがう擬似乱数が得られることを示せ。
問 4.7 『棄却法』について調べてみよ。
4.6.6
研究課題 V -指数乱数式 4.8 を使って、平均 1 の指数分布にしたがう擬似乱数を生成する
サブルーチンを作成せよ。
37
第 5 章 モンテカルロ法
モンテカルロ法とは、確率現象をコンピュータを用いて仮想的に再現して調べようとする場合などに用
いられる、強力な数値実験の方法である。その名前は確率現象をシミュレートする事を博打になぞらえた
ことからきていると考えられる。(モンテカルロはモナコにある賭博で有名な町の名前である。)ここでは、
いくつかの実例をみながらそのエッセンスを学習しよう。例として、以下のものを考察する。
1. 円周率の計算。
2. 酔歩のシミュレーション。
3. 計数の統計。
5.1
円周率の計算
展開式などを使わず直接に円周率 π を求めることができるだろうか。まず、xy-平面上で原点 (0,0) を中心
にした半径 0.5 の円を考えてみよう。いま一様分布にしたがう擬似乱数 U (0, 1) から1対のサンプル (ui , ui+1 )
をとりだし、それを座標
xj
= ui − 0.5
yj
= ui+1 − 0.5
(5.1)
に対応させるとすると、点 (xj , yj ) は原点を中心とした1辺が長さ1の正方形のなかに一様分布する。した
がって、円の内部に含まれる点の総数と正方形の内部に含まれる点の総数(≡生成した点の総数)とは、そ
れぞれ対応する部分である円の面積および正方形の面積に比例しているはずである。
円の面積が π × (0.5)2 で、正方形の面積が 1 × 1 であることから、
π = 4×
(円の内部に含まれる点の総数)
(生成した点の総数)
(5.2)
として、円周率が決定できる。
問 5.1 式 5.2 によってきまる円周率 π の精度と生成された全部の点の数とはどのような関係にあるか考察
せよ。
5.2
研究課題 I -円周率 π上のやりかたを使って円周率 π を5桁の精度で計算せよ。
5.3
酔歩のシミュレーション
方向音痴になるまで泥酔した酔っぱらいが一本道を歩いて行くとして、歩数 n だけ歩いた後に初めの場
所からどれくらい移動しているだろうか。ここでは、酔いまかせ風まかせの酔っぱらいの挙動を乱数を使っ
てシミュレートしてみよう。
38
第 5 章 モンテカルロ法
酔っぱらいが n 歩だけ歩いたとしよう。そこで、一様分布にしたがう擬似乱数 U (0, 1) から独立な n 個の
サンプルの組 {ui : i = 1, 2, ..., n} をとりだし、次のようなルールを設定して酔っぱらいの歩みをモデル化
する。
ui ≤ 0.5 のとき
ui > 0.5 のとき
この場合の最終到達位置
x =
−→ si = +1(前進)
−→ si = −1(後退)
n
si × δ
(5.3)
(5.4)
i=1
はどのような確率で実現するのだろうか(ここで、δ は酔っぱらいの歩幅、n は歩いた歩数である。また、
酔っぱらいは最初原点 x = 0 にいたものとする。)。平均としてもとの場所にいることは明らかだろう。す
なわち、< x >= 0 である。実際に問題となるのは確率分布の形や分散 < (x− < x >)2 > である。そこで、
何人もの酔っぱらいに登場してもらい、かれらの歩みをシミュレートしてそれらについて調べることを考え
よう。
まず、一様分布にしたがう擬似乱数 U (0, 1) から独立な n 個のサンプルの組 {ui : i = 1, 2, ..., n} を酔っぱらい
の人数(N 人)分だけとりだすことにしよう。とりだしたサンプルの組を {uij : i = 1, 2, ..., n}(j = 1, 2, ..., N )
とすると、最終到達位置は
x(j) =
n
sij × δ
(5.5)
i=1
(ここで、sij は uij に対応して式 5.3 の規則によって与えられる数)で与えられる。そこで、例えば原点
x = 0 を中心に区間 (−nδ, +nδ) を 2n 等分して、各区間に式 5.5 で与えられる {x(j) : j = 1, 2, ..., N } が含
まれる度数分布を作ることにより、問題となっている確率分布の形を知ることができる。さらに、得られた
確率分布から平均値や分散を計算することができる。
問 5.2 式 5.4 から、歩数 n が 1 にくらべてじゅうぶん大きいときには、最終到達位置 x の平均値 < x > お
よび分散 < (x− < x >)2 > について、次の式が成り立つことを示せ。
<x> =
2
< (x− < x >) > =
0
nδ 2
(ヒント:si は全くランダムに +1 あるいは −1 の値をとる。したがって、< si >= 0 および < si sj >=
0(i = j) である。)
問 5.3 式 5.3 から、各々の歩みにおいて前進する確率および後進する確率はともにひとしく 1/2 である。歩数
n が 1 にくらべてじゅうぶん大きいときには、最終到達位置が x である確率 P (x) は平均値 < x >= 0、
分散 < (x− < x >)2 >= nδ 2 とする正規分布となることを示せ。(ヒント:n 個の si のうちの m 個
を-1 とし、残りを+1 にする確率は n Cm (1/2)n−m (1/2)m で与えられる。)
5.4
研究課題 II -酔歩式 5.5 のやりかたを使って酔歩のシミュレーションを行い、最終到
達位置の確率分布 P (x) をもとめよ。また、平均値 < x > および分
散 < (x− < x >)2 > を調べよ。とくに、n が小さいときの P (x) と
n が大きいときの P (x) についての違いはどうか。また、n がいく
つ以上で正規分布に近付くか。
5.5. 計数の統計
5.5
39
計数の統計
放射線源から放出される単位時間あたりの放射線の数を何回か測定するとき、放射線源の強度(放射線
を出すことのできる原子核の総数)が変わらないものとして、計数はどのように変動するだろうか。放射線
源となる原子核は、例えば、弱い相互作用によって β 崩壊をおこして β 線を放出する。この過程は量子力
学的過程であって、相互作用の強さによってきまるある頻度で確率的に起こる。そして、この確率現象が計
数の変動を生む原因になっているのである。ここでは、確率現象である原子核の崩壊をシミュレートするこ
とによって、計数の統計についての本質を学習する。
単位時間あたりの崩壊の確率を p とする。そこで、n 個の原子核があるとして、一様分布にしたがう擬似
乱数 U (0, 1) から独立な n 個のサンプルの組 {ui : i = 1, 2, ..., n} をとりだし、次のルールでそれらの原子核
の崩壊をモデル化する。
ui ≤ p のとき
−→ ci = +1(崩壊する)
ui > p のとき
−→ ci = 0(崩壊しない)
(5.6)
ここで、p は 1 にくらべてじゅうぶん小さく、n は 1 にくらべてじゅうぶん大きいものとする。このとき、
単位時間あたり崩壊する原子核の数 x は
x =
n
ci
(5.7)
i=1
で与えられる。式 5.7 はまた単位時間あたりの放射線の計数を与えている。
このようにモデル化した上で、こんどは計数の試行回数(N 回)分だけ一様分布にしたがう擬似乱数
U (0, 1) から独立な n 個のサンプルの組 {uij : i = 1, 2, ..., n}(j = 1, 2, ..., N ) をとりだすことにすると、第 j
番目の試行に対する計数 x(j) は、 x(j) =
n
cij
(5.8)
i=1
(ここで、cij は uij に対応して式 5.6 の規則によって与えられる数)で与えられる。そこで、例えば、x0 = np
を中心に適当な区間 (x0 − a, x0 + a) を m 等分し、各区間に計数 {x(j) : j = 1, 2, ..., N } が含まれる度数分
布を調べることにより、計数についての確率分布の形がわかる。また、それを使って平均値 < x > や分散
< (x− < x >)2 > が計算できる。
問 5.4 式 5.7 から、原子核の総数 n が 1 にくらべてじゅうぶん大きいとき、計数の平均値 < x > および分
散 < (x− < x >)2 > について、次の式が成り立つことを示せ。
<x>
=
np
< (x− < x >) > =
np
2
(5.9)
(ヒント:< ci >= p、< (ci )2 >= p および < ci cj >= p2 (i = j) である。)
問 5.5 確率分布 P (x) は、一般に、ポアソン分布になることを示せ。(ヒント:x 個の原子核が崩壊する確
率は n Cx px (1 − p)n−x で与えられる。)
5.6
研究課題 III -放射線源の崩壊式 5.8 のやりかたを使って放射線源の崩壊のシミュレーションを
行い、計数についてその確率分布 P (x) をもとめよ。また、平均値
< x > および分散 < (x− < x >)2 > を調 べよ。とくに、np が小
さいときの P (x) と np が大きいときの P (x) についての違いはどう
か。また、np がいくつ以上で正規分布に近付くか。
41
第 6 章 力学/天体物理
ここでは、高等学校や大学初年次に良く親しんでいる『力と運動』について身近な例を考察しながら力学
系に関する理解を深めて行く。馴れ親しみ良く分っていると思っていた力学系について、自明でない現象を
発見(?)してその面白さを分って頂けるものと期待している。授業では以下の順序で学習を進める。
1. 具体的な例を考察する前に、力学系を記述する数学的道具立てである微分方程式について、そのコン
ピュータによる取り扱い方やそこから生じる特異性などを中心に学習する。
2. 最も簡単な例として人工衛星の軌道計算を行い、初期条件や質量の違いによる系の振舞いをシミュレー
ションを通じて学習する。
3. 2 の問題の発展として米国の打ち上げた惑星探査衛星ボイジャーの軌道計算を行い、その木星による重
力加速について考察する。
4. 自明でない複雑な系のうち、最も簡単と思われる3体系について考察する。
6.1
微分方程式の数値解法
微分方程式をコンピュータで取り扱う場合、差分方程式として読み替える。しかし、微分方程式と差分方
程式は本質的に違うものであるから、その取り扱いには充分な注意と経験的知識が必要である。
例えば、一階微分方程式
y = f (x, y)
(6.1)
について、y(x0 ) = y0 という初期条件で解を求めて見よう。上の方程式を差分方程式にすると
y(x + Δx) − y(x)
= f (x, y)
Δx
(6.2)
y(x + Δx) = y(x) + f (x, y)Δx
(6.3)
となる。この式から
を得る。
上式の意味するところは
ある点 x における y の値 y(x) が分れば、点 x + Δx における y の
値 y(x + Δx) が計算できる。
ということである。ところで、我々は x = x0 における y の値 y(x0 ) を知っているのだから、刻み Δx を適
当にえらぶことによって任意の点 x での y の値 y(x) を計算することができることになる。つまり、差分化
することによって微分方程式の初期値問題が容易に解けることが分かる。
しかし、実際に具体的な計算を行う場合、最初に困るのが
刻み Δx を幾らにとればよいか?
ということである。差分方程式 6.3 はあくまで微分方程式 6.1 の近似なのであるから、理想的には Δx → 0
とすべきであろう。一方、それでは幾ら計算時間をかけても求める解は得られない(何故なら、無限回数の
演算が必要だから)。結局、実用的な刻み Δxprac は
42
第 6 章 力学/天体物理
我々が解としてどの程度の精度を必要としているか?
できまることになる。
できるだけ少ない計算回数でできるだけ精度の良い解を得るには、刻み Δx を調整するだけでなく、計
算の方法(アルゴリズム)自体にも工夫が必要になる。ここでは代表的な計算アルゴリズムとしてオイラー
法とルンゲ-クッタ法について考察する。
6.1.1
オイラー法
y(x) が充分な回数微分可能とすると、y(x + Δx) は点 x におけるテーラー級数として
1
y(x + Δx) = y(x) + Δxy (x) + Δx2 y (x) + ...
2
(6.4)
とあらわされる。ここで、式 6.1 を使うと
1
y(x + Δx) = y(x) + Δxf (x, y) + Δx2 f (x, y) + ...
2
(6.5)
となる。
オイラー法では式 6.5 の右辺第2項までとって近似を行う。つまり、
= x0 + Δx · i
xi
yi+1
= yi + Δxf (xi , yi )
(6.6)
(ここで、i = 0, 1, ..., n − 1)というアルゴリズムによって y(xi+1 ) の近似値 yi+1 を逐次計算して行く。
このような方法で微分方程式を解く場合、刻み Δx をいくらにとったら充分なのかが常に問題となる。一
般に、近似の度合は『公式の次数』であらわされて
max | y(xi ) − yi |≤ O((Δx)m )
(6.7)
のとき m 次の公式であるという。オイラー法は1次の公式になっている。実際の計算を行う時は、Δx と
して幾つかの値について計算してその収束状況を入念に検討する必要がある。
問 6.1 式 6.7 をオイラー法について証明せよ。
問 6.2 オイラー法の幾何学的意味について考察せよ。
(ヒント:オイラー法は別名『折れ線公式』とも呼ばれる。)
6.1.2
ルンゲ-クッタ法
オイラー法では勾配 f (xi , yi ) を1回だけ計算して次の近似値 yi+1 を計算しているが、ルンゲ-クッタ法で
は区間 [xi , xi+1 ] で4回計算してそれらの重み付き平均をとることによってオイラー法よりも次数の高い公
式を得る。アルゴリズムとしてはいくつものやり方が考案されているが、ここでは『古典的ルンゲ-クッタ
法』を考察しよう。これは、
⎧
⎪
xi
⎪
⎪
⎪
⎪
⎪
yi+1
⎪
⎪
⎪
⎨ k
1
⎪
k2
⎪
⎪
⎪
⎪
⎪
⎪ k3
⎪
⎪
⎩ k
4
=
=
x0 + Δx · i
yi + 16 Δx(k1 + 2k2 + 2k3 + k4 )
=
=
f (xi , yi )
f (xi + 12 Δx, yi + 12 Δxk1 )
=
=
f (xi + 12 Δx, yi + 12 Δxk2 )
f (xi + Δx, yi + Δxk3 )
(6.8)
6.2. 研究課題 I -ベッセル方程式-
43
(ここで、i = 0, 1, 2, ..., n − 1)というアルゴリズムによって y(xi+1 ) の近似値 yi+1 を逐次計算して行く。こ
の公式の次数は4次である。
問 6.3 f (x, y) が y によらない時、式 6.8 はシンプソン積分則になっていることを示せ。
問 6.4 オイラー法を1次のルンゲ-クッタ法とみなした時、2次のルンゲ-クッタ法について考察せよ。(ヒ
ント:
『修正オイラー法;ホインの2次公式』)
問 6.5 ルンゲ-クッタ法の幾何学的意味について考察せよ。
6.2
研究課題 I -ベッセル方程式Bessel 方程式は物理学と馴染みの深い微分方程式である。ここで
は、n = 0 の場合の Bessel 方程式
d2 y
1 dy
+y
+
dx2
x dx
=
0
(6.9)
を、初期条件 y(0) = 1, y (0) = 0 のもとに、オイラー法、修正オ
イラー法およびルンゲ-クッタ法を使って解いてみよう。とくに、
x = 2 までの数値解を求め、計算結果を関数表の値と較べてみよ。
さらに、差分化の度合を変えて計算し、得られた数値解の精度との
相関関係を、各々方法について、考察せよ。
6.3
人工衛星の軌道計算
地球を周回する人工衛星の軌道は、地球と人工衛星との2体系が孤立系だと仮定すると、人工衛星と地
球との重力相互作用によって決まる。簡単のため、2次元平面 (x, y) 内の運動として考えると、地球の重心
の座標を (X, Y )、人工衛星の重心の座標を (x, y) として、運動方程式は
⎧
2
m ddt2x
= −GmM [(x−X)2x−X
⎪
⎪
+(y−Y )2 ]3/2
⎪
2
⎪
y−Y
⎨ m d 2y
= −GmM [(x−X)2 +(y−Y )2 ]3/2
dt
2
⎪
M ddtX
⎪
2
⎪
⎪
⎩
d2 Y
M dt2
=
=
−GmM [(x−X)2X−x
+(y−Y )2 ]3/2
(6.10)
−y
−GmM [(x−X)2Y+(y−Y
)2 ]3/2
とあらわせる。ここで、M および m はそれぞれ地球および人工衛星の質量であり、G は万有引力定数で
ある。m << M であることから、地球の座標 (X, Y ) は2体系の重心の座標 (XG , YG ) と等しいと考えてよ
い。つまり、
XG
YG
=
=
MX+mx
M+m
MY +my
M+m
X
Y
(6.11)
である。そこで、2体系の重心が座標原点に静止した座標系 (x̃, ỹ) をとると人工衛星の運動方程式は、
d2 x̃
m dt2 = −GmM [x̃2 +ỹx̃2 ]3/2
(6.12)
2
m ddt2ỹ = −GmM [x̃2 +ỹỹ2 ]3/2
となる。
問 6.6 孤立した2体系の運動は一般に初期条件によって定まる平面内におさまる。つまり、6.10 は一般的
に成り立つ方程式である。何故か?(ヒント:3次元空間での方程式に対して初期条件を考慮にいれ
て考えると、自明な解が存在することがわかる。)
44
第 6 章 力学/天体物理
問 6.7 方程式 6.12 を解析的に解き、全エネルギーが負である(束縛状態)時には初期条件と無関係に周期
解となることを示せ。
6.4
研究課題 II -人工衛星方程式 6.12 をオイラー法、修正オイラー法およびルンゲ-クッタ法
を使って解き、1周期経過後の解の収束の度合を刻み Δx と関連さ
せて考察せよ。
6.5
ボイジャー2号の木星による重力加速
惑星探査衛星ボイジャー2号は1977年8月20日に打ち上げられ、楕円軌道に沿って飛行しながら、
火星の近くや小惑星帯を通過して木星へ近付き、そこで木星の引力によって加速を受けて土星へと向い、さ
らに土星の引力によって加速された後、天王星や海王星を通過して史上初めて人工衛星として太陽系外へ
飛び出すことに成功した。そこでは、惑星による重力加速が重要な役割を果している。
重力加速の原理についての直感的な説明としては、『速く走っている重い物体と遅く走っている極めて軽
い物体との衝突』を考えてみるとよいだろう。つまり、ボイジャーが木星の重力圏に入り再びそこから脱出
する過程を一種の衝突と見なすのである。極めて速く運動している木星にゆっくりと近付くボイジャーは、
木星によってはじき飛ばされてその運動方向を変えると同時に加速を受ける。
定量的に議論するため、運動方程式を書いてみよう。まず、第0近似として以下のことが成り立つことを
前提としよう。
1. ボイジャーと太陽やほかの惑星との間に働く重力はボイジャーと木星間の重力にくらべて充分に小さい。
2. 木星の運動はボイジャーの運動によって影響されない。
3. ボイジャーが木星の重力圏に入ってから出るまでの時間は木星の公転周期に較べて充分短く、木星の運
動は等速直線運動とみなせる。
4. ボイジャーの軌道は木星の公転面内にあり、2次元運動と考えてよい。
この場合、ボイジャーの従う運動方程式として、
⎧
2
J
⎪
mV ddt2x = −GmV MJ [(x−XJ )2x−X
⎪
+(y−YJ )2 ]3/2
⎪
⎪
2
⎨ m d y = −Gm M
y−YJ
V dt2
V
J [(x−XJ )2 +(y−YJ )2 ]3/2
⎪ XJ
= Vx t + X0
⎪
⎪
⎪
⎩
YJ
= Vy t + Y0
(6.13)
を得る。ここで、木星の重心の座標を (XJ , YJ )、木星の速度を (Vx , Vy )、t = 0 における木星の位置を (X0 , Y0 )、
およびボイジャーの重心の座標を (x, y) とした。
つぎに、方程式 6.13 を木星の静止座標系(原点に静止)へとガリレイ変換すると、 2
mV ddt2x̃ = −GmV MJ [x̃2 +ỹx̃2 ]3/2
mV
d2 ỹ
dt2
= −GmV MJ [x̃2 +ỹỹ2 ]3/2
(6.14)
を得る。これは人工衛星の運動方程式 6.12 と同じ形である。但し、初期条件は全く異なり、この場合は束
縛軌道にならない(もし、束縛軌道になるとするとボイジャーは木星の衛星になってしまう)。
方程式 6.13 に従い、かつ木星軌道への入射初期条件に依存して、ボイジャーはその軌道に大きな偏向を
受ける。その結果得られる木星の重力圏脱出時のボイジャーの速度を (ṽx , ṽy ) とすると、その時の実際のボ
6.6. 研究課題 III -重力加速-
45
イジャーの速度 (vx , vy ) は、逆ガリレイ変換を行うことにより、
vx = ṽx + Vx
vy
=
(6.15)
ṽy + Vy
vx2 + vy2 は、条件によっては、木星の公転速度 V = Vx2 + Vy2
よりも大きくなる。つまり、ボイジャーは木星の重力によって加速されて、木星軌道の外側へ放出される。
となる。従って、ボイジャーの速度 v =
問 6.8 方程式 6.13 の前提1∼4についてその妥当性を考察せよ。
問 6.9 木星の公転速度とボイジャーが木星の重力圏に入る時の速度を計算し、方程式 6.14 の初期条件につ
いて考察せよ。
問 6.10 木星による重力加速だけでボイジャーは太陽系を脱出できるか。
研究課題 III -重力加速-
6.6
方程式 6.13 をルンゲ-クッタ法を使って解き、初期条件による違い
を検討せよ。 3体問題
6.7
よく知られているように、n(≥ 3) 個の物体が互いに重力によって力を及ぼしあっている場合について、
それらの物体の運動方程式を解いてその振舞いを調べることを『n 体問題』という。18世紀に始まり現在
にいたるまで多くの数学者や天文学者がこの問題に挑戦してきたが、決定的な解決はもたらされていない。
実際、n ≥ 3 の場合の運動を記述する運動方程式は、自明な場合を除いて、現在まで解析的には一般に解か
れていない。この問題に対してポアンカレは関数論的アプローチによる『定性的研究』を創始し、新しい研
究方法を示唆している。ここでは、この問題に対するもう一つのアプローチとして、コンピュータを使って
運動方程式を直接に解き、解の振舞いを調べる。
例えば、最も基本的な3体問題について考察してみよう。運動を2次元平面内に限って考えると、運動方
程式は
2
mi ddtx2i
=
mi ddty2i
=
2
3
j=1
3
j=1
x −x
i
j
−Gmi mj [(xi −xj )2 +(y
2 3/2
i −yj ) ]
y −y
i
j
−Gmi mj [(xi −xj )2 +(y
2 3/2
i −yj ) ]
(6.16)
(ここで、i = 1, 2, 3)となる。対称性から分かる自明な解がいくつか存在することは明らかであるが、一般
に安定な周期解が存在するかどうかについては全くわからない。ポアンカレはこの系が極めて不安定でカ
オス的であることを予想している。
問 6.11 方程式 6.16 について自明な解をもとめよ。(ヒント:これについては、ラグランジュが考察して
いる。)
問 6.12 方程式 6.16 は運動の不変量を考慮することによって方程式の数を減らすことができる。運動の不
変量として何があるか考察せよ。
46
6.8
第 6 章 力学/天体物理
研究課題 IV -3体のカオス方程式 6.16 をルンゲ-クッタ法を使って解き、初期条件による違い
を検討せよ。特に、ある物体の運動に着目したとき、どの程度カオ
ス的であるかをグラフ等で考察せよ。
注)-カオス的であるということカオスとは、ひとことで言うと、
『予言不可能な決定論的運動』である。もうすこし
詳しく言うと、『初期条件における誤差が指数関数的にひろがって行く運動』であ
る。したがって、そのような系については、たとえ運動を記述する運動方程式が分
かっても、決定論的予測が不可能となる。代って、統計力学的記述を強いられるこ
とになる。実際、ごく単純な非線形系にあっても、そのようなカオスが支配的であ
ることが分かってきている。
47
第 7 章 分子運動論/ブラウン運動
ここでは、高校の物理でもなじみの深い<分子運動論>および『確率過程としての物理現象』の好例であ
る<ブラウン運動>について、ミクロなレベルでの分子の運動や衝突をもとに考えるという運動論的観点
からアプローチしながら理解を深める。授業では、以下の順序で学習する。
1. 分子運動論の基礎であるボルツマン分布則について、分子同士の衝突シミュレーションをもとに導出を
試み、その意味を考察する。
2. 確率過程の最も簡単な例として、一定の平均自由行程によって記述されるという仮定のもとに、大質量
分子気体中の小質量分子の熱運動(3次元の酔歩)についてシミュレーションを行ない、その意味を考
察する。
3. ブラウン運動について運動論的観点からその基礎を検討した上で、気体分子との衝突シミュレーション
によるブラウン粒子追跡プログラムを作成・実行し、エネルギー等分配則や時間に比例した拡散などに
ついて調べる。
4. ペランの実験(気体中の鏡付きねじれ振子;ボルツマン定数の導出)のシミュレーションプログラムを
作成・実行し、1次元のねじれ振子についてエネルギー等分配則および揺らぎのスペクトルなどについ
て調べる。
7.1
ボルツマン分布則 −衝突/緩和モデル−
気体を一定の温度・圧力という条件のもとに長時間放置しておいた場合、
ある緩和時間の後に平衡状態に到達する
ということは暗黙のうちに了解されていることである。ところで、この《平衡状態に到達する》ということ
はそんなに自明なことなのだろうか。
運動論的観点から見ると、気体は無数の分子からできていて、それらの分子は短い時間のうちに互いに
何度も衝突する。そのような衝突の結果、頻繁に運動の方向を変えたりエネルギーをやりとりしたりする。
もちろん、このような描像は平衡状態への到達前および到達後の両方の状態について成り立つと考えられ
る。このような観点から見たとき、問題は次の2点に絞られるだろう。
• 平衡状態とは運動論的にはどのような状態をいうのだろうか。
• 平衡状態はどのようにして実現されるのだろうか。
ボルツマンは平衡状態における気体分子の速度分布関数について、それを運動論的に考察するなかで1
つの突破口を開いた。彼は
平衡状態とは分子同士の衝突があっても速度分布関数が不変に保た
れる状態である
と考えた。この考えにもとづいて、<分子同士の衝突によって不変な関数>として、自らの名前を冠した有
名な<ボルツマン分布則>を導いた。すなわち、気体分子の速度分布関数
vx2 + vy2 + vz2
f (vx , vy , vz ) = NB exp
2mkB T
(7.1)
48
第7章
分子運動論/ブラウン運動
を導いた。ここで、(vx , vy , vz ) は気体分子の速度、m は気体分子の質量、kB はボルツマン定数、T は気体
の温度、NB は規格化定数である。
気体分子運動論はこれによって大きな進展へと導かれた。しかしながら、7.1 式の導出に関連して、ボル
ツマンのやりかたが
• 壁面についての考察を全く捨象している点
• <分子同士の衝突によって不変な関数>という意味ではこの関数形が唯一の解ではなかった点
等において相当に直感的なものであり、1つのモデル化あるいは近似がおこなわれていると考えることは、
いろいろな意味で教訓的なことかもしれない。
さて、このような予備的考察をもとに、非平衡状態から出発して気体分子同士の衝突をモンテカルロ法に
よってシミュレートし、平衡状態の気体分子の速度分布関数 f (vx , vy , vz ) を計算することを考えてみよう。
ここで必要な知識は運動学である。同じ質量の物体同士の衝突であるから簡単であるが、初期状態におい
て2つの物体が両方とも動いている点が事情を少し複雑にしている。
いま、速度 (v1x , v1y , v1z ) の気体分子1と速度 (v2x , v2y , v2z ) の気体分子2の衝突を考えよう。まず、2
粒子の重心系に移ろう。2粒子の重心の運動方向を z 軸にとり、衝突後の粒子1の散乱角を θ∗ 、方位角を
∗
∗
∗
∗
∗
∗
φ∗ とすると、重心系における衝突後の粒子1の速度 (ṽ1x
, ṽ1y
, ṽ1z
) と粒子2の速度 (ṽ2x
, ṽ2y
, ṽ2z
) は次の式
で与えられる。
⎧
∗
ṽ1x
= v ∗ sin θ∗ cos φ∗
⎪
⎪
⎪
⎪
∗
⎪
⎪ ṽ1y
= v ∗ sin θ∗ sin φ∗
⎪
⎪
⎪
∗
∗
∗
⎪ ṽ
⎪
⎨ 1z = v cos θ
∗
∗
(7.2)
ṽ2x
= −ṽ1x
⎪
⎪
∗
∗
⎪
⎪
ṽ2y = −ṽ1y
⎪
⎪
⎪
∗
∗
⎪
⎪
ṽ2z
= −ṽ1z
⎪
⎪
⎩ ∗
v
= 0.5 (v1x − v2x )2 + (v1y − v2y )2 + (v1z − v2z )2
2粒子の重心系の速度は
⎧
∗
⎪
⎨ Vx
Vy∗
⎪
⎩ ∗
Vz
= 0.5(v1x + v2x )
= 0.5(v1y + v2y )
= 0.5(v1z + v2z )
(7.3)
で与えられるので、実験室系おける衝突後の粒子1の速度 (ṽ1x , ṽ1y , ṽ1z ) と粒子2の速度 (ṽ2x , ṽ2y , ṽ2z ) の
は次の式で与えられる。
⎧
⎪
ṽ1x
⎪
⎪
⎪
⎪
⎪
ṽ1y
⎪
⎪
⎪
⎨ ṽ
1z
⎪
ṽ2x
⎪
⎪
⎪
⎪
⎪
ṽ2y
⎪
⎪
⎪
⎩ ṽ
2z
=
=
=
=
=
=
∗
ṽ1x
+ Vx∗
∗
ṽ1y
+ Vy∗
∗
ṽ1z
+ Vz∗
∗
ṽ2x
+ Vx∗
∗
ṽ2y
+ Vy∗
(7.4)
∗
ṽ2z
+ Vz∗
そこで、実際のシミュレーションにとりかかる訳だが、そのときに問題となることが少なくとも4つあ
る。すなわち、
1. 初期条件として、何をとるか。
2. 衝突の角分布をどうとるか。
3. 衝突頻度の速度依存性をどうとるか。
4. 壁の影響をどうとりいれるか。
7.2. 研究課題 I -ボルツマン分布則-
49
である。素朴な直感からは、これらの条件が相当に変ったとしてもある緩和時間後に得られる平衡状態の速
度分布関数には大きな影響を与えないだろうということが予想される。このことについては、いろいろパ
ラメータをかえてシミュレーションを行い確かめる必要がある。むしろ、それによってシミュレーション
そのものの正当性が保証されるというべきだろう。もちろん、すべての場合を尽すわけにはいかないので、
典型的と思われるケースに絞ってシミュレートすることになる。
問 7.1 気体の速度分布関数について、ボルツマンの考えを調べてみよ。
問 7.2 温度 T の気体について、ボルツマン分布則から予想される気体分子の平均速度をもとめよ。それは
光の速度にくらべて充分小さいか。
問 7.3 1気圧・温度 T の気体中の気体分子に対して、気体分子を剛体球(半径 0.2nm であるとしたときの
平均自由行程および平均の衝突頻度を計算せよ。それらは、気体分子の速度によってどのように変わ
るか。
問 7.4 上にあげた問題点 1∼4 について考察せよ。どういうモデル化が可能か。
7.2
研究課題 I -ボルツマン分布則初期条件として、各気体分子が同じエネルギー E =
3
2 kB T
をもっ
ていて、しかも運動の方向の分布が等方的である状態をとり、そこ
から各気体分子同士が衝突をくりかえしながら平衡状態になる様子
をモンテカルロ法を使ってシミュレーションをおこなって調べよ。
その際、次のことを前提にせよ。
1. 衝突の角分布は等方的である。
2. 衝突の頻度は速度によらない。
3. 壁の影響は無視する。
7.3
気体の中での電子の3次元酔歩
He や Ar などのような電子親和性の低い分子からなる気体中に電子を置いたとき、電子はどのように動く
だろうか。この問題は、次の1から3の仮定をもとに、電子についての3次元酔歩として捉えることがで
きる。
1. 電子の平均自由行程は一定である。
2. 分子との衝突によって電子の速度の大きさは変わらない。
3. 分子との衝突の後の電子の運動方向は等方的確率分布に従う。
シミュレーションとしては、第5章でやった酔歩の問題と基本的に同じであるが、
• 歩幅が確率分布にしたがって変化する。
• 衝突後の運動の方向が3次元的に等方的確率分布にしたがって変わる。
という2つの違いがある。
質量の小さい分子が一度衝突を起こしてから次に衝突を起こすまでの飛行距離 x は、平均自由行程を λ
として、
f (λ) =
1
exp(−x/λ)
λ
(7.5)
50
第7章
分子運動論/ブラウン運動
という確率分布にしたがう。したがって、衝突毎に次の衝突までの飛行距離を確率的に評価することが必
要である。それには、第4章で学んだ指数分布にしたがう乱数を生成して利用する。第4章では平均が1
の指数分布にしたがう乱数を生成したが、ここでは平均が1の指数分布にしたがう乱数をλ倍することに
よって、平均がλの指数分布にしたがう乱数を生成する。
衝突後の運動方向については別の注意が必要である。
『等方的確率分布』とはどういうことなのだろうか。
数学的には、<等方的>の意味するところは<立体角において一様>ということである。立体角を微分形
式でかくと、
ΔΩ = d cos θdφ
(7.6)
とあらわせる。つまり、<立体角において一様>とは< cos θ および φ において一様>ということになる。
したがって、『等方的確率分布』にしたがう衝突後の散乱角、方位角を生成するには、第4章で出てきた一
様分布にしたがう乱数 U (0, 1) からサンプル ui および ui+1 を取り出し、
cos θ = 2ui − 1
φ
=
2πui+1
(7.7)
によって計算を進めればよい。
問 7.5 1∼3 の仮定について妥当性を調べよ。
問 7.6 更に単純化した過程として
• 1回の衝突後次に衝突するまでの飛行距離が λ(一定)である。
• 衝突後の運動の方向が (θ, φ) = (0◦ , 0◦ ), (90◦ , 0◦ ), (90◦ , 90◦ ), (90◦ , 180◦), (90◦ , 270◦ ), (180◦ , 0◦ ) の
6つの方向(各方向に向く確率は全く等しい)に限定される。
とした場合を考える。このとき、n 回衝突を起こした後の電子の位置 (x, y, z) の確率分布 P (x, y, z)
について平均値と分散を調べよ。また、n が充分大きいとき確率分布 P (x, y, z) の形はどのようにな
るか。
(ヒント:統計的に考える場合、x 軸、y 軸、z 軸についてそれぞれ独立に考えてよい。ただし、
1次元の酔歩とは異なり、前後どちらにも進まない確率があることに注意せよ。)
7.4
研究課題 II -3次元酔歩気体中の電子の熱運動(3次元の酔歩)についてモンテカルロ法を
使ってシミュレーションを行ない、n 回衝突を起こした後の小質量
分子の位置の確率分布 P (x, y, z) の形を調べよ。n が小さい場合と
n が大きい場合とでは確率分布 P (x, y, z) の形はどうちがうか。さ
らに、確率分布 P (x, y, z) から平均値 < x >、< y >、< z > と分
散 < (x− < x >)2 >、< (y− < y >)2 >、< (z− < z >)2 > を計
算せよ。特に、n は経過時間に比例していると考えられるが、分散
は n と どのような関係があるか。
7.5
ブラウン粒子の運動
植物学者ロバート・ブラウンが水に浮かぶ花粉の不規則な運動を顕微鏡を使ってはじめて観測したのは1
827年のことであった。この不規則な運動は発見者の名前にちなんで『ブラウン運動』と名付けられた。
その原因はミクロな水の分子の熱運動に由来するゆらぎである。しかし、このことが明らかになるまでに
はさらに半世紀以上の年月を必要とした。
7.5. ブラウン粒子の運動
51
A.アインシュタインは1905年に記念すべき論文を発表しブラウン運動に理論的基礎付けをあたえ、
ブラウン運動を原子物理学的観点からみる立場を確立した。またそれと同時に、その後の分子運動論や統
計力学の発展を大きく促した。ブラウン運動の発見は、このように歴史的にみても大変意義の深い出来事
であった。一方、その理論の発展にともない
現象を確率過程としてとらえる
という物理学における基本的認識方法の1つが明らかになってきたことも銘記すべきだろう。
ブラウン粒子の運動方程式は、
M
du
= F
dt
(7.8)
(ここで、
u はブラウン粒子の速度、M はブラウン粒子の質量、F はブラウン粒子のまわりの媒質の分子が
ブラウン粒子に作用する力)となる。ランジュバンらによる定式化ではこのブラウン粒子に作用する力 F
を、その特徴から、2つの部分に分けて考える。すなわち、
1. 粒子の運動と結びついた力
2. 粒子の運動と無関係で時間とともに変動する力
である。
第1の力は、ブラウン粒子の速度に比例する摩擦抵抗として
F (u) = −M γu
(7.9)
とあらわされる。ここで、γ はブラウン粒子にまわりの媒質が及ぼす力の性質によってきまる係数である。
例えば、ブラウン粒子が球状で媒質が液体のときは
M γ = 6πaη
(7.10)
として与えられる(ストークスの法則)。ここで、a は球の半径、η は液体の粘度である。
(u) を除いた残りのランダムな力 R(t) で、粒子の運動によらない不規則な部分をあ
第2の力は抵抗力 F
らわしている。これらを使うと式 7.8 は
M
du
= −M γu + R(t)
dt
(7.11)
とあらわされる(ランジュバン方程式)。ブラウン運動の理論では、式 7.11 を与えられたものとして出発点
とし、そこから調和解析等の手法を使っていろいろな計算をおこなっている。
ところで、式 7.11 の根拠はどうなっているのだろうか。その妥当性については必ずしも自明ではない。こ
こでは、ブラウン運動の理論の詳細に入ることは避けて、式 7.11 の基礎付けについて運動論的にアプロー
チを試みよう。
運動論的には式 7.11 ではなく式 7.8 が基本となる。すべての力がブラウン粒子とそれをとり囲む媒質の
は時間の関数であると同時にブラウン粒子の速度の関数となり、
分子との衝突によるものと考えると、力 F
デルタ関数的なインパルスの集りとして
F (u, t) =
ΔPi δ(t − ti )
i
{−u(1 − cos θi∗ ) + vi (1 − cos θi∗ )
i
− | u − vi | sin θi∗n(u − vi , φ∗i )}δ(t − ti )
(7.12)
とあらわされる。ここで、m は媒質分子の質量、vi は第 i 番目に衝突した分子の速度、n(
u − vi , φ∗ ) はベ
クトル (
u − vi ) に直交する方位角 φ∗i を持つ単位ベクトル、ti は第 i 番目の衝突の時刻である。角度 θi∗ お
52
第7章
分子運動論/ブラウン運動
よび φ∗i はそれぞれ第 i 番目の衝突におけるブラウン粒子と媒質分子の重心系における媒質分子の散乱角と
方位角である。また、z ∗ 軸は重心系におけるブラウン粒子の運動方向にとっている。
式 7.12 の右辺の第1項が式 7.11 の粘性抵抗項に相当することは明らかであり、残りの項がランダムな力
R(t) に相当すると考えられる。以下のシミュレーションにおいては、専ら運動論に基礎をおき、式 7.12 の
ような方程式を手掛りにして解析を進めてゆく。
問 7.7 式 7.12 を導け。(ヒント:m << M )
問 7.8 式 7.12 において第2項以降はブラウン粒子の速度 u によらないことを示せ。(ヒント:u の変化は
衝突の起こる頻度に較べて充分ゆるやかであるとせよ。)
問 7.9 初期条件 {t = 0; x = x0 , y = y0 , z = z0 , u = u0 } のもとで、気体分子(v = v1 )が時刻 t1 にブラウ
ン粒子と衝突し、散乱角 θ1∗ 、方位角 φ∗1 で散乱されたとする。このときブラウン粒子の運動方程式 7.8
の解をもとめよ。(ヒント:式 7.12 をもとにして計算せよ。)
7.6
研究課題 III -気体中のブラウン粒子の運動式 7.12 をもとにして、ブラウン粒子の運動について次の条件:
1. ブラウン粒子の形は球状である。
2. 媒質分子との衝突は剛体球同士の衝突とみなしてよい。
3. 1回衝突をおこす時間間隔をτとし、τ時間内では任意の時間
に等しい確率で衝突を起こすとする。
4. 衝突を起こす媒質分子の速度はボルツマン分布則にしたがう。
のもとにモンテカルロ法を使ってシミュレーションを行ない、nτ 時
間経過後のブラウン粒子の位置 (x, y, z) について確率分布 P (x, y, z)
の形を調べよ。ただし、ブラウン粒子の質量 M 、媒質分子の質量
m、媒質の温度 T については適当な数値を仮定せよ。n が小さい
場合と n が大きい場合とでは確率分布 P (x, y, z) の形はどうちがう
か。さらに、確率分布 P (x, y, z) から平均値 < x >、< y >、< z >
と分散 < (x− < x >)2 >、< (y− < y >)2 >、< (z− < z >)2 >
を計算せよ。分散は n とどのような関係があるか。また、ブラウン
粒子の持つ運動エネルギーについて等分配の法則が成りたっている
かどうか調べよ。
7.7
1次元ねじれ振子のブラウン運動 −ペランの実験−
フランスの物理化学者J.B.ペランはいろいろな系のブラウン運動について詳細な実験的研究をおこ
ない、アインシュタインが導いたいわゆる<アインシュタインの関係>の正しいことを証明した。これに
よって原子論の立場は揺るきないものとなり、彼はその功績によってノーベル賞を受けた。
前節では、外力を受けない粒子の並進運動についてのブラウン運動を扱ったが、回転運動の場合や調和振
動子のように束縛力を受ける場合でも同様なブラウン運動が観測される。ここでは、<ペランの実験>と
して有名な実験の1つ、気体中に置かれた鏡付きねじれ振子についてのブラウン運動のシミュレーションを
おこなおう。
ペランは気体中に剛性振子〈長さ数 cm、太さ 10 分の数 μm の石英ファイバーに面積 ∼ 1mm2 の小さな
鏡を吊りさげたもの〉を置き、鏡に光をあててその反射光を回転ドラムに巻きつけた写真フィルムに記録し
7.7. 1次元ねじれ振子のブラウン運動 −ペランの実験−
53
た。鏡には気体分子が絶えず衝突を繰り返し、その結果回転運動が生じる。鏡によって反射される光の作る
写真フィルム上の軌跡は、この回転運動を拡大投影したものになっている。この回転運動は極めて不規則的
なもので、まさに1次元ブラウン運動となる。
この現象を運動論的立場で理解するため、鏡のしたがう運動方程式から考察して行こう。前節の式 7.8 に
相当する剛性振子の運動方程式は
d2 φ
= −Dφ + M
(7.13)
dt2
となる。ここで、φ は鏡の回転角、I は鏡の慣性能率、D は石英ファイバーのねじれ剛性である。また、M
は鏡が気体分子の衝突によって受ける回転の能率である。右辺第1項は式 7.8 にはなかった項で石英ファイ
I
バーのねじれ剛性による復元力である。
次に、ランジュバン方程式を書いてみよう。前節の式 7.11 にならって回転の能率を2つの部分に分解す
ると、
I
d2 φ
dφ
+ R(t)
= −Dφ − C
dt2
dt
(7.14)
が得られる。ここで、−C dφ
dt は鏡の速度に比例する気体中での摩擦抵抗による回転の能率、R(t) は残りの
ランダムな力による回転の能率である。
そこで、前節同様式 7.14 の根拠について運動論的アプローチを試みよう。運動論的には、やはり、式 7.14
ではなく式 7.13 が基本となる。M にふくまれるすべての回転の能率が鏡とそれをとり囲む気体分子との衝
突によるものと考えると、回転の能率 M は時間の関数であると同時に鏡の回転の角速度の関数となり、デ
ルタ関数的なインパルスの集りとして
dφ
,t
=
M
dt
{ri ΔP⊥i }δ(t − ti )
i
i
{−2mri2
dφ
+ ξi 2mri v⊥i }δ(t − ti )
dt
(7.15)
とあらわせる。ここで、m は気体分子の質量、ri は第 i 番目に衝突した気体分子の衝突した位置(回転中
心から半径方向に測ったもの)、v⊥i は第 i 番目に衝突した気体分子の速度の鏡面に垂直な成分の大きさ、ti
は第 i 番目の衝突の時刻である。ξi は第 i 番目に衝突した気体分子が与える回転の能率の符号で、気体分子
が φ を増加させる方向に衝突したときが正、φ を減少させる方向に衝突したときが負である。
式 7.15 において、右辺の第1項が式 7.14 の右辺第2項の摩擦抵抗による回転の能率に相当し、右辺第2
項が式 7.14 の右辺第3項のランダムな力による回転の能率 R(t) に相当すると考えられる。前の節と同様、
以下のシミュレーションにおいては、専ら運動論に基礎をおき、式 7.15 のような方程式を手掛りにして解
析を進めてゆく。
問 7.10 7.15 の式を導け。(ヒント:m << M (M は鏡の重さ))
問 7.11 初期条件 {t = 0, φ = a,
dφ
dt
= b} のもとで、気体分子(v⊥ = v⊥1 )が時刻 t1 に鏡面(r = r1 )にた
いして φ を増加させる方向に衝突する。このとき剛性振子の運動方程式 7.13 の解をもとめよ。(ヒン
ト:式 7.15 をもとにして計算せよ。)
54
7.8
第7章
分子運動論/ブラウン運動
研究課題 IV -ペランの実験式 7.15 をもとにして、ペランの実験について次の条件:
1. 鏡の大きさは 1mm2 、形は長方形である。
2. 気体分子との衝突は剛体同士の衝突とみなしてよい。
3. 1回衝突をおこす時間間隔を τ とし、τ 時間内では任意の時間
に等しい確率で衝突を起こすとする。
4. 衝突を起こす気体分子の速度はボルツマン分布則にしたがう。
5. 鏡の質量 M 、気体分子の質量 m、気体の温度 T としては適当
な数値を仮定する。
のもとにモンテカルロ法を使ってシミュレーションを行ない、nτ 時
間経過後の剛性振子の回転角 φ および角速度
関数 P (φ) および
P ( dφ
d )
dφ
dt
について確率分布
の形を調べよ。n が小さい場合と n が大
きい場合とでは確率分布 P (φ) および P ( dφ
dt ) の形はどうちがうか。
さらに、確率分布 P (φ) および P ( dφ
d ) から平均値 < φ >、<
2
と分散 < (φ− < φ >) >、<
( dφ
dt −
dφ
dt
2
dφ
dt
>
<
>) > を計算せよ。分散
は n とどのような関係があるか。また、剛性振子の持つ運動 エネ
ルギーおよび位置エネルギーについて等分配の法則が成りたってい
るかどうか調べよ。
55
第 8 章 サンプルプログラム
ここでは、これまでの各章でとり上げた研究課題にたいするプログラムの実例を示す。これらのプログラ
ムをヒントにしてぜひ自分のオリジナル版を作成してほしい。
56
第8章
8.1
8.1.1
サンプルプログラム
研究課題:sin 関数
概要
関数のグラフを描くには
• x-軸の描画、目盛付け、名前(ラベル)付け
• y-軸の描画、目盛付け、名前(ラベル)付け
• グラフの名前(タイトル)
• グラフの描画(プロット)
が必要となる。ここでは、サブルーチン群 graph.f がこれらの仕事を行なってくれる。したがって、メイ
ン・プログラムでは必要な情報
• x-軸の名前(xlabel)、範囲(xrange(2))、目盛の巾(dx)
• y-軸の名前(ylabel)、範囲(yrange(2))、目盛の巾(dy)
• グラフの名前(title)
• 描画データ数(n)、描画データ(data(n))
を用意して、該当するサブルーチンをコールすればよい。
8.1.2
出力例
一例として、sin 関数の描画をとり上げる。
8.1. 研究課題:sin 関数
C
Sample [Chapter 2, Study 1]
C
C
C
57
Drawing a sine function
Parameters
DIMENSION SCALE(3,2),X(100),Y(100)
CHARACTER*8 NAME(2)
DATA NAME/’x(rad.) ’,’
f(x)
’/
DATA XBASE/ 0./,DXSTP/0.50/,XDISP/25./
DATA YBASE/-1./,DYSTP/0.10/,YDISP/15./
C
DATA PI/3.142/
Initialization
C
CALL GRINIT
Write title
CALL SETCRS(300.,10.)
CALL PRTCHR(’Sample 0: sin(x) ’,17)
C
Calculate sine function
NPNT=31
DO 10 I=1,NPNT
X(I)=FLOAT(I-1)*PI/10.
Y(I)=SIN(X(I))
C
10 CONTINUE
Draw graph
SCALE(1,1)=XBASE
SCALE(2,1)=DXSTP
SCALE(3,1)=XDISP
SCALE(1,2)=YBASE
SCALE(2,2)=DYSTP
SCALE(3,2)=YDISP
CALL DRWAXS(SCALE,NAME,1)
CALL DRWGRA(X,Y,NPNT,SCALE,4)
C
End grapgh
CALL GREND
STOP
END
58
第8章
8.2
8.2.1
サンプルプログラム
研究課題:1次元ヒストグラム
概要
ヒストグラム(度数分布)をとるには
• 変数の範囲([下限:上限])の設定とますの幅の指定
• ヒストグラムの作成
• ヒストグラムの印刷(プリント)
が必要となる。ここでは、サブルーチン hbook(x, hpar, harray, hstat, isw) がこれらの仕事を行ってくれる。
したがって、メインプログラムでは必要な情報
• 変数の値 (x)
• 変数の下限、上限、ますの幅、ますの数 (hpar(4))
• ヒストグラムを格納する配列 (harray())
• ヒストグラムの統計を格納する配列 (hstat(3))
• 制御スイッチ (isw) isw = 1:ヒストグラムの作成、isw = 1:印刷
を用意して、サブルーチンをコールすればよい。
8.2.2
出力例
一例として、正規分布に従うヒストグラムの作成・印刷をとり上げる。
8.2. 研究課題:1次元ヒストグラム
VARIABLE
CONTENTS
59
GRAPH OF DISTRIBUTION
0
100
200
300
400
500
+----+----+----+----+----+----+----+----+----+----+
+
|
*|
|
|
|
|
|
|
|
+
+
|
*|
|
|
|
|
|
|
|
+
+
|
*
|
|
|
|
|
|
|
+
+
|
|*
|
|
|
|
|
|
|
+
+----|----|-*--|----|----|----|----|----|----|----+
+
|
| * |
|
|
|
|
|
|
+
+
|
|
*|
|
|
|
|
|
|
+
+
|
|
*
|
|
|
|
|
|
+
+
|
|
| * |
|
|
|
|
|
+
+----|----|----|--*-|----|----|----|----|----|----+
+
|
|
|
*|
|
|
|
|
|
+
+
|
|
|
*
|
|
|
|
|
+
+
|
|
|
|*
|
|
|
|
|
+
+
|
|
|
| * |
|
|
|
|
+
+----|----|----|----|--*-|----|----|----|----|----+
+
|
|
|
|
*|
|
|
|
|
+
+
|
|
|
|
*
|
|
|
|
+
+
|
|
|
|
*
|
|
|
|
+
+
|
|
|
|
|*
|
|
|
|
+
+----|----|----|----|----|-*--|----|----|----|----+
+
|
|
|
|
| * |
|
|
|
+
+
|
|
|
|
| * |
|
|
|
+
+
|
|
|
|
| * |
|
|
|
+
+
|
|
|
|
| * |
|
|
|
+
+----|----|----|----|----|--*-|----|----|----|----+
+
|
|
|
|
| * |
|
|
|
+
+
|
|
|
|
| * |
|
|
|
+
+
|
|
|
|
| * |
|
|
|
+
+
|
|
|
|
| * |
|
|
|
+
+----|----|----|----|----|-*--|----|----|----|----+
+
|
|
|
|
| * |
|
|
|
+
+
|
|
|
|
|*
|
|
|
|
+
+
|
|
|
|
*
|
|
|
|
+
+
|
|
|
|
*
|
|
|
|
+
+----|----|----|----|---*|----|----|----|----|----+
+
|
|
|
| * |
|
|
|
|
+
+
|
|
|
| * |
|
|
|
|
+
+
|
|
|
|*
|
|
|
|
|
+
+
|
|
|
*
|
|
|
|
|
+
+----|----|----|---*|----|----|----|----|----|----+
+
|
|
| * |
|
|
|
|
|
+
+
|
|
| * |
|
|
|
|
|
+
+
|
|
*
|
|
|
|
|
|
+
+
|
|
*|
|
|
|
|
|
|
+
+----|----|--*-|----|----|----|----|----|----|----+
+
|
| * |
|
|
|
|
|
|
+
+
|
|*
|
|
|
|
|
|
|
+
+
|
*
|
|
|
|
|
|
|
+
+
|
*|
|
|
|
|
|
|
|
+
+----|---*|----|----|----|----|----|----|----|----+
+----+----+----+----+----+----+----+----+----+----+
0.0000
0.0200
85
0.0400
94
0.0600
103
0.0800
112
0.1000
123
0.1200
132
0.1400
142
0.1600
154
0.1800
165
0.2000
175
0.2200
186
0.2400
196
0.2600
207
0.2800
217
0.3000
228
0.3200
237
0.3400
246
0.3600
253
0.3800
261
0.4000
267
0.4200
273
0.4400
277
0.4600
280
0.4800
282
0.5000
283
0.5200
283
0.5400
282
0.5600
280
0.5800
277
0.6000
273
0.6200
267
0.6400
261
0.6600
253
0.6800
246
0.7000
237
0.7200
228
0.7400
217
0.7600
207
0.7800
196
0.8000
186
0.8200
175
0.8400
165
0.8600
154
0.8800
142
0.9000
132
0.9200
123
0.9400
112
0.9600
103
0.9800
94
1.0000
85
1.0200
* 0.1000e+01
<NUMBER OF ENTRIES> TOT:
11205.
|
|
UNDER RANGE | IN RANGE | OVER RANGE
624. |
9956. |
625.
正規分布のヒストグラム
60
第8章
C
Sample Program [Chapter 3, Study 1]
C
C
Making a histogram
C
C
Arrays for histogram
DIMENSION HPAR_G(4),HARR_G(50),HSTA_G(3)
DATA HPAR_G/ 0. , 1. , 0.02, 50./
C
Gaussian distribution
REAL MEAN_G/ 0.5 /,VAR_G/ 0.1 /
C
DATA NORM_G/ 150 /
Normalization
C
FACTOR = NORM_G*SQRT(1./(2.*3.14*VAR_G))
Calculation and booking
X0=-0.5
DX=0.02
DO 20 I=1,101
X=X0+DX*(I-1)+0.01
NLOOP=IFIX(FACTOR*EXP(-((X-MEAN_G)**2)/(2.*VAR_G))+0.5)
NLOOP = 1.5*NLOOP
DO 10 J=1,NLOOP
CALL HBOOK(X,HPAR_G,HARR_G,HSTA_G,1)
CONTINUE
10
C
20 CONTINUE
Print out
CALL HBOOK(X,HPAR_G,HARR_G,HSTA_G,0)
STOP
END
サンプルプログラム
8.3. 研究課題:一様乱数の生成
8.3
8.3.1
61
研究課題:一様乱数の生成
概要
一様乱数を生成するには
• 乱数の種(seed)の入力
• 乱数の生成と seed の更新
• 乱数および更新された seed の出力
が必要となる。ここでは、サブルーチン rand_u(ix) がこれらの仕事を行なってくれる。したがって、メイ
ン・プログラムでは必要な情報
• 現在の seed の値/更新された seed の値(ix)
• 生成された乱数を受け取る変数(rn)
を用意して、サブルーチンをコールすればよい。
8.3.2
出力例
一例として、一様乱数の系列プロットをとり上げる。
一様乱数の系列
62
C
第8章
Sample Program [Chapter 4, Study 1]
C
C
C
Making a uniform pseudorandom number
Parameters for graphics
DIMENSION SCALE(3,2),X(500),Y(500)
CHARACTER*8 NAME(2)
DATA NAME/’ CYCLE ’,’
RN
’/
DATA NAME/’ Cycle ’,’ RN
’/
DATA XBASE/ 0./,DXSTP/0.05/,XDISP/25./
C
DATA YBASE/ 0./,DYSTP/0.05/,YDISP/15./
Initial value for random number generator
C
DATA IX/100/
Initialization
C
CALL GRINIT
Write title
CALL SETCRS(250.,10.)
CALL PRTCHR(’Uniform R/N Gen. ’,17)
NPNT=200
DO 10 I=1,NPNT
X(I)=FLOAT(I-1)*0.005
CALL RAND_U(IX,RN)
Y(I)=RN
C
10 CONTINUE
Draw graph of uniform random number
SCALE(1,1)=XBASE
SCALE(2,1)=DXSTP
SCALE(3,1)=XDISP
SCALE(1,2)=YBASE
SCALE(2,2)=DYSTP
SCALE(3,2)=YDISP
CALL DRWAXS(SCALE,NAME,1)
C
CALL DRWGRA(X,Y,NPNT,SCALE,4)
End grapgh
CALL GREND
STOP
END
SUBROUTINE RAND_U(IX,RN)
C
C
Uniform random number generator
C
C
IX
RN
: Preceding/following random number
: Normalized random number
C
C
----------------------IX = a*IX + b (mod n)
C
C
RN = IX/n
-----------------------
サンプルプログラム
8.3. 研究課題:一様乱数の生成
DATA MODULO/1000000/,IA/111/,IB/9/
IX = MOD(IA*IX+IB,MODULO)
RN = FLOAT(IX)/FLOAT(MODULO-1)
RETURN
END
63
64
第8章
8.4
8.4.1
サンプルプログラム
研究課題:一様乱数の検定
概要
一様乱数を検定するには
• 出現頻度の一様性
• 乱数系列中の前後の二数の相関
などを調べる必要がある。ここでは、グラフィックサブルーチンを利用して、視覚的に検討してみよう。
8.4.2
出力例
一例として、乱数系列中の前後の二数の相関をとり上げる。
乱数系列中の前後の二数の相関
8.4. 研究課題:一様乱数の検定
C
Sample Program [Chapter 4, Study 2]
C
C
C
65
Test of uniform random number generator
Parameters for graphics
DIMENSION SCALE(3,2),X(200),Y(200)
CHARACTER*8 NAME(2)
DATA NAME /’ RN(j) ’,’RN(j+1) ’/
DATA XBASE/ 0./,DXSTP/0.05/,XDISP/25./
DATA YBASE/ 0./,DYSTP/0.05/,YDISP/15./
C
Seed for RN generator
data ix/100/
C
Initialization
CALL GRINIT
C
Write title
CALL SETCRS(250.,10.)
CALL PRTCHR(’Test of RN gen.
C
’,17)
RN generation
NPNT=200
DO 10 I=1,NPNT
CALL RAND_U(IX,RN)
X(I)=RN
CALL RAND_U(IX,RN)
Y(I)=RN
10 CONTINUE
C
Draw graph
SCALE(1,1)=XBASE
SCALE(2,1)=DXSTP
SCALE(3,1)=XDISP
SCALE(1,2)=YBASE
SCALE(2,2)=DYSTP
SCALE(3,2)=YDISP
CALL DRWAXS(SCALE,NAME,1)
DO 20 I=1,NPNT
CALL DRWGRA(X(I),Y(I),1,SCALE,4)
20 CONTINUE
C
End grapgh
CALL GREND
STOP
END
SUBROUTINE RAND_U(IX,RN)
C
C
C
Uniform random number generator
IX
: Preceding/following random number
C
C
RN
: Normalized random number
-----------------------
66
第8章
C
IX
C
C
=
a*IX + b (mod n)
RN = IX/n
----------------------DATA MODULO/1000000/,IA/111/,IB/9/
IX = MOD(IA*IX+IB,MODULO)
RN = FLOAT(IX)/FLOAT(MODULO-1)
RETURN
END
サンプルプログラム
8.5. 研究課題:いろいろな乱数の生成
8.5
67
研究課題:いろいろな乱数の生成
8.5.1
概要
一様乱数をもとにしていろいろな乱数が生成できる。生成方法としては相加平均法、逆関数法および棄
却法などがある。テキストでは、相加平均法による正規乱数の生成と逆関数法による指数乱数の生成をと
り上げたが、棄却法についても是非試してみて欲しい。
8.5.2
出力例
一例として、正規乱数の生成と指数乱数の生成をとり上げる。
VARIABLE
CONTENTS
GRAPH OF DISTRIBUTION
0
50
100
150
200
250
+----+----+----+----+----+----+----+----+----+----+
+
|
|
|
|
|
|
|
| * |
+
+
|
|
|
|
|
|
|
| * |
+
+
|
|
|
|
|
|
| * |
|
+
+
|
|
|
|
|
|
|
|
*|
+
+----|----|----|----|----|----|----|---*|----|----+
+
|
|
|
|
|
|
| * |
|
+
+
|
|
|
|
|
|
*
|
|
+
+
|
|
|
|
|
|
|
*|
|
+
+
|
|
|
|
|
|
|
|
*|
+
+----|----|----|----|----|----|----|---*|----|----+
+
|
|
|
|
|
|
| * |
|
+
+
|
|
|
|
|
|
| * |
|
+
+
|
|
|
|
|
|
| * |
|
+
+
|
|
|
|
|
|
|
*
|
+
+----|----|----|----|----|----|----|----|*---|----+
+
|
|
|
|
|
|
|
*|
|
+
+
|
|
|
|
|
|
| * |
|
+
+
|
|
|
|
|
|
| * |
|
+
+
|
|
|
|
|
|
|
|*
|
+
+----|----|----|----|----|----|----|----|*---|----+
+
|
|
|
|
|
|
|
*|
|
+
+
|
|
|
|
|
|
|
*|
|
+
+
|
|
|
|
|
|
|
|*
|
+
+
|
|
|
|
|
|
|
|
| * +
+----|----|----|----|----|----|----|----|*---|----+
+
|
|
|
|
|
|
|
|*
|
+
+
|
|
|
|
|
|
|
| * |
+
+
|
|
|
|
|
|
|
*
|
+
+
|
|
|
|
|
|
| * |
|
+
+----|----|----|----|----|----|----|----|---*|----+
+
|
|
|
|
|
|
|
| * |
+
+
|
|
|
|
|
|
|
*|
|
+
+
|
|
|
|
|
|
|
*
|
+
+
|
|
|
|
|
|
*
|
|
+
+----|----|----|----|----|----|----|---*|----|----+
+
|
|
|
|
|
|
|
| * |
+
+
|
|
|
|
|
|
|
*|
|
+
+
|
|
|
|
|
|
|
|
*
+
+
|
|
|
|
|
|
| * |
|
+
+----|----|----|----|----|----|----|-*--|----|----+
+
|
|
|
|
|
|
|
| * |
+
+
|
|
|
|
|
|
|
*|
|
+
+
|
|
|
|
|
|
|
|*
|
+
+
|
|
|
|
|
|
|*
|
|
+
+----|----|----|----|----|----|----|----*----|----+
+
|
|
|
|
|
|
|
*
|
+
+
|
|
|
|
|
|
|
|
*
+
+
|
|
|
|
|
|
| * |
|
+
+
|
|
|
|
|
|
|
| * |
+
+----|----|----|----|----|----|----|----|*---|----+
+----+----+----+----+----+----+----+----+----+----+
0.0000
0.0200
213
0.0400
212
0.0600
191
0.0800
219
0.1000
193
0.1200
185
0.1400
173
0.1600
194
0.1800
221
0.2000
196
0.2200
187
0.2400
187
0.2600
189
0.2800
200
0.3000
206
0.3200
196
0.3400
184
0.3600
188
0.3800
206
0.4000
206
0.4200
195
0.4400
195
0.4600
206
0.4800
235
0.5000
207
0.5200
205
0.5400
210
0.5600
202
0.5800
183
0.6000
219
0.6200
210
0.6400
195
0.6600
201
0.6800
174
0.7000
195
0.7200
213
0.7400
193
0.7600
227
0.7800
185
0.8000
186
0.8200
209
0.8400
196
0.8600
207
0.8800
181
0.9000
199
0.9200
201
0.9400
224
0.9600
184
0.9800
213
1.0000
204
1.0200
* 0.1000e+01
<NUMBER OF ENTRIES> TOT:
10000.
|
|
UNDER RANGE | IN RANGE | OVER RANGE
0. |
10000. |
0.
一様乱数の分布
68
第8章
VARIABLE
CONTENTS
GRAPH OF DISTRIBUTION
0
200
400
600
800
1000
+----+----+----+----+----+----+----+----+----+----+
*
|
|
|
|
|
|
|
|
|
+
*
|
|
|
|
|
|
|
|
|
+
*
|
|
|
|
|
|
|
|
|
+
*
|
|
|
|
|
|
|
|
|
+
*----|----|----|----|----|----|----|----|----|----+
*
|
|
|
|
|
|
|
|
|
+
*
|
|
|
|
|
|
|
|
|
+
*
|
|
|
|
|
|
|
|
|
+
*
|
|
|
|
|
|
|
|
|
+
*----|----|----|----|----|----|----|----|----|----+
*
|
|
|
|
|
|
|
|
|
+
*
|
|
|
|
|
|
|
|
|
+
*
|
|
|
|
|
|
|
|
|
+
+*
|
|
|
|
|
|
|
|
|
+
+-*--|----|----|----|----|----|----|----|----|----+
+
*|
|
|
|
|
|
|
|
|
+
+
| * |
|
|
|
|
|
|
|
+
+
|
*|
|
|
|
|
|
|
|
+
+
|
|
*
|
|
|
|
|
|
+
+----|----|----|----|*---|----|----|----|----|----+
+
|
|
|
|
|*
|
|
|
|
+
+
|
|
|
|
|
| * |
|
|
+
+
|
|
|
|
|
|
|
*|
|
+
+
|
|
|
|
|
|
|
|
*
+
+----|----|----|----|----|----|----|----|----|-*--+
+
|
|
|
|
|
|
|
|
| * +
+
|
|
|
|
|
|
|
|
*
+
+
|
|
|
|
|
|
|
*|
|
+
+
|
|
|
|
|
|
*
|
|
+
+----|----|----|----|----|--*-|----|----|----|----+
+
|
|
|
*|
|
|
|
|
|
+
+
|
|
*
|
|
|
|
|
|
+
+
|
*|
|
|
|
|
|
|
|
+
+
|*
|
|
|
|
|
|
|
|
+
+---*|----|----|----|----|----|----|----|----|----+
+ * |
|
|
|
|
|
|
|
|
+
+*
|
|
|
|
|
|
|
|
|
+
+*
|
|
|
|
|
|
|
|
|
+
+*
|
|
|
|
|
|
|
|
|
+
*----|----|----|----|----|----|----|----|----|----+
*
|
|
|
|
|
|
|
|
|
+
*
|
|
|
|
|
|
|
|
|
+
*
|
|
|
|
|
|
|
|
|
+
*
|
|
|
|
|
|
|
|
|
+
*----|----|----|----|----|----|----|----|----|----+
*
|
|
|
|
|
|
|
|
|
+
*
|
|
|
|
|
|
|
|
|
+
*
|
|
|
|
|
|
|
|
|
+
*
|
|
|
|
|
|
|
|
|
+
*----|----|----|----|----|----|----|----|----|----+
+----+----+----+----+----+----+----+----+----+----+
0.0000
0.0200
0
0.0400
0
0.0600
0
0.0800
0
0.1000
0
0.1200
0
0.1400
0
0.1600
0
0.1800
0
0.2000
1
0.2200
2
0.2400
2
0.2600
6
0.2800
25
0.3000
44
0.3200
74
0.3400
131
0.3600
170
0.3800
309
0.4000
412
0.4200
526
0.4400
652
0.4600
782
0.4800
908
0.5000
936
0.5200
935
0.5400
891
0.5600
774
0.5800
697
0.6000
556
0.6200
389
0.6400
297
0.6600
186
0.6800
120
0.7000
81
0.7200
46
0.7400
21
0.7600
12
0.7800
12
0.8000
3
0.8200
0
0.8400
0
0.8600
0
0.8800
0
0.9000
0
0.9200
0
0.9400
0
0.9600
0
0.9800
0
1.0000
0
1.0200
* 0.1000e+01
<NUMBER OF ENTRIES> TOT:
10000.
|
|
UNDER RANGE | IN RANGE | OVER RANGE
0. |
10000. |
0.
正規乱数の分布
サンプルプログラム
8.5. 研究課題:いろいろな乱数の生成
VARIABLE
CONTENTS
69
GRAPH OF DISTRIBUTION
0
200
400
600
800
1000
+----+----+----+----+----+----+----+----+----+----+
+
|
|
|
|
|
|
| * |
|
+
+
|
|
|
|
|
|
| * |
|
+
+
|
|
|
|
|
|
*|
|
|
+
+
|
|
|
|
|
|*
|
|
|
+
+----|----|----|----|----|--*-|----|----|----|----+
+
|
|
|
|
|*
|
|
|
|
+
+
|
|
|
|
*|
|
|
|
|
+
+
|
|
|
|*
|
|
|
|
|
+
+
|
|
|
|*
|
|
|
|
|
+
+----|----|----|----*----|----|----|----|----|----+
+
|
|
|
*|
|
|
|
|
|
+
+
|
|
|*
|
|
|
|
|
|
+
+
|
|
|*
|
|
|
|
|
|
+
+
|
| * |
|
|
|
|
|
|
+
+----|----|-*--|----|----|----|----|----|----|----+
+
|
| * |
|
|
|
|
|
|
+
+
|
*
|
|
|
|
|
|
|
+
+
|
*
|
|
|
|
|
|
|
+
+
|
*|
|
|
|
|
|
|
|
+
+----|--*-|----|----|----|----|----|----|----|----+
+
| * |
|
|
|
|
|
|
|
+
+
| * |
|
|
|
|
|
|
|
+
+
|*
|
|
|
|
|
|
|
|
+
+
|*
|
|
|
|
|
|
|
|
+
+----*----|----|----|----|----|----|----|----|----+
+
*
|
|
|
|
|
|
|
|
+
+
*
|
|
|
|
|
|
|
|
+
+
*|
|
|
|
|
|
|
|
|
+
+
*|
|
|
|
|
|
|
|
|
+
+---*|----|----|----|----|----|----|----|----|----+
+
*|
|
|
|
|
|
|
|
|
+
+ * |
|
|
|
|
|
|
|
|
+
+ * |
|
|
|
|
|
|
|
|
+
+ * |
|
|
|
|
|
|
|
|
+
+-*--|----|----|----|----|----|----|----|----|----+
+ * |
|
|
|
|
|
|
|
|
+
+ * |
|
|
|
|
|
|
|
|
+
+ * |
|
|
|
|
|
|
|
|
+
+ * |
|
|
|
|
|
|
|
|
+
+-*--|----|----|----|----|----|----|----|----|----+
+ * |
|
|
|
|
|
|
|
|
+
+ * |
|
|
|
|
|
|
|
|
+
+*
|
|
|
|
|
|
|
|
|
+
+*
|
|
|
|
|
|
|
|
|
+
+*---|----|----|----|----|----|----|----|----|----+
+*
|
|
|
|
|
|
|
|
|
+
+*
|
|
|
|
|
|
|
|
|
+
+*
|
|
|
|
|
|
|
|
|
+
+*
|
|
|
|
|
|
|
|
|
+
+*---|----|----|----|----|----|----|----|----|----+
+----+----+----+----+----+----+----+----+----+----+
0.0000
0.0080
734
0.0160
749
0.0240
677
0.0320
622
0.0400
559
0.0480
524
0.0560
470
0.0640
425
0.0720
429
0.0800
393
0.0880
373
0.0960
324
0.1040
326
0.1120
258
0.1200
231
0.1280
237
0.1360
195
0.1440
202
0.1520
173
0.1600
156
0.1680
152
0.1760
140
0.1840
124
0.1920
117
0.2000
106
0.2080
91
0.2160
93
0.2240
84
0.2320
76
0.2400
71
0.2480
84
0.2560
51
0.2640
55
0.2720
51
0.2800
46
0.2880
47
0.2960
51
0.3040
31
0.3120
38
0.3200
36
0.3280
34
0.3360
36
0.3440
23
0.3520
22
0.3600
18
0.3680
25
0.3760
14
0.3840
17
0.3920
10
0.4000
15
0.4080
* 0.1000e+02
<NUMBER OF ENTRIES> TOT:
10000.
|
|
UNDER RANGE | IN RANGE | OVER RANGE
0. |
9815. |
185.
指数乱数の分布
70
C
第8章
Sample Program [Chapter 5, Study 3-5]
C
C
C
Making various types of random number
Arrays for histogram
DIMENSION HPAR_U(4),HARR_U(50),HSTA_U(3)
DIMENSION HPAR_G(4),HARR_G(50),HSTA_G(3)
DIMENSION HPAR_E(4),HARR_E(50),HSTA_E(3)
DATA HPAR_U/
DATA HPAR_G/
0. ,
0. ,
1. , 0.02, 50./
1. , 0.02, 50./
C
DATA HPAR_E/ 0. , 4. , 0.08, 50./
Initial value for random number generator
C
DATA IX/100/
Calculation and booking
DO 10 I=1,10000
CALL RAND_U(IX,RN)
CALL HBOOK(RN,HPAR_U,HARR_U,HSTA_U,1)
CALL RAND_G(IX,RN)
CALL HBOOK(RN,HPAR_G,HARR_G,HSTA_G,1)
CALL RAND_E(IX,RN)
CALL HBOOK(RN,HPAR_E,HARR_E,HSTA_E,1)
C
10 CONTINUE
>>>>>PRINT OUT
CALL HBOOK(RN,HPAR_U,HARR_U,HSTA_U,0)
CALL HBOOK(RN,HPAR_G,HARR_G,HSTA_G,0)
CALL HBOOK(RN,HPAR_E,HARR_E,HSTA_E,0)
STOP
END
SUBROUTINE RAND_U(IX,RN)
C
C
Uniform random number generator
C
IX
C
C
RN
C
C
C
: Seed of (uniform) random number
: Normalized random number
----------------------IX
RN
=
=
a*IX + b (mod n)
IX/n
----------------------DATA MODULO/1000000/,IA/111/,IB/9/
IX = MOD(IA*IX+IB,MODULO)
RN = FLOAT(IX)/FLOAT(MODULO-1)
RETURN
END
SUBROUTINE RAND_G(IX,RN)
C
C
C
Gaussian random number generator
IX
: Preceding/following (uniform) random number
サンプルプログラム
8.5. 研究課題:いろいろな乱数の生成
C
RN
: Semi-Gaussian random number
C
C
(Mean=0.5,Variance=1/12)
--------------------------------------
C
C
RN = (RAND_U(1)+...+RAND_U(12))/12
-------------------------------------SR = 0.
DO 10 I=1,12
CALL RAND_U(IX,RU)
SR = SR+RU
10 CONTINUE
RN = SR/12.
RETURN
END
SUBROUTINE RAND_E(IX,RN)
C
C
Exponential random number generator
C
C
IX
RN
: Seed of (uniform) random number
: Exponential random number
C
C
(Mean=1.0)
-----------------------
C
C
RN = -ln(1.-RAND_U)
----------------------DATA OFFSET/1.E-10/
CALL RAND_U(IX,RU)
RN = -ALOG(1.-RU+OFFSET)
RETURN
END
71
72
第8章
8.6
8.6.1
サンプルプログラム
研究課題:モンテカルロ法による円周率 π の計算
概要
一様乱数の確率的な性質を利用していろいろな数値計算やシミュレーションを行なうことができる。例
えば
• 多重積分計算
• 微分方程式の解法
• 確率的現象のシミュレーション
などがある。
8.6.2
出力例
二重積分の一例として、円周率 π の計算をとり上げる。
*****Reduction of pi by Monte Carlo method*****
# of Trial= 2000,# of Entry= 1613./Pi= 3.22600
# of Trial=
# of Trial=
4000,# of Entry= 3169./Pi= 3.16900
6000,# of Entry= 4735./Pi= 3.15667
# of Trial= 8000,# of Entry= 6301./Pi= 3.15050
# of Trial= 10000,# of Entry= 7893./Pi= 3.15720
# of Trial= 12000,# of Entry= 9455./Pi= 3.15167
# of Trial= 14000,# of Entry=11018./Pi= 3.14800
# of Trial= 16000,# of Entry=12591./Pi= 3.14775
# of Trial= 18000,# of Entry=14167./Pi= 3.14822
# of Trial= 20000,# of Entry=15748./Pi= 3.14960
# of Trial= 22000,# of Entry=17319./Pi= 3.14891
# of Trial= 24000,# of Entry=18895./Pi= 3.14917
# of Trial= 26000,# of Entry=20481./Pi= 3.15092
# of Trial= 28000,# of Entry=22046./Pi= 3.14943
# of Trial= 30000,# of Entry=23614./Pi= 3.14853
# of Trial= 32000,# of Entry=25193./Pi= 3.14913
# of Trial= 34000,# of Entry=26738./Pi= 3.14565
# of Trial= 36000,# of Entry=28299./Pi= 3.14433
# of Trial= 38000,# of Entry=29874./Pi= 3.14463
# of Trial= 40000,# of Entry=31431./Pi= 3.14310
<<Final Result>>
********************
Pi= 3.14310
********************
円周率 π の計算
8.6. 研究課題:モンテカルロ法による円周率 π の計算
C
Sample Program [Chapter 5, Study 1]
C
C
Reduction of pi by Monte Calro method
C
Parameters for random number generator
DATA IX/100/,NPNT/40000/
C
Initialization
CNT_IN=0.
C
Calculation
WRITE(6,1000)
1000 FORMAT(1H ,’*****Reduction of pi by Monte Carlo method*****’)
DO 10 I=1,NPNT
CALL RAND_U(IX,RN)
X=RN-0.5
CALL RAND_U(IX,RN)
Y=RN-0.5
R=SQRT(X**2+Y**2)
IF(R.LE.0.5) THEN
CNT_IN=CNT_IN+1.
ENDIF
IF(MOD(I,2000).EQ.0) THEN
PI=4.*CNT_IN/FLOAT(I)
WRITE(6,2000) I,CNT_IN,PI
2000
C
FORMAT(1H ,’# of Trial=’,I6,’,# of Entry=’,F6.0,’/Pi=’,F8.5)
ENDIF
10 CONTINUE
Final result
PI=4.*CNT_IN/FLOAT(NPNT)
WRITE(6,3000) PI
3000 FORMAT(1H ,’
+
1H ,’
+
1H ,’
+
1H ,’
<<Final Result>> ’,/
********************’,/
Pi=’,F8.5,/
********************’)
STOP
END
SUBROUTINE RAND_U(IX,RN)
C
C
Uniform random number generator
C
C
IX
RN
: Seed of (uniform) random number
: Normalized random number
C
C
----------------------IX = a*IX + b (mod n)
C
C
RN = IX/n
----------------------DATA MODULO/1000000/,IA/111/,IB/9/
IX = MOD(IA*IX+IB,MODULO)
73
74
第8章
RN = FLOAT(IX)/FLOAT(MODULO-1)
RETURN
END
サンプルプログラム
8.7. 研究課題:モンテカルロ法による酔歩のシミュレーション
8.7
8.7.1
75
研究課題:モンテカルロ法による酔歩のシミュレーション
概要
一様乱数を<さいころ>のように使うと酔歩のような選択肢が離散的(前/後)な場合のシミュレーショ
ンを行なうことができる。すなわち、
1. 前に進む確率を p(≤ 1)とする。
2. rn < p ならば、前に一歩進む。
3. rn ≥ p ならば、後に一歩下がる。
として、シミュレーションを進めればよい。
8.7.2
出力例
一例として、p=0.5 の場合の計算をとり上げる。
酔歩のシミュレーション (p=0.5)
76
C
第8章
Sample Program [Chapter 5, Study 2]
C
C
C
One dimensional random walk by Monte Calro method
Parameters for graphics
DIMENSION SCALE(3,2),X(101),Y(101)
CHARACTER*8 NAME(2)/’ N_walk ’,’ X_walk ’/
DATA XBASE/ 0./,DXSTP/5./,XDISP/25./
C
DATA YBASE/-50./,DYSTP/5./,YDISP/15./
Initial value for random number generator
C
DATA IX/500/
Parameters
C
DATA X0/0./,DELTA/1./,NPNT/100/
Initialization
C
CALL GRINIT
Write title
CALL SETCRS(250.,10.)
C
CALL PRTCHR(’1-D Random Walk
Calculation
XRND=X0
X(1)=0.
Y(1)=XRND
DO 10 I=1,NPNT
CALL RAND_U(IX,RN)
IF(RN.LE.0.5) THEN
SGN=+1.
ELSE
SGN=-1.
ENDIF
XRND=XRND+SGN*DELTA
X(I+1)=FLOAT(I)
Y(I+1)=XRND
C
10 CONTINUE
Draw graph
SCALE(1,1)=XBASE
SCALE(2,1)=DXSTP
SCALE(3,1)=XDISP
SCALE(1,2)=YBASE
SCALE(2,2)=DYSTP
SCALE(3,2)=YDISP
CALL DRWAXS(SCALE,NAME,1)
CALL DRWGRA(X,Y,NPNT,SCALE,4)
C
End grapgh
CALL GREND
STOP
END
’,17)
サンプルプログラム
8.7. 研究課題:モンテカルロ法による酔歩のシミュレーション
SUBROUTINE RAND_U(IX,RN)
C
C
Uniform random number generator
C
C
IX
RN
: Preceding/following random number
: Normalized random number
C
C
----------------------IX = a*IX + b (mod n)
C
C
RN = IX/n
----------------------DATA MODULO/1000000/,IA/111/,IB/9/
IX = MOD(IA*IX+IB,MODULO)
RN = FLOAT(IX)/FLOAT(MODULO-1)
RETURN
END
77
78
8.8
8.8.1
第8章
サンプルプログラム
研究課題:ベッセル方程式を解く
概要
物理学に現れるいろいろな常微分方程式は、変数を離散化し、それらを差分方程式に書き換えることに
よって、容易に数値解を求めることができる。解法としては、オイラー法、改良オイラー法およびルンゲクッタ法などがある。これらの方法を適用する場合、時間を離散化する幅と得られる数値解の収束性の間に
強い相関があることを銘記すべきである。
8.8.2
出力例
一例として、n = 0 のベッセル方程式をとり上げ、初期条件
⎧
⎪
= 1
⎨ y(0)
⎪
⎩
y (0)
limx→0 y x(x)
= 0
=
のもとに数値解を求める。ただし、ベッセルの方程式は2階常微分方程式なので
y1 (x) = y(x)
y2 (x) =
(8.1)
− 12
y (x)
(8.2)
と置き換えて、連立1階常微分方程式に書き直す必要がある。それぞれの解法の収束性はどうだろうか?図
書館にある関数表と見比べてみよう。
-Solution of bessel equation by Euler method
|
x
|
y
|
dy/dx
|
|-----------------------------------------------|
| 0.00
|
1.00000
|
0.00000
|
| 0.10
|
0.99775
| -0.04995
|
| 0.20
|
0.99052
| -0.09956
|
| 0.30
|
0.97836
| -0.14845
|
| 0.40
|
0.96135
| -0.19625
|
| 0.50
|
0.93962
| -0.24262
|
| 0.60
|
0.91334
| -0.28720
|
| 0.70
|
0.88269
| -0.32966
|
| 0.80
|
0.84790
| -0.36969
|
| 0.90
|
0.80923
| -0.40700
|
| 1.00
|
0.76696
| -0.44131
|
| 1.10
|
0.72140
| -0.47237
|
| 1.20
|
0.67290
| -0.49998
|
| 1.30
|
0.62179
| -0.52393
|
| 1.40
|
0.56846
| -0.54407
|
| 1.50
|
0.51329
| -0.56026
|
| 1.60
|
0.45668
| -0.57240
|
| 1.70
|
0.39905
| -0.58044
|
| 1.80
|
0.34079
| -0.58433
|
| 1.90
|
0.28234
| -0.58409
|
| 2.00
|
0.22409
| -0.57975
|
オイラー法による計算
8.8. 研究課題:ベッセル方程式を解く
-Solution of bessel equation by I/Euler method
|
x
|
y
|
dy/dx
|
|-----------------------------------------------|
| 0.00
|
1.00000
|
0.00000
|
| 0.10
|
0.99750
| -0.04994
|
| 0.20
|
0.99002
| -0.09950
|
| 0.30
|
0.97763
| -0.14832
|
| 0.40
|
0.96040
| -0.19603
|
| 0.50
|
0.93847
| -0.24227
|
| 0.60
|
0.91200
| -0.28670
|
| 0.70
|
0.88120
| -0.32900
|
| 0.80
|
0.84629
| -0.36884
|
| 0.90
|
0.80752
| -0.40595
|
| 1.00
|
0.76520
| -0.44005
|
| 1.10
|
0.71962
| -0.47090
|
| 1.20
|
0.67113
| -0.49829
|
| 1.30
|
0.62008
| -0.52202
|
| 1.40
|
0.56685
| -0.54194
|
| 1.50
|
0.51182
| -0.55793
|
| 1.60
|
0.45540
| -0.56989
|
| 1.70
|
0.39798
| -0.57776
|
| 1.80
|
0.33998
| -0.58151
|
| 1.90
|
0.28181
| -0.58115
|
| 2.00
|
0.22389
| -0.57672
|
改良オイラー法による計算
-Solution of bessel equation by R-Kutta method
|
x
|
y
|
dy/dx
|
|-----------------------------------------------|
| 0.00
|
1.00000
|
0.00000
|
| 0.10
|
0.99750
| -0.04994
|
| 0.20
|
0.99002
| -0.09950
|
| 0.30
|
0.97763
| -0.14832
|
| 0.40
|
0.96040
| -0.19603
|
| 0.50
|
0.93847
| -0.24227
|
| 0.60
|
0.91200
| -0.28670
|
| 0.70
|
0.88120
| -0.32900
|
| 0.80
|
0.84629
| -0.36884
|
| 0.90
|
0.80752
| -0.40595
|
| 1.00
|
0.76520
| -0.44005
|
| 1.10
|
0.71962
| -0.47090
|
| 1.20
|
0.67113
| -0.49829
|
| 1.30
|
0.62009
| -0.52202
|
| 1.40
|
0.56686
| -0.54195
|
| 1.50
|
0.51183
| -0.55794
|
| 1.60
|
0.45540
| -0.56990
|
| 1.70
|
0.39798
| -0.57776
|
| 1.80
|
0.33999
| -0.58152
|
| 1.90
|
0.28182
| -0.58116
|
| 2.00
|
0.22389
| -0.57672
|
ルンゲ-クッタ法による計算
79
80
第8章
C
Sample Program [Chapter 6, Example 1]
C
C
Solving Bessel Equation for n=0 case
by
1.Euler method
C
C
2.Improved Euler method
3.Runge-Kutta method
C
C
Variables
EXTERNAL F_BES
DIMENSION SOL_Y(2)
C
DIMENSION S1_DY(2),S2_DY(2),S3_DY(2),S4_DY(2)
Initial condition for bessel function(n=0)
C
DATA BES_0/1./,DBES_0/0./
Initial condition for the variable X
C
DATA X_0/0./
Parameters for iteration
DATA D_X/0.01/,N_REP/200/
C
C
C++++++++++++++++++++
C+ 1.Euler method
+
C++++++++++++++++++++
C
Numerical solution:by Euler method
XS=X_0
BES =BES_0
BESP=DBES_0
WRITE(6,1000)
1000 FORMAT(1H ,’ -Solution of bessel equation by Euler method’,/
+
1H ,’|
x
|
y
|
dy/dx
|’,/
+
1H ,’|-----------------------------------------------|’)
WRITE(6,2000) XS,BES,BESP
2000 FORMAT(1H ,’|’,F5.2,10X,’|’,2(F10.5,5X,’|’))
DO 10 I=1,N_REP
SOL_X
=XS
SOL_Y(1)=BES
SOL_Y(2)=BESP
CALL F_STEP(D_X,SOL_X,SOL_Y,S1_DY,F_BES)
XS =XS +D_X
BES =BES +S1_DY(1)
BESP=BESP+S1_DY(2)
IF(MOD(I,10).EQ.0) THEN
WRITE(6,2000) XS,BES, BESP
ENDIF
10 CONTINUE
C
C
サンプルプログラム
8.8. 研究課題:ベッセル方程式を解く
C+++++++++++++++++++++++++++
C+ 2.Improved Euler method +
C+++++++++++++++++++++++++++
C
Numerical solution:by Improved Euler method
XS=X_0
BES =BES_0
BESP=DBES_0
WRITE(6,1100)
1100 FORMAT(1H ,’ -Solution of bessel equation by I/Euler method’,/
+
+
1H ,’|
x
|
y
|
dy/dx
|’,/
1H ,’|-----------------------------------------------|’)
WRITE(6,2000) XS,BES,BESP
DO 20 I=1,N_REP
SOL_X
=XS
SOL_Y(1)=BES
SOL_Y(2)=BESP
CALL F_STEP(D_X,SOL_X,SOL_Y,S1_DY,F_BES)
SOL_X
=XS +D_X
SOL_Y(1)=BES +S1_DY(1)
SOL_Y(2)=BESP+S1_DY(2)
CALL F_STEP(D_X,SOL_X,SOL_Y,S2_DY,F_BES)
XS =XS +D_X
BES =BES +(S1_DY(1)+S2_DY(1))/2.
BESP=BESP+(S1_DY(2)+S2_DY(2))/2.
IF(MOD(I,10).EQ.0) THEN
WRITE(6,2000) XS,BES, BESP
ENDIF
20 CONTINUE
C
C
C++++++++++++++++++++++++
C+ 3.Runge-Kutta method +
C++++++++++++++++++++++++
C
Numerical solution:by Runge-Kutta method
XS=X_0
BES =BES_0
BESP=DBES_0
WRITE(6,1200)
1200 FORMAT(1H ,’ -Solution of bessel equation by R-Kutta method’,/
+
+
1H ,’|
x
|
y
|
dy/dx
|’,/
1H ,’|-----------------------------------------------|’)
WRITE(6,2000) XS,BES,BESP
DO 30 I=1,N_REP
SOL_X
=XS
SOL_Y(1)=BES
81
82
第8章
SOL_Y(2)=BESP
CALL F_STEP(D_X,SOL_X,SOL_Y,S1_DY,F_BES)
SOL_X
=XS +0.5*D_X
SOL_Y(1)=BES +0.5*S1_DY(1)
SOL_Y(2)=BESP+0.5*S1_DY(2)
CALL F\STEP(D_X,SOL_X,SOL_Y,S2_DY,F_BES)
SOL_X
=XS +0.5*D_X
SOL_Y(1)=BES +0.5*S2_DY(1)
SOL_Y(2)=BESP+0.5*S2_DY(2)
CALL F_STEP(D_X,SOL_X,SOL_Y,S3_DY,F_BES)
SOL_X
=XS +
D_X
SOL_Y(1)=BES +
SOL_Y(2)=BESP+
S3_DY(1)
S3_DY(2)
CALL F_STEP(D_X,SOL_X,SOL_Y,S4_DY,F_BES)
XS =XS +D_X
BES =BES +(S1_DY(1)+2.*S2_DY(1)+2.*S3_DY(1)+S4_DY(1))/6.
BESP=BESP+(S1_DY(2)+2.*S2_DY(2)+2.*S3_DY(2)+S4_DY(2))/6.
IF(MOD(I,10).EQ.0) THEN
WRITE(6,2000) XS,BES, BESP
ENDIF
30 CONTINUE
STOP
END
FUNCTION F_BES(X,B,BP,I)
C
Righthand side of diff. equations
IF(I.EQ.1) THEN
F_BES=BP
ELSE IF(I.EQ.2) THEN
IF(X.LT.1.E-10) THEN
F_BES=-(-0.5+B)
ELSE
F_BES=-(BP/X+B)
ENDIF
ENDIF
RETURN
END
SUBROUTINE F_STEP(DX,X,Y,DY,FUNC)
DIMENSION Y(2),DY(2)
B =Y(1)
BP=Y(2)
DO 10 I=1,2
DY(I)=DX*FUNC(X,B,BP,I)
10 CONTINUE
RETURN
END
サンプルプログラム
8.9. 研究課題:人工衛星の軌道
8.9
8.9.1
83
研究課題:人工衛星の軌道
概要
力学に現れるいろいろな常微分方程式も、基本的には前述のベッセル方程式の解法と同様にして、容易に
数値解を求めることができる。具体的には、重心系で考えることにすると、(x(t), y(t)) についての連立2
階常微分方程式を解くことに帰着する。テキストで学んだ微分方程式の数値解法を適用するには、更に
⎧
⎪
y1 (t) = x(t)
⎪
⎪
⎪
⎨ y (t) = x (t)
2
(8.3)
⎪
y3 (t) = y(t)
⎪
⎪
⎪
⎩ y (t) = y (t)
4
と置き換えて、この方程式を連立1階常微分方程式に書き直す必要がある。
8.9.2
出力例
一例として、人工衛星(初期条件:高度 100km、速度 7.9km/s)の軌道の数値解をとり上げ、オイラー
法、改良オイラー法およびルンゲ-クッタ法について、それぞれの解法の収束性を調べてみよう。
数値解の例;一番外側がオイラー法、内側2つが
改良オイラー法およびルンゲ-クッタ法
84
C
第8章
Sample Program [Chapter 6, Study 1]
C
C
Finding an orbit of artificial satellite
by
1.Euler method
C
C
2.Improved Euler method
3.Runge-Kutta method
C
C
(in MKS unit)
Variables
EXTERNAL F_GRA
DIMENSION TRC_Y(4)
C
DIMENSION T1_DY(4),T2_DY(4),T3_DY(4),T4_DY(4)
Parameters on the earth
C
DATA E_RADI/6.38E6/,E_XCEN/0./,E_YCEN/0./
Initial condition for the artificial satellite
C
DATA S_TIME/0./,S_X/6.48E6/,S_Y/0./,S_VX/0./,S_VY/7.9E3/
Parameters for graphic window
DATA V_X0/-12.E6/,V_Y0/-6.7E6/,V_X1/12.E6/,V_Y1/6.71E6/
C
PARAMETERS FOR ITERATION
DATA D_TIME/16./,N_REP/332/
C
Initialization
CALL GRINIT
C
Define virtual graphic window
CALL V_WIND(V_X0,V_Y0,V_X1,V_Y1)
C
Write title
CALL SETCRS(250.,5.)
CALL PRTCHR(’Tracking Satellite’,18)
CALL SETCRS(150.,25.)
C
CALL PRTCHR(’by Euler/Modified Euler/Runge-Kutta Methods’,43)
Draw the earth
CALL PAINTF(1)
CALL V_CIRC(E_XCEN,E_YCEN,E_RADI,1,0.,6.29)
CALL PAINTF(0)
C******CAUTION****************************************************
C
IF YOU WANT TO KNOW ABOUT THE TRACK QUANTITATIVELY,
C
YOU MUST ACTIVATE THE FOLLOWING WRITE-STATEMENTS!!
C*****************************************************************
C
C
C++++++++++++++++++++
C+ 1.EULER METHOD
+
C++++++++++++++++++++
C
Tracking the satellite:by euler method
CALL V_CIRC(S_X,S_Y,0.2,4,0.,0.)
TIME=S_TIME
XS
YS
=S_X-E_XCEN
=S_Y-E_YCEN
サンプルプログラム
8.9. 研究課題:人工衛星の軌道
VX
=S_VX
VY =S_VY
S_XS=S_X
C
S_YS=S_Y
WRITE(6,1000) XS,YS,VX,VY,TIME
C1000 FORMAT(1H ,’*****’,5E13.4)
DO 10 I=1,N_REP
TRC_T
=TIME
TRC_Y(1)=XS
TRC_Y(2)=YS
TRC_Y(3)=VX
TRC_Y(4)=VY
CALL F_STEP(D_TIME,TRC_T,TRC_Y,T1_DY,F_GRA)
TIME=TIME+D_TIME
XS
YS
=XS+T1_DY(1)
=YS+T1_DY(2)
VX
VY
=VX+T1_DY(3)
=VY+T1_DY(4)
IF(MOD(I,10).EQ.0) THEN
S_XN=XS+E_XCEN
S_YN=YS+E_YCEN
CALL V_LINE(S_XS,S_YS,S_XN,S_YN,1)
CALL V_CIRC(S_XN,S_YN,0.2,1,0.,0.)
S_XS=S_XN
S_YS=S_YN
ENDIF
C
10 CONTINUE
WRITE(6,1000) XS,YS,VX,VY,TIME
C
C
C+++++++++++++++++++++++++++
C+ 2.IMPROVED EULER METHOD +
C+++++++++++++++++++++++++++
C
Tracking the satellite:by improved euler method
TIME=S_TIME
XS
YS
=S_X-E_XCEN
=S_Y-E_YCEN
VX
VY
=S_VX
=S_VY
S_XS=S_X
S_YS=S_Y
DO 20 I=1,N_REP
TRC_T
=TIME
TRC_Y(1)=XS
TRC_Y(2)=YS
85
86
第8章
TRC_Y(3)=VX
TRC_Y(4)=VY
CALL F_STEP(D_TIME,TRC_T,TRC_Y,T1_DY,F_GRA)
TRC_T
=TIME+D_TIME
TRC_Y(1)=XS +T1_DY(1)
TRC_Y(2)=YS
TRC_Y(3)=VX
+T1_DY(2)
+T1_DY(3)
TRC_Y(4)=VY +T1_DY(4)
CALL F_STEP(D_TIME,TRC_T,TRC_Y,T2_DY,F_GRA)
TIME=TIME+D_TIME
XS =XS+(T1_DY(1)+T2_DY(1))/2.
YS
VX
=YS+(T1_DY(2)+T2_DY(2))/2.
=VX+(T1_DY(3)+T2_DY(3))/2.
VY =VY+(T1_DY(4)+T2_DY(4))/2.
IF(MOD(I,10).EQ.0) THEN
S_XN=XS+E_XCEN
S_YN=YS+E_YCEN
CALL V_LINE(S_XS,S_YS,S_XN,S_YN,2)
CALL V_CIRC(S_XN,S_YN,0.2,2,0.,0.)
S_XS=S_XN
S_YS=S_YN
ENDIF
C
20 CONTINUE
WRITE(6,1000) XS,YS,VX,VY,TIME
C
C
C++++++++++++++++++++++++
C+ 3.RUNGE-KUTTA METHOD +
C++++++++++++++++++++++++
C
Tracking the satellite:by runge-kutta method
TIME=S_TIME
XS
YS
=S_X-E_XCEN
=S_Y-E_YCEN
VX
VY
=S_VX
=S_VY
S_XS=S_X
S_YS=S_Y
DO 30 I=1,N_REP
TRC_T
=TIME
TRC_Y(1)=XS
TRC_Y(2)=YS
TRC_Y(3)=VX
TRC_Y(4)=VY
CALL F_STEP(D_TIME,TRC_T,TRC_Y,T1_DY,F_GRA)
TRC_T
=TIME+0.5*D_TIME
サンプルプログラム
8.9. 研究課題:人工衛星の軌道
87
TRC_Y(1)=XS
+0.5*T1_DY(1)
TRC_Y(2)=YS
TRC_Y(3)=VX
+0.5*T1_DY(2)
+0.5*T1_DY(3)
TRC_Y(4)=VY +0.5*T1_DY(4)
CALL F_STEP(D_TIME,TRC_T,TRC_Y,T2_DY,F_GRA)
TRC_T
=TIME+0.5*D_TIME
TRC_Y(1)=XS +0.5*T2_DY(1)
TRC_Y(2)=YS
TRC_Y(3)=VX
+0.5*T2_DY(2)
+0.5*T2_DY(3)
TRC_Y(4)=VY +0.5*T2_DY(4)
CALL F_STEP(D_TIME,TIME,TRC_Y,T3_DY,F_GRA)
TRC_T
=TIME+
TRC_Y(1)=XS +
D_TIME
T3_DY(1)
TRC_Y(2)=YS
TRC_Y(3)=VX
+
+
T3_DY(2)
T3_DY(3)
TRC_Y(4)=VY
+
T3_DY(4)
CALL F_STEP(D_TIME,TRC_T,TRC_Y,T4_DY,F_GRA)
TIME=TIME+D_TIME
XS
YS
=XS+(T1_DY(1)+2.*T2_DY(1)+2.*T3_DY(1)+T4_DY(1))/6.
=YS+(T1_DY(2)+2.*T2_DY(2)+2.*T3_DY(2)+T4_DY(2))/6.
VX
VY
=VX+(T1_DY(3)+2.*T2_DY(3)+2.*T3_DY(3)+T4_DY(3))/6.
=VY+(T1_DY(4)+2.*T2_DY(4)+2.*T3_DY(4)+T4_DY(4))/6.
IF(MOD(I,10).EQ.0) THEN
S_XN=XS+E_XCEN
S_YN=YS+E_YCEN
CALL V_LINE(S_XS,S_YS,S_XN,S_YN,4)
CALL V_CIRC(S_XN,S_YN,0.2,4,0.,0.)
S_XS=S_XN
S_YS=S_YN
ENDIF
30 CONTINUE
C
C
WRITE(6,1000) XS,YS,VX,VY,TIME
END GRAPH
CALL GREND
STOP
END
FUNCTION F_GRA(TIME,X,Y,VX,VY,I)
C
C
Righthand side of diff. equations
-In present case, time independent!!
DATA E_MASS/5.97E24/,C_GRA/6.67E-11/
IF(I.EQ.1) THEN
F_GRA=VX
ELSE IF(I.EQ.2) THEN
F_GRA=VY
ELSE IF(I.EQ.3) THEN
88
第8章
R
=SQRT(X*X+Y*Y)
F_GRA=-C_GRA*E_MASS*X/(R**3)
ELSE IF(I.EQ.4) THEN
R
=SQRT(X*X+Y*Y)
F_GRA=-C_GRA*E_MASS*Y/(R**3)
ENDIF
RETURN
END
SUBROUTINE F_STEP(DTIME,TIME,Y,DY,FUNC)
DIMENSION Y(4),DY(4)
XP=Y(1)
YP=Y(2)
VX=Y(3)
VY=Y(4)
DO 10 I=1,4
DY(I)=DTIME*FUNC(TIME,XP,YP,VX,VY,I)
10 CONTINUE
RETURN
END
サンプルプログラム
8.10. 研究課題:ボイジャーと木星 -重力加速-
89
8.10
研究課題:ボイジャーと木星 -重力加速-
8.10.1
概要
力学に現れる問題で必ずしも自明でない問題の例として、惑星探査機ボイジャーの木星による重力加速
の機構について検討してみよう。
原理的には、この問題は人工衛星の軌道計算と全くパラレルな問題で、初期条件と参照座標系が違うだ
けなのであるが、われわれの理解の困難さは相当程度に高くなってくる。実際には、いろいろな初期条件や
さまざまな参照座標系をとって比較検討することによって、加速機構の本質が次第にはっきりと見えてくる
だろう。
8.10.2
出力例
一例として、初期条件
ボイジャー
木星
⎧
⎪
x(0)
⎪
⎪
⎪
⎨ y(0)
⎪
x (0)
⎪
⎪
⎪
⎩ y (0)
⎧
⎪
X(0)
⎪
⎪
⎪
⎨ Y (0)
⎪
X (0)
⎪
⎪
⎪
⎩ Y (0)
=
=
50 × 109 m
8 × 109 m
=
=
8 × 103 m/s
0m/s
=
=
0m
0m
=
=
13.5 × 103 m/s
0m/s
のもとに、Runge-Kutta 法を使って、軌道の数値解を求め、いろいろな参照座標系で描いてみよう。
木星の重力加速を受けるボイジャー
(8.4)
(8.5)
90
C
第8章
Sample Program [Chapter 6, Study 2]
C
C
C
C
サンプルプログラム
Examining gravitational acceleration of Voyager
by
Runge-Kutta method
(in MKS unit)
Variables
EXTERNAL F_GRA
DIMENSION TRC_Y(4)
C
DIMENSION T1_DY(4),T2_DY(4),T3_DY(4),T4_DY(4)
Parameters on the Jupiter
C
DATA Z_RADI/71.6E6/,Z_X/0./,Z_Y/0./,Z_VX/13.5E3/,Z_VY/0./
Initial condition for Voyager
C
DATA S_TIME/0./,S_X/50000.E6/,S_Y/8000.E6/,S_VX/8.E3/,S_VY/0./
Parameters for graphic window
C
DATA V_X0/-1000.E6/,V_Y0/-56000.E6/,V_X1/192000.E6/,V_Y1/56000.E6/
Parameters for iteration
DATA D_TIME/300./,N_REP/60100/
C
Initialization
CALL GRINIT
C
Z_RADI=10.*Z_RADI
Define virtual graphic window
C
CALL V_WIND(V_X0,V_Y0,V_X1,V_Y1)
Write title
CALL SETCRS(250.,10.)
CALL PRTCHR(’Voyager & Jupiter’,17)
CALL SETCRS(170.,30.)
CALL PRTCHR(’-Gravitational Acceleration(dT=7.5d)’,36)
C
Tacking Voyager by runge-kutta method
CALL V_LINE(S_X,S_Y,Z_X,Z_Y,2)
CALL PAINTF(1)
CALL V_CIRC(S_X,S_Y,0.2,4,0.,6.29)
CALL V_CIRC(Z_X,Z_Y,Z_RADI,1,0.,6.29)
CALL PAINTF(0)
TIME=S_TIME
XS
YS
=S_X
=S_Y
VX
VY
=S_VX
=S_VY
XZ
YZ
=Z_X
=Z_Y
C
WRITE(6,1000) XS,YS,VX,VY,TIME
C1000 FORMAT(1H ,’*****’,5E13.3)
DO 10 I=1,N_REP
TRC_T
=TIME
TRC_Y(1)=XS
TRC_Y(2)=YS
8.10. 研究課題:ボイジャーと木星 -重力加速TRC_Y(3)=VX
TRC_Y(4)=VY
CALL F_STEP(D_TIME,TRC_T,TRC_Y,T1_DY,F_GRA)
TRC_T
=TIME+0.5*D_TIME
TRC_Y(1)=XS +0.5*T1_DY(1)
TRC_Y(2)=YS
TRC_Y(3)=VX
+0.5*T1_DY(2)
+0.5*T1_DY(3)
TRC_Y(4)=VY +0.5*T1_DY(4)
CALL F_STEP(D_TIME,TRC_T,TRC_Y,T2_DY,F_GRA)
TRC_T
=TIME+0.5*D_TIME
TRC_Y(1)=XS +0.5*T2_DY(1)
TRC_Y(2)=YS
TRC_Y(3)=VX
+0.5*T2_DY(2)
+0.5*T2_DY(3)
TRC_Y(4)=VY +0.5*T2_DY(4)
CALL F_STEP(D_TIME,TIME,TRC_Y,T3_DY,F_GRA)
TRC_T
=TIME+
D_TIME
TRC_Y(1)=XS
TRC_Y(2)=YS
+
+
T3_DY(1)
T3_DY(2)
TRC_Y(3)=VX
TRC_Y(4)=VY
+
+
T3_DY(3)
T3_DY(4)
CALL F_STEP(D_TIME,TRC_T,TRC_Y,T4_DY,F_GRA)
TIME=TIME+D_TIME
XS
YS
=XS+(T1_DY(1)+2.*T2_DY(1)+2.*T3_DY(1)+T4_DY(1))/6
=YS+(T1_DY(2)+2.*T2_DY(2)+2.*T3_DY(2)+T4_DY(2))/6
VX
VY
=VX+(T1_DY(3)+2.*T2_DY(3)+2.*T3_DY(3)+T4_DY(3))/6
=VY+(T1_DY(4)+2.*T2_DY(4)+2.*T3_DY(4)+T4_DY(4))/6
XZ
YZ
=XZ+D_TIME*Z_VX
=YZ+D_TIME*Z_VY
IF(MOD(I,2160).EQ.0) THEN
CALL V_LINE(XS,YS,XZ,YZ,2)
CALL PAINTF(1)
CALL V_CIRC(XS,YS,0.2,4,0.,6.29)
CALL V_CIRC(XZ,YZ,Z_RADI,1,0.,6.29)
C
CALL PAINTF(0)
WRITE(6,1000) XS,YS,VX,VY,TIME
ENDIF
10 CONTINUE
C
C
WRITE(6,1000) XS,YS,VX,VY,TIME
END GRAPH
CALL GREND
STOP
END
FUNCTION F_GRA(TIME,X,Y,VX,VY,I)
C
Parameters on the Jupiter
DATA C_GRA /6.67E-11/
91
92
第8章
DATA Z_MASS/1.90E27/,Z_X/0./,Z_Y/0./,Z_VX/13.1E3/,Z_VY/0./
XZ=Z_X+Z_VX*TIME
YZ=Z_Y+Z_VY*TIME
IF(I.EQ.1) THEN
F_GRA=VX
ELSE IF(I.EQ.2) THEN
F_GRA=VY
ELSE IF(I.EQ.3) THEN
R
=SQRT((X-XZ)**2+(Y-YZ)**2)
F_GRA=-C_GRA*Z_MASS*(X-XZ)/(R**3)
ELSE IF(I.EQ.4) THEN
R
=SQRT((X-XZ)**2+(Y-YZ)**2)
F_GRA=-C_GRA*Z_MASS*(Y-YZ)/(R**3)
ENDIF
RETURN
END
SUBROUTINE F_STEP(DTIME,TIME,Y,DY,FUNC)
DIMENSION Y(4),DY(4)
XP=Y(1)
YP=Y(2)
VX=Y(3)
VY=Y(4)
DO 10 I=1,4
DY(I)=DTIME*FUNC(TIME,XP,YP,VX,VY,I)
10 CONTINUE
RETURN
END
サンプルプログラム
8.11. 研究課題:3体問題 -天体のカオス-
8.11
研究課題:3体問題 -天体のカオス-
8.11.1
概要
93
古くから取り上げられている力学上の問題で、現在でもよく分かっていない問題の1つに、3体問題があ
る。このような問題に取り組むことにより、力学の持つ別の側面、デモーニッシュな奥深さに気付かされる
だろう。
3体問題は、重心運動の自由度と、エネルギー保存則および角運動量保存則による制約を除いて、総計8
個の自由度を持つ。その結果、人工衛星やボイジャーの場合(自由度は2個)と比べて、大変に複雑にな
る。一般的に、自由度が3以上の非線形力学系ではカオスが出現するといわれているが、3体問題でもカオ
スとの遭遇は避けられない。
8.11.2
出力例
一例として、対称的な初期条件を基準にして、そこからわずかに離れた初期条件をとった場合の軌道の安
定性を調べてみよう。具体的には、
1. 対称的な初期条件
• 同一質量(地球相当)の3物体
• 互いの距離 20 万 km の正三角形配置
• 各辺に沿って時計周り方向に速度 1km/s で運動
2. わずかだけ 1 の配置からずれた初期条件
(天体2が重心方向へ 200km(0.1%)移動)
3. さらに 1 の配置からずれた初期条件
(天体2が重心方向へ 2000km(1%)移動)
について、Runge-Kutta 法を使って、軌道の数値解を求め、結果を図に描いてみよう。
94
第8章
対称的な初期条件(左から物体1、2、3)
わずかにずれた初期条件
さらにずれた初期条件
サンプルプログラム
8.11. 研究課題:3体問題 -天体のカオスC
C
C
C
C
95
Sample Program [Chapter 6, Study 3]
Challenging 3-body problem
by
Runge-Kutta method
(in MKS unit)
Variables
EXTERNAL F_GRA
DIMENSION TRC_Y(4,3)
DIMENSION T1_DY(4,3),T2_DY(4,3),T3_DY(4,3),T4_DY(4,3)
DIMENSION XS(3),YS(3),VX(3),VY(3)
C
DIMENSION S_XS(3),S_YS(3)
Initial condition for the objects
DIMENSION S_X(3),S_Y(3),S_VX(3),S_VY(3),S_RADI(3),IS_COL(3)
DATA S_TIME/0./
C
+++++Approximately symmetric condition+++++
DATA S_X/-1.E8,
0., 1.E8/
DATA S_Y/
0., 1.732E8,
0./
DATA S_VX/
0.5E3,
0.5E3,-1.E3/
DATA S_VY/ 0.866E3,-0.866E3,
0./
C
C
+++++++++++++++++++++++++++++++++++++++++++
+++++Quasi-symmetric condition #1++++++++++
C
C
DATA S_X/-1.E8,
0., 1.E8/
DATA S_Y/
0., 1.730E8,
0./
C
C
DATA S_VX/
0.5E3,
0.5E3,-1.E3/
DATA S_VY/ 0.866E3,-0.866E3,
0./
C
C
+++++++++++++++++++++++++++++++++++++++++++
+++++Quasi-symmetric condition #2++++++++++
C
C
DATA S_X/-1.E8,
0., 1.E8/
DATA S_Y/
0., 1.720E8,
0./
C
C
DATA S_VX/
0.5E3,
0.5E3,-1.E3/
DATA S_VY/ 0.866E3,-0.866E3,
0./
C
+++++++++++++++++++++++++++++++++++++++++++
DATA S_RADI/3*6.38E6/
DATA IS_COL/1,2,4/
C
Parameters for graphic window
DATA V_X0/-2.5E8/,V_Y0/-0.5E8/,V_X1/2.5E8/,V_Y1/2.5E8/
C
Parameters for iteration
DATA D_TIME/60./,N_REP/4500/
C
INITIALIZATION
CALL GRINIT
C
Define virtual graphic window
CALL V_WIND(V_X0,V_Y0,V_X1,V_Y1)
C
Write title
CALL SETCRS(250.,30.)
CALL PRTCHR(’ 3-Body Problem
CALL SETCRS(250.,50.)
’,18)
96
第8章
CALL PRTCHR(’-Quasi-Symmetric -’,18)
C
Tracking the objects by Runge-Kutta method
DO 10 L=1,3
CALL PAINTF(1)
CALL V_CIRC(S_X(L),S_Y(L),S_RADI(L),IS_COL(L),0.,0.)
CALL PAINTF(0)
10 CONTINUE
TIME=S_TIME
DO 20 L=1,3
XS(L)
YS(L)
=S_X(L)
=S_Y(L)
VX(L)
VY(L)
=S_VX(L)
=S_VY(L)
S_XS(L)=S_X(L)
S_YS(L)=S_Y(L)
20 CONTINUE
DO 30 I=1,N_REP
TRC_T
=TIME
DO 21 L=1,3
TRC_Y(1,L)=XS(L)
TRC_Y(2,L)=YS(L)
TRC_Y(3,L)=VX(L)
21
TRC_Y(4,L)=VY(L)
CONTINUE
CALL F_STEP(D_TIME,TRC_T,TRC_Y,T1_DY,F_GRA)
TRC_T
=TIME+0.5*D_TIME
DO 22 L=1,3
TRC_Y(1,L)=XS(L)+0.5*T1_DY(1,L)
TRC_Y(2,L)=YS(L)+0.5*T1_DY(2,L)
TRC_Y(3,L)=VX(L)+0.5*T1_DY(3,L)
TRC_Y(4,L)=VY(L)+0.5*T1_DY(4,L)
22
CONTINUE
CALL F_STEP(D_TIME,TRC_T,TRC_Y,T2_DY,F_GRA)
TRC_T
=TIME+0.5*D_TIME
DO 23 L=1,3
TRC_Y(1,L)=XS(L)+0.5*T2_DY(1,L)
TRC_Y(2,L)=YS(L)+0.5*T2_DY(2,L)
TRC_Y(3,L)=VX(L)+0.5*T2_DY(3,L)
TRC_Y(4,L)=VY(L)+0.5*T2_DY(4,L)
23
CONTINUE
CALL F_STEP(D_TIME,TIME,TRC_Y,T3_DY,F_GRA)
TRC_T
=TIME+
DO 24 L=1,3
D_TIME
TRC_Y(1,L)=XS(L)+
TRC_Y(2,L)=YS(L)+
T3_DY(1,L)
T3_DY(2,L)
サンプルプログラム
8.11. 研究課題:3体問題 -天体のカオス-
24
TRC_Y(3,L)=VX(L)+
T3_DY(3,L)
TRC_Y(4,L)=VY(L)+
CONTINUE
T3_DY(4,L)
CALL F_STEP(D_TIME,TRC_T,TRC_Y,T4_DY,F_GRA)
TIME=TIME+D_TIME
DO 25 L=1,3
XS(L)=XS(L) +(T1_DY(1,L)+2.*T2_DY(1,L)
+
+2.*T3_DY(1,L)+T4_DY(1,L))/6.
YS(L)=YS(L) +(T1_DY(2,L)+2.*T2_DY(2,L)
+
+2.*T3_DY(2,L)+T4_DY(2,L))/6.
VX(L)=VX(L) +(T1_DY(3,L)+2.*T2_DY(3,L)
+
+2.*T3_DY(3,L)+T4_DY(3,L))/6.
VY(L)=VY(L) +(T1_DY(4,L)+2.*T2_DY(4,L)
+
25
+2.*T3_DY(4,L)+T4_DY(4,L))/6.
CONTINUE
IF(MOD(I,60).EQ.0) THEN
DO 26 L=1,3
CALL V_LINE(S_XS(L),S_YS(L),XS(L),YS(L),IS_COL(L))
CALL PAINTF(1)
CALL V_CIRC(XS(L),YS(L),S_RADI(L),IS_COL(L),0.,0.)
CALL PAINTF(0)
S_XS(L)=XS(L)
S_YS(L)=YS(L)
CONTINUE
26
ENDIF
30 CONTINUE
C
End graph
CALL GREND
STOP
END
FUNCTION F_GRA(TIME,X,Y,VX,VY,I,J)
C
Parameters on the objects
DIMENSION X(3),Y(3),VX(3),VY(3)
DIMENSION S_MASS(3)
DATA C_GRA /6.67E-11/
DATA S_MASS/3*5.97E24/
IF(I.EQ.1) THEN
F_GRA=VX(J)
ELSE IF(I.EQ.2) THEN
F_GRA=VY(J)
ELSE IF(I.EQ.3) THEN
F_GRA=0.
DO 10 L=1,3
IF(L.NE.J) THEN
R=SQRT((X(J)-X(L))**2+(Y(J)-Y(L))**2)
97
98
第8章
F_GRA=F_GRA-C_GRA*S_MASS(L)*(X(J)-X(L))/(R**3)
10
ENDIF
CONTINUE
ELSE IF(I.EQ.4) THEN
F_GRA=0.
DO 20 L=1,3
IF(L.NE.J) THEN
R=SQRT((X(J)-X(L))**2+(Y(J)-Y(L))**2)
F_GRA=F_GRA-C_GRA*S_MASS(L)*(Y(J)-Y(L))/(R**3)
20
ENDIF
CONTINUE
ENDIF
RETURN
END
SUBROUTINE F_STEP(DTIME,TIME,Y,DY,FUNC)
DIMENSION Y(4,3),DY(4,3)
DIMENSION XP(3),YP(3),VX(3),VY(3)
DO 10 L=1,3
XP(L)=Y(1,L)
YP(L)=Y(2,L)
VX(L)=Y(3,L)
VY(L)=Y(4,L)
10 CONTINUE
DO 20 I=1,4
DO 11 L=1,3
DY(I,L)=DTIME*FUNC(TIME,XP,YP,VX,VY,I,L)
11
CONTINUE
20 CONTINUE
RETURN
END
サンプルプログラム
8.12. 研究課題:ボルツマン分布則 -緩和による平衡状態の実現-
8.12
研究課題:ボルツマン分布則 -緩和による平衡状態の実現-
8.12.1
概要
99
古典的な分子運動論でよく知られているボルツマン分布則は、統計力学に現れるカノニカル分布の一例
として解釈されているが、ここでは全く別の視点からこの問題にアプローチしてみよう。すなわち、極端な
非平衡状態から出発し、衝突の繰返しによって分子集団の速度分布が漸近的にボルツマン分布則になるこ
とを、シミュレーションによって確かめてみる。なぜそのようにして得られた「平衡状態」がボルツマン分
布則を実現しているのかは、必ずしも自明ではない。実際、個別の衝突は位相空間内に均一な粒子の再配置
を起こす訳ではない。予想できることは、多数回の衝突によってある種の<確率的な意味での固定点>(衝
突によって変わらない不変分布)に到達しているということである。
8.12.2
出力例
一例として、分子を剛体球として考えて分子同士の衝突の運動学を仮定したときの、分子の速度分布の
緩和をシミュレーションし、「平衡状態」の速度分布をヒストグラムで見てみよう。具体的には、2000
個の酸素分子 O2 について、各々運動エネルギーが 32 kB T (一定)でランダムな運動方向を持っているとい
う初期状態を仮定し、分子同士の衝突を30000回起こした後の状態における速度分布を調べる。ただ
し、T = 300K とする。
VARIABLE
CONTENTS
GRAPH OF DISTRIBUTION
0
100
200
300
400
500
+----+----+----+----+----+----+----+----+----+----+
+*
|
|
|
|
|
|
|
|
|
+
+
|*
|
|
|
|
|
|
|
|
+
+
|
|
| * |
|
|
|
|
|
+
+
|
|
|
|
|
*
|
|
|
+
+----|----|----|----|----|----*----|----|----|----+
+
|
|
|
|
|
| * |
|
|
+
+
|
|
|
|
| * |
|
|
|
+
+
|
|
|
*
|
|
|
|
|
+
+
|
| * |
|
|
|
|
|
|
+
+----|---*|----|----|----|----|----|----|----|----+
+
*
|
|
|
|
|
|
|
|
+
+
*|
|
|
|
|
|
|
|
|
+
+ * |
|
|
|
|
|
|
|
|
+
+*
|
|
|
|
|
|
|
|
|
+
*----|----|----|----|----|----|----|----|----|----+
*
|
|
|
|
|
|
|
|
|
+
*
|
|
|
|
|
|
|
|
|
+
*
|
|
|
|
|
|
|
|
|
+
*
|
|
|
|
|
|
|
|
|
+
*----|----|----|----|----|----|----|----|----|----+
*
|
|
|
|
|
|
|
|
|
+
*
|
|
|
|
|
|
|
|
|
+
*
|
|
|
|
|
|
|
|
|
+
*
|
|
|
|
|
|
|
|
|
+
*----|----|----|----|----|----|----|----|----|----+
+----+----+----+----+----+----+----+----+----+----+
0.0000
0.0787
11
0.1575
64
0.2362
169
0.3150
302
0.3937
304
0.4724
324
0.5512
283
0.6299
201
0.7087
133
0.7874
87
0.8661
54
0.9449
36
1.0236
18
1.1024
8
1.1811
2
1.2598
1
1.3386
1
1.4173
1
1.4961
1
1.5748
0
1.6536
0
1.7323
0
1.8110
0
1.8898
0
1.9685
0
2.0473
* 0.1000e+06
<NUMBER OF ENTRIES> TOT:
2000.
|
|
UNDER RANGE | IN RANGE | OVER RANGE
0. |
2000. |
0.
|v | の分布
100
VARIABLE
第8章
CONTENTS
GRAPH OF DISTRIBUTION
0
100
200
300
400
500
+----+----+----+----+----+----+----+----+----+----+
+
|
|
|
|
| * |
|
|
|
+
+
|
|
|
|
|*
|
|
|
|
+
+
|
|
|
|
|*
|
|
|
|
+
+
|
|
|
| * |
|
|
|
|
+
+----|----|----|----*----|----|----|----|----|----+
+
|
|
| * |
|
|
|
|
|
+
+
|
| * |
|
|
|
|
|
|
+
+
|
|*
|
|
|
|
|
|
|
+
+
|
*
|
|
|
|
|
|
|
+
+----|---*|----|----|----|----|----|----|----|----+
+
*
|
|
|
|
|
|
|
|
+
+
*|
|
|
|
|
|
|
|
|
+
+ * |
|
|
|
|
|
|
|
|
+
+ * |
|
|
|
|
|
|
|
|
+
+*---|----|----|----|----|----|----|----|----|----+
+*
|
|
|
|
|
|
|
|
|
+
+*
|
|
|
|
|
|
|
|
|
+
*
|
|
|
|
|
|
|
|
|
+
*
|
|
|
|
|
|
|
|
|
+
*----|----|----|----|----|----|----|----|----|----+
*
|
|
|
|
|
|
|
|
|
+
*
|
|
|
|
|
|
|
|
|
+
*
|
|
|
|
|
|
|
|
|
+
*
|
|
|
|
|
|
|
|
|
+
*----|----|----|----|----|----|----|----|----|----+
+----+----+----+----+----+----+----+----+----+----+
0.0000
0.0455
280
0.0909
263
0.1364
261
0.1818
233
0.2273
196
0.2728
184
0.3182
132
0.3637
109
0.4091
102
0.4546
85
0.5001
52
0.5455
35
0.5910
22
0.6365
17
0.6819
13
0.7274
5
0.7728
7
0.8183
0
0.8638
2
0.9092
1
0.9547
0
1.0001
0
1.0456
0
1.0911
0
1.1365
1
1.1820
* 0.1000e+06
<NUMBER OF ENTRIES> TOT:
2000.
|
|
UNDER RANGE | IN RANGE | OVER RANGE
0. |
2000. |
0.
vx の分布
VARIABLE
CONTENTS
GRAPH OF DISTRIBUTION
0
100
200
300
400
500
+----+----+----+----+----+----+----+----+----+----+
+
|
|
|
|
|*
|
|
|
|
+
+
|
|
|
|
*
|
|
|
|
+
+
|
|
|
|
| * |
|
|
|
+
+
|
|
|
| * |
|
|
|
|
+
+----|----|----|----|*---|----|----|----|----|----+
+
|
|
|
*
|
|
|
|
|
+
+
|
|
*|
|
|
|
|
|
|
+
+
|
| * |
|
|
|
|
|
|
+
+
|
*|
|
|
|
|
|
|
|
+
+----|--*-|----|----|----|----|----|----|----|----+
+
*
|
|
|
|
|
|
|
|
+
+ * |
|
|
|
|
|
|
|
|
+
+ * |
|
|
|
|
|
|
|
|
+
+ * |
|
|
|
|
|
|
|
|
+
+*---|----|----|----|----|----|----|----|----|----+
*
|
|
|
|
|
|
|
|
|
+
+*
|
|
|
|
|
|
|
|
|
+
+*
|
|
|
|
|
|
|
|
|
+
*
|
|
|
|
|
|
|
|
|
+
*----|----|----|----|----|----|----|----|----|----+
*
|
|
|
|
|
|
|
|
|
+
*
|
|
|
|
|
|
|
|
|
+
*
|
|
|
|
|
|
|
|
|
+
*
|
|
|
|
|
|
|
|
|
+
*----|----|----|----|----|----|----|----|----|----+
+----+----+----+----+----+----+----+----+----+----+
0.0000
0.0455
257
0.0909
253
0.1364
265
0.1818
230
0.2273
209
0.2728
198
0.3182
143
0.3637
120
0.4091
92
0.4546
76
0.5001
45
0.5455
26
0.5910
25
0.6365
25
0.6819
14
0.7274
4
0.7728
7
0.8183
6
0.8638
3
0.9092
0
0.9547
2
1.0001
0
1.0456
0
1.0911
0
1.1365
0
1.1820
* 0.1000e+06
<NUMBER OF ENTRIES> TOT:
2000.
|
|
UNDER RANGE | IN RANGE | OVER RANGE
0. |
2000. |
0.
vy の分布
サンプルプログラム
8.12. 研究課題:ボルツマン分布則 -緩和による平衡状態の実現VARIABLE
CONTENTS
GRAPH OF DISTRIBUTION
0
50
100
150
200
250
+----+----+----+----+----+----+----+----+----+----+
+
|
|
|
|
|
|
|
| * |
+
+
|
|
|
|
|
|
|
|
|
*+
+
|
|
|
|
|
|
|
| * |
+
+
|
|
|
|
|
|
|
| * |
+
+----|----|----|----|----|----|----|-*--|----|----+
+
|
|
|
|
|
|
*
|
|
+
+
|
|
|
|
|
*|
|
|
|
+
+
|
|
|
|
*
|
|
|
|
+
+
|
|
|
*|
|
|
|
|
|
+
+----|----|----|-*--|----|----|----|----|----|----+
+
|
| * |
|
|
|
|
|
|
+
+
|
*|
|
|
|
|
|
|
|
+
+
|
|*
|
|
|
|
|
|
|
+
+
|*
|
|
|
|
|
|
|
|
+
+----*----|----|----|----|----|----|----|----|----+
+
*|
|
|
|
|
|
|
|
|
+
+
*|
|
|
|
|
|
|
|
|
+
+ * |
|
|
|
|
|
|
|
|
+
+*
|
|
|
|
|
|
|
|
|
+
+-*--|----|----|----|----|----|----|----|----|----+
+ * |
|
|
|
|
|
|
|
|
+
+*
|
|
|
|
|
|
|
|
|
+
*
|
|
|
|
|
|
|
|
|
+
*
|
|
|
|
|
|
|
|
|
+
*----|----|----|----|----|----|----|----|----|----+
+----+----+----+----+----+----+----+----+----+----+
0.0000
0.0455
214
0.0909
246
0.1364
209
0.1818
213
0.2273
184
0.2728
176
0.3182
147
0.3637
123
0.4091
96
0.4546
87
0.5001
65
0.5455
46
0.5910
56
0.6365
31
0.6819
24
0.7274
22
0.7728
18
0.8183
12
0.8638
3
0.9092
12
0.9547
8
1.0001
4
1.0456
1
1.0911
2
1.1365
1
1.1820
* 0.1000e+06
<NUMBER OF ENTRIES> TOT:
2000.
|
|
UNDER RANGE | IN RANGE | OVER RANGE
0. |
2000. |
0.
vz の分布
101
102
C
C
C
C
C
第8章
Sample Program [Chapter 7, Study 1]
Reduction of Boltzmann distribution
by a relaxation model
Arrays for histogram
DIMENSION HPA_VA(4),HAR_VA(50),HST_VA(3)
DIMENSION HPA_VX(4),HAR_VX(50),HST_VX(3)
DIMENSION HPA_VY(4),HAR_VY(50),HST_VY(3)
DIMENSION HPA_VZ(4),HAR_VZ(50),HST_VZ(3)
DATA HPA_VA/
DATA HPA_VX/
0. ,
0. ,
0. ,
0. ,
0. , 25./
0. , 25./
DATA HPA_VY/
DATA HPA_VZ/
0. ,
0. ,
0. ,
0. ,
0. , 25./
0. , 25./
C
Seed for RN generator
DATA IX/100/
C
Mass number of molecule: O2
C
DATA G_MASS/32./
Temperature : 300K
C
DATA G_TEMP/300./
Universal constants
DATA C_BOLT/1.38E-16/,C_AVOG/6.24E23/
DATA PI/3.14/
C
Tracks in velocity space
DIMENSION VX(2000),VY(2000),VZ(2000)
C
C
Calculate constants in use
-Mass of molecule
C
P_MASS=G_MASS/C_AVOG
-Initial velocity of molecule
C_KT=C_BOLT*G_TEMP
P_VEL2=3.*C_KT/P_MASS
P_VEL =SQRT(P_VEL2)
C
C
Initialization
-Velocities
DO 10 I=1,2000
CALL RAND_U(IX,RN)
COSTH=1.-2.*RN
SINTH=SQRT(1.-COSTH**2)
CALL RAND_U(IX,RN)
PHAI =2.*PI*RN
VX(I)=P_VEL*SINTH*COS(PHAI)
VY(I)=P_VEL*SINTH*SIN(PHAI)
VZ(I)=P_VEL*COSTH
10 CONTINUE
C
-Parameters for histogram
HPA_VA(2)=4.*P_VEL
サンプルプログラム
8.12. 研究課題:ボルツマン分布則 -緩和による平衡状態の実現HPA_VA(3)=HPA_VA(2)/HPA_VA(4)
HPA_VX(2)=4.*P_VEL/SQRT(3.)
HPA_VX(3)=HPA_VX(2)/HPA_VX(4)
HPA_VY(2)=4.*P_VEL/SQRT(3.)
HPA_VY(3)=HPA_VY(2)/HPA_VY(4)
HPA_VZ(2)=4.*P_VEL/SQRT(3.)
HPA_VZ(3)=HPA_VZ(2)/HPA_VZ(4)
C
C
Tracking the molecules in collisions
DO 20 I=1,30000
-Select two molecules involved in collision
CALL RAND_U(IX,RN)
IC1=IFIX(2000.*RN)+1
CALL RAND_U(IX,RN)
IC2=IFIX(2000.*RN)+1
IF(IC1.NE.IC2) THEN
C
-Calculate 2-body kinematics
C
..Velocity of CMS
VCMX=0.5*(VX(IC1)+VX(IC2))
VCMY=0.5*(VY(IC1)+VY(IC2))
VCMZ=0.5*(VZ(IC1)+VZ(IC2))
C
..Velocity in CMS
VRLX=0.5*(VX(IC1)-VX(IC2))
VRLY=0.5*(VY(IC1)-VY(IC2))
VRLZ=0.5*(VZ(IC1)-VZ(IC2))
C
VRL =SQRT(VRLX**2+VRLY**2+VRLZ**2)
..Moving direction after collision
CALL RAND_U(IX,RN)
COSTH=1.-2.*RN
SINTH=SQRT(1.-COSTH**2)
CALL RAND_U(IX,RN)
PHAI =2.*PI*RN
C
..Velocity after collision
VRLX=VRL*SINTH*COS(PHAI)
VRLY=VRL*SINTH*SIN(PHAI)
VRLZ=VRL*COSTH
VX(IC1)= VRLX+VCMX
VY(IC1)= VRLY+VCMY
VZ(IC1)= VRLZ+VCMZ
VX(IC2)=-VRLX+VCMX
VY(IC2)=-VRLY+VCMY
VZ(IC2)=-VRLZ+VCMZ
ENDIF
20 CONTINUE
C
Histograming
DO 30 I=1,2000
103
104
第8章
VA=SQRT(VX(I)**2+VY(I)**2+VZ(I)**2)
CALL HBOOK(
VA
,HPA_VA,HAR_VA,HST_VA,1)
CALL HBOOK(ABS(VX(I)),HPA_VX,HAR_VX,HST_VX,1)
CALL HBOOK(ABS(VY(I)),HPA_VY,HAR_VY,HST_VY,1)
CALL HBOOK(ABS(VZ(I)),HPA_VZ,HAR_VZ,HST_VZ,1)
C
30 CONTINUE
Print out
CALL HBOOK(
VA
,HPA_VA,HAR_VA,HST_VA,0)
CALL HBOOK(ABS(VX(I)),HPA_VX,HAR_VX,HST_VX,0)
CALL HBOOK(ABS(VY(I)),HPA_VY,HAR_VY,HST_VY,0)
CALL HBOOK(ABS(VZ(I)),HPA_VZ,HAR_VZ,HST_VZ,0)
STOP
END
SUBROUTINE RAND_U(IX,RN)
C
C
Uniform random number generator
C
C
IX
RN
: Preceding/following random number
: Normalized random number
C
C
----------------------IX = a*IX + b (mod n)
C
C
RN = IX/n
----------------------DATA MODULO/1000000/,IA/111/,IB/9/
IX = MOD(IA*IX+IB,MODULO)
RN = FLOAT(IX)/FLOAT(MODULO-1)
RETURN
END
サンプルプログラム
8.13. 研究課題:3次元酔歩 -確率過程-
8.13
研究課題:3次元酔歩 -確率過程-
8.13.1
概要
105
ここでは、現実的な問題として、気体の中での電子の熱運動を3次元酔歩モデルによって捉えてみよう。
気体分子との衝突によって電子の運動エネルギーは変わらずにその運動方向だけが変わると考えると、「一
定時間毎にある距離(平均自由行程)だけ進んで運動方向を変える」という3次元酔歩とパラレルになって
いることに気付かされる。ここでは、もう少しだけ現実的に考えて、平均自由行程の代わりに指数分布に従
う自由行程を採用してシミュレーションを行なう。
8.13.2
出力例
一例として、気体分子と電子をともに剛体球とみなし、次のような仮定のもとにシミュレーションを行
なってみよう。
• 気体分子の速度は、電子の速度に較べて十分に小さく、無視できる。
• 平均自由行程は電子の速度に依らず一定(λ = 6cm)である。
• 気体分子との衝突の後の電子の速度の大きさは変わらない。
• 気体分子と衝突の後の電子の運動方向は等方分布に従う。
3 次元酔歩のシミュレーション
106
第8章
C
Sample Program [Chapter 7, Study 2a]
C
C
3-D random walk
by Monte Carlo method
C
C
Seed for random number generator
C
DATA IX/100/
Parameters for random walk
C
-Initial position
DATA X0/0./,Y0/0./,Z0/0./
C
-Mean free path
DATA P_MEAN/6./
C
-Number of collisions
DATA NCOLL/100/
C
-Number of particles
DATA NPART/ 2/
C
-Intervals to be skipped
C
DATA NINTR/ 1/
Universal constants
C
DATA PI/3.14/
Parameters for graphic window
C
DATA V_X0/- 70./,V_Y0/-42./,V_X1/ 70./,V_Y1/ 42./
Initialization
C
CALL GRINIT
Define virtual graphic window
C
CALL V_WIND(V_X0,V_Y0,V_X1,V_Y1)
Write title
CALL SETCRS(250.,30.)
CALL PRTCHR(’- 3-Dim Random Walk -’,21)
C
Monte Carlo simulation
CALL V_LINE(-3., 0., 3., 0.,4)
CALL V_LINE( 0.,-3., 0., 3.,4)
C
DO 20 I=1,NPART
-Initial position
X=X0
Y=Y0
C
Z=Z0
-Initial direction cosine
CALL RAND_U(IX,RN)
COSTH=1.-2.*RN
SINTH=SQRT(1.-COSTH**2)
CALL RAND_U(IX,RN)
PHAI =2.*PI*RN
DX
=SINTH*COS(PHAI)
DY
DZ
=SINTH*SIN(PHAI)
=COSTH
サンプルプログラム
8.13. 研究課題:3次元酔歩 -確率過程C
-Initial position for graphics
C
(x-y projection)
XS=X0
YS=Y0
DO 10 J=1,NCOLL
C
-Flight length
CALL RAND_E(IX,RN)
FLIGHT=P_MEAN*RN
X
=X+FLIGHT*DX
Y
Z
=Y+FLIGHT*DY
=Z+FLIGHT*DZ
IF(MOD(J,NINTR).EQ.0) THEN
CALL V_LINE(XS,YS,X,Y,1)
XS=X
YS=Y
ENDIF
C
-Change direction
CALL RAND_U(IX,RN)
COSTH=1.-2.*RN
SINTH=SQRT(1.-COSTH**2)
CALL RAND_U(IX,RN)
PHAI =2.*PI*RN
DX
DY
=SINTH*COS(PHAI)
=SINTH*SIN(PHAI)
DZ
=COSTH
CONTINUE
10
CALL PAINTF(1)
CALL V_CIRC(XS,YS,3.,4,0.,6.29)
CALL PAINTF(0)
C
20 CONTINUE
End graph
CALL GREND
STOP
END
SUBROUTINE RAND_U(IX,RN)
C
C
Uniform random number generator
C
C
IX
RN
: Preceding/following random number
: Normalized random number
C
C
----------------------IX = a*IX + b (mod n)
C
C
RN = IX/n
----------------------DATA MODULO/1000000/,IA/111/,IB/9/
IX = MOD(IA*IX+IB,MODULO)
107
108
第8章
RN = FLOAT(IX)/FLOAT(MODULO-1)
RETURN
END
SUBROUTINE RAND_E(IX,RN)
C
C
C
Exponential random number generator
IX
: Seed of (uniform) random number
C
C
RN
: Exponential random number
(Mean=1.0)
C
C
----------------------RN = -ln(1.-RAND_U)
C
----------------------DATA OFFSET/1.E-10/
CALL RAND_U(IX,RU)
RN = -ALOG(1.-RU+OFFSET)
RETURN
END
サンプルプログラム
8.14. 研究課題:3次元酔歩 -拡散現象-
109
8.14
研究課題:3次元酔歩 -拡散現象-
8.14.1
概要
前項の確率過程を電子の集団に適用すると、拡散現象が現れる。
8.14.2
出力例
一例として、次のような仮定のもとにシミュレーションを行なってみよう。
• 時刻 t = 0 で 300 個の原子が座標原点にある。
• 気体分子の速度は、電子の速度に較べて十分に小さく、無視できる。
• 平均自由行程は電子の速度に依らず一定(λ = 6cm)である。
• 気体分子との衝突の後の電子の速度の大きさは変わらない。
• 気体分子と衝突の後の電子の運動方向は等方分布に従う。
VARIABLE
CONTENTS
GRAPH OF DISTRIBUTION
0
10
20
30
40
50
+----+----+----+----+----+----+----+----+----+----+
*
|
|
|
|
|
|
|
|
|
+
*
|
|
|
|
|
|
|
|
|
+
*
|
|
|
|
|
|
|
|
|
+
+*
|
|
|
|
|
|
|
|
|
+
+--*-|----|----|----|----|----|----|----|----|----+
+ * |
|
|
|
|
|
|
|
|
+
+
|*
|
|
|
|
|
|
|
|
+
+
| * |
|
|
|
|
|
|
|
+
+
|
|
*|
|
|
|
|
|
|
+
+----|----|----|----|----*----|----|----|----|----+
+
|
|
|
|
|
| * |
|
|
+
+
|
|
|
|
|
|
|
|
| * +
+
|
|
|
|
|
|
| * |
|
+
+
|
|
|
|
| * |
|
|
|
+
+----|----|----|----|----|-*--|----|----|----|----+
+
|
|
|
| * |
|
|
|
|
+
+
|
|
|
| * |
|
|
|
|
+
+
|
|*
|
|
|
|
|
|
|
+
+
|
*|
|
|
|
|
|
|
|
+
+---*|----|----|----|----|----|----|----|----|----+
+ * |
|
|
|
|
|
|
|
|
+
*
|
|
|
|
|
|
|
|
|
+
*
|
|
|
|
|
|
|
|
|
+
*
|
|
|
|
|
|
|
|
|
+
*----|----|----|----|----|----|----|----|----|----+
+----+----+----+----+----+----+----+----+----+----+
-2.0000
-1.8400
0
-1.6800
0
-1.5200
0
-1.3600
1
-1.2000
3
-1.0400
3
-0.8800
6
-0.7200
7
-0.5600
14
-0.4000
25
-0.2400
32
-0.0800
48
0.0800
37
0.2400
27
0.4000
27
0.5600
22
0.7200
22
0.8800
11
1.0400
9
1.2000
4
1.3600
2
1.5200
0
1.6800
0
1.8400
0
2.0000
0
2.1600
* 0.1000e+03
<NUMBER OF ENTRIES> TOT:
300.
|
|
UNDER RANGE | IN RANGE | OVER RANGE
0. |
300. |
0.
x の分布
110
VARIABLE
第8章
CONTENTS
GRAPH OF DISTRIBUTION
0
10
20
30
40
50
+----+----+----+----+----+----+----+----+----+----+
*
|
|
|
|
|
|
|
|
|
+
*
|
|
|
|
|
|
|
|
|
+
*
|
|
|
|
|
|
|
|
|
+
+*
|
|
|
|
|
|
|
|
|
+
+*---|----|----|----|----|----|----|----|----|----+
+
*|
|
|
|
|
|
|
|
|
+
+*
|
|
|
|
|
|
|
|
|
+
+
|
|
| * |
|
|
|
|
|
+
+
|
|
| * |
|
|
|
|
|
+
+----|----|--*-|----|----|----|----|----|----|----+
+
|
|
|
|
|
*|
|
|
|
+
+
|
|
|
|
|
|
|
|
*|
+
+
|
|
|
|
|
|
|*
|
|
+
+
|
|
|
|
|
|
*|
|
|
+
+----|----|----|----|----|----|----|----*----|----+
+
|
|
|
|
|
| * |
|
|
+
+
|
| * |
|
|
|
|
|
|
+
+
|*
|
|
|
|
|
|
|
|
+
+
|
*
|
|
|
|
|
|
|
+
+*---|----|----|----|----|----|----|----|----|----+
*
|
|
|
|
|
|
|
|
|
+
*
|
|
|
|
|
|
|
|
|
+
*
|
|
|
|
|
|
|
|
|
+
*
|
|
|
|
|
|
|
|
|
+
*----|----|----|----|----|----|----|----|----|----+
+----+----+----+----+----+----+----+----+----+----+
-2.0000
-1.8400
0
-1.6800
0
-1.5200
0
-1.3600
1
-1.2000
1
-1.0400
4
-0.8800
1
-0.7200
17
-0.5600
17
-0.4000
13
-0.2400
29
-0.0800
44
0.0800
36
0.2400
34
0.4000
40
0.5600
33
0.7200
13
0.8800
6
1.0400
10
1.2000
1
1.3600
0
1.5200
0
1.6800
0
1.8400
0
2.0000
0
2.1600
* 0.1000e+03
<NUMBER OF ENTRIES> TOT:
300.
|
|
UNDER RANGE | IN RANGE | OVER RANGE
0. |
300. |
0.
y の分布
VARIABLE
CONTENTS
GRAPH OF DISTRIBUTION
0
10
20
30
40
50
+----+----+----+----+----+----+----+----+----+----+
*
|
|
|
|
|
|
|
|
|
+
*
|
|
|
|
|
|
|
|
|
+
*
|
|
|
|
|
|
|
|
|
+
+*
|
|
|
|
|
|
|
|
|
+
+*---|----|----|----|----|----|----|----|----|----+
+*
|
|
|
|
|
|
|
|
|
+
+
*
|
|
|
|
|
|
|
|
+
+
|
*
|
|
|
|
|
|
|
+
+
|
|
|
*|
|
|
|
|
|
+
+----|----|----|----|----*----|----|----|----|----+
+
|
|
|
|
|
*|
|
|
|
+
+
|
|
|
|
|
|
| * |
|
+
+
|
|
|
|
|
|
|
|
|*
+
+
|
|
|
|
|
|
|*
|
|
+
+----|----|----|----|----|--*-|----|----|----|----+
+
|
|
|
| * |
|
|
|
|
+
+
|
|
|
|*
|
|
|
|
|
+
+
|
*
|
|
|
|
|
|
|
+
+
*
|
|
|
|
|
|
|
|
+
+--*-|----|----|----|----|----|----|----|----|----+
*
|
|
|
|
|
|
|
|
|
+
*
|
|
|
|
|
|
|
|
|
+
*
|
|
|
|
|
|
|
|
|
+
*
|
|
|
|
|
|
|
|
|
+
*----|----|----|----|----|----|----|----|----|----+
+----+----+----+----+----+----+----+----+----+----+
-2.0000
-1.8400
0
-1.6800
0
-1.5200
0
-1.3600
1
-1.2000
1
-1.0400
1
-0.8800
5
-0.7200
10
-0.5600
19
-0.4000
25
-0.2400
29
-0.0800
37
0.0800
46
0.2400
36
0.4000
28
0.5600
23
0.7200
21
0.8800
10
1.0400
5
1.2000
3
1.3600
0
1.5200
0
1.6800
0
1.8400
0
2.0000
0
2.1600
* 0.1000e+03
<NUMBER OF ENTRIES> TOT:
300.
|
|
UNDER RANGE | IN RANGE | OVER RANGE
0. |
300. |
0.
z の分布
サンプルプログラム
8.14. 研究課題:3次元酔歩 -拡散現象C
Sample Program [Chapter 7, Study 2b]
C
C
3-D random walk
by Monte Carlo method
C
C
Arrays for histogram
DIMENSION HPA_PX(4),HAR_PX(25),HST_PX(3)
DIMENSION HPA_PY(4),HAR_PY(25),HST_PY(3)
DIMENSION HPA_PZ(4),HAR_PZ(25),HST_PZ(3)
DATA HPA_PX/-200. , 200. , 16. , 25./
DATA HPA_PY/-200. , 200. , 16. , 25./
DATA HPA_PZ/-200. , 200. , 16. , 25./
C
Seed for random number generator
DATA IX/100/
C
C
Parameters for random walk
-Initial position
DATA X0/0./,Y0/0./,Z0/0./
C
-Mean free path
DATA P_MEAN/6./
C
-Number of collisions
DATA NCOLL/100/
C
-Number of particles
DATA NPART/ 300/
C
Universal constants
DATA PI/3.14/
C
Monte Carlo Simulation
DO 20 I=1,NPART
C
-Initial position
X=X0
Y=Y0
Z=Z0
C
-Initial direction cosine
CALL RAND_U(IX,RN)
COSTH=1.-2.*RN
SINTH=SQRT(1.-COSTH**2)
CALL RAND_U(IX,RN)
PHAI =2.*PI*RN
DX
=SINTH*COS(PHAI)
DY
DZ
C
=SINTH*SIN(PHAI)
=COSTH
DO 10 J=1,NCOLL
-Flight length
CALL RAND_E(IX,RN)
FLIGHT=P_MEAN*RN
X
Y
=X+FLIGHT*DX
=Y+FLIGHT*DY
111
112
第8章
Z
C
=Z+FLIGHT*DZ
-Change direction
CALL RAND_U(IX,RN)
COSTH=1.-2.*RN
SINTH=SQRT(1.-COSTH**2)
CALL RAND_U(IX,RN)
PHAI =2.*PI*RN
DX
DY
=SINTH*COS(PHAI)
=SINTH*SIN(PHAI)
DZ
=COSTH
CONTINUE
10
CALL HBOOK(X,HPA_PX,HAR_PX,HST_PX,1)
CALL HBOOK(Y,HPA_PY,HAR_PY,HST_PY,1)
CALL HBOOK(Z,HPA_PZ,HAR_PZ,HST_PZ,1)
C
20 CONTINUE
Print out
CALL HBOOK(X,HPA_PX,HAR_PX,HST_PX,0)
CALL HBOOK(Y,HPA_PY,HAR_PY,HST_PY,0)
CALL HBOOK(Z,HPA_PZ,HAR_PZ,HST_PZ,0)
STOP
END
SUBROUTINE RAND_U(IX,RN)
C
C
Uniform random number generator
C
C
IX
RN
C
C
----------------------IX = a*IX + b (mod n)
C
C
: Preceding/following random number
: Normalized random number
RN
=
IX/n
----------------------DATA MODULO/1000000/,IA/111/,IB/9/
IX = MOD(IA*IX+IB,MODULO)
RN = FLOAT(IX)/FLOAT(MODULO-1)
RETURN
END
SUBROUTINE RAND_E(IX,RN)
C
C
C
Exponential random number generator
IX
: Seed of (uniform) random number
C
C
RN
: Exponential random number
(Mean=1.0)
C
C
----------------------RN = -ln(1.-RAND_U)
C
----------------------DATA OFFSET/1.E-10/
サンプルプログラム
8.14. 研究課題:3次元酔歩 -拡散現象CALL RAND_U(IX,RU)
RN = -ALOG(1.-RU+OFFSET)
RETURN
END
113
114
第8章
サンプルプログラム
8.15
研究課題:気体中のブラウン粒子の運動 -座標空間像-
8.15.1
概要
ブラウン運動は、ミクロな系とマクロな系との確率的な相互作用の一つの典型である。ここでは、例え
ば、大気中に浮遊する煙の粒子の運動に着目して、その性質を調べてみよう。特に、運動の軌跡の持つフラ
クタル性やいろいろな次元量(ハウスドルフ次元、情報次元など)を見てみるのも面白いだろう。
8.15.2
出力例
一例として、1気圧の酸素ガス中における炭素微片のブラウン運動を、次のような仮定のもとにシミュ
レーションしてみよう。
• 炭素微片は剛体球とみなす。
(半径 4.4 × 10−7 cm、重さ 6.0 × 10−19 g )
• 平均衝突時間 dt 内に1回衝突。
• 衝突は dt 内の任意時刻にランダムに起こる。
• t = 0 で座標原点にあった炭素微片に対して、t = 105 dt までを追跡。
気体中のブラウン粒子
8.15. 研究課題:気体中のブラウン粒子の運動 -座標空間像C
C
C
Sample Program [Chapter 7, Study 3]
3-D Brownian motion
by Monte Carlo method
C
C
(in CGS unit)
Seeds for RN generators
C
DATA IX1/23450/,IX2/34560/,IX3/45670/,IX4/56780/
Parameters for micro particle
C
-Initial position
DATA X0/0./,Y0/0./,Z0/0./
C
-Initial velocity
DATA VX0/0./,VY0/0./,VZ0/0./
C
-Mass:carbon micro cluster(~30000 particles)
DATA P_MASS/6.E-19/
C
DATA P_RADI/4.6E-7/
Parameters for gas
C
-Mass number of molecule:oxigen
C
DATA G_MNUM/32./
-Temperature:300K
C
DATA G_TEMP/300./
-Pressure:1 atm.
C
DATA G_PRES/1./
Universal constants
Data PI/3.14/
DATA C_BOLT/1.38E-16/,C_ABOG/6.03E23/
C
C
Parameters for simulation
-Number of particles
C
DATA N_PART/1/
-Number of Trials
C
DATA N_COLL/100000/
-Interval of observation
DATA N_INTR/ 1000/
C
Parameters for graphic window
DATA V_X0/-0.2E-4/,V_Y0/-1.2E-5/,V_X1/ 0.5E-4/,V_Y1/ 3.0E-5/
C
Probability function for collision
DIMENSION P_COLL(101)
C
C
Initialization
-Graphics
C
CALL GRINIT
-Virtual graphic window
C
CALL V_WIND(V_X0,V_Y0,V_X1,V_Y1)
-Particle density in gas
C
G_DENS=C_ABOG*G_PRES/22.4E3
-kBT
C
TK=C_BOLT*G_TEMP
-Mass of molecule
115
116
第8章
G_MASS=G_MNUM/C_ABOG
C
-Velocity Range
VMIN=0.
C
VMAX=4.*SQRT(TK/G_MASS)
-Integration
C
DV =(VMAX-VMIN)/100.
Reduction of probability function for collision
SUM
AREA
=0.
=PI*P_RADI*P_RADI
FNORM =SQRT(G_MASS/(2.*PI*TK))
FACTOR=AREA*G_DENS*FNORM
DO 10 I=1,101
V
=VMIN+DV *FLOAT(I-1)
PROB=FACTOR*V*EXP(-0.5*G_MASS*V*V/TK)*DV
SUM =SUM+PROB
P_COLL(I)=SUM
10 CONTINUE
T_SCAL=SUM
C
Scale probability
DO 20 I=1,101
P_COLL(I)=P_COLL(I)/T_SCAL
20 CONTINUE
C
Get time slice:mean collision time
DT=1./T_SCAL
C
Write title
CALL SETCRS(250.,10.)
CALL PRTCHR(’3-Dimensional Brownian Motion’,30)
CALL SETCRS(250.,30.)
C
CALL PRTCHR(’- Monte Carlo Simulation -’,27)
Monte Carlo Simulation
C
-Reference marker around origin
C
..x-scale
CALL V_LINE(-3.3E-6,
0., 3.3E-6,
0.,0)
CALL V_LINE(-3.3E-6,-3.3E-7,-3.3E-6,+3.3E-7,0)
CALL V_LINE( 3.3E-6,-3.3E-7, 3.3E-6,+3.3E-7,0)
C
..y-scale
CALL V_LINE(
0.,-3.3E-6,
0., 3.3E-6,0)
CALL V_LINE(-3.3E-7,-3.3E-6, 3.3E-7,-3.3E-6,0)
CALL V_LINE(-3.3E-7, 3.3E-6, 3.3E-7, 3.3E-6,0)
C
C
DO 50 I=1,N_PART
-Reset time
TIME=0.
-Initial position of particle(i)
X=X0
Y=Y0
サンプルプログラム
8.15. 研究課題:気体中のブラウン粒子の運動 -座標空間像Z=Z0
VX=VX0
VY=VY0
VZ=VZ0
..x-y projection
C
XS=X0
YS=Y0
DO 40 J=1,N_COLL
-Step DT
C
TIME=TIME+DT
-Before collision
C
C
..Time interval
CALL RAND_U(IX,RN)
DT_BEF=DT*RN
C
..Drift
X=X+VX*DT_BEF
Y=Y+VY*DT_BEF
Z=Z+VZ*DT_BEF
C
..Velocity of molecule
CALL RAND_U(IX,RN)
DO 30 K=2,101
IF(RN.LE.P_COLL(K).AND.RN.GT.P_COLL(K-1)) THEN
KS=K-1
ENDIF
30
CONTINUE
FV=DV*(RN-P_COLL(KS))/(P_COLL(KS+1)-P_COLL(KS))
V =DV*FLOAT(KS-1)+FV
CALL RAND_U(IX1,RN)
COSTH=1.-2.*RN
SINTH=SQRT(1.-COSTH**2)
CALL RAND_U(IX2,RN)
PHAI =2.*PI*RN
VXM =V*SINTH*COS(PHAI)
VYM
VZM
C
C
=V*SINTH*SIN(PHAI)
=V*COSTH
-Kinematics
..Velocity of CMS
VCMX=(P_MASS*VX+G_MASS*VXM)/(P_MASS+G_MASS)
VCMY=(P_MASS*VY+G_MASS*VYM)/(P_MASS+G_MASS)
C
VCMZ=(P_MASS*VZ+G_MASS*VZM)/(P_MASS+G_MASS)
..Velocity in CMS
VRLX=VX-VCMX
VRLY=VY-VCMY
VRLZ=VZ-VCMZ
VRL =SQRT(VRLX**2+VRLY**2+VRLZ**2)
117
118
第8章
C
..Moving direction after collision
CALL RAND_U(IX3,RN)
COSTH=1.-2.*RN
SINTH=SQRT(1.-COSTH**2)
CALL RAND_U(IX4,RN)
PHAI =2.*PI*RN
-After collision
C
C
..Velocity
VRLX=VRL*SINTH*COS(PHAI)
VRLY=VRL*SINTH*SIN(PHAI)
VRLZ=VRL*COSTH
C
VX
VY
= VRLX+VCMX
= VRLY+VCMY
VZ
= VRLZ+VCMZ
..Drift
X=X+VX*(DT-DT_BEF)
Y=Y+VY*(DT-DT_BEF)
Z=Z+VZ*(DT-DT_BEF)
IF(MOD(J,N_INTR).EQ.0) THEN
CALL V_LINE(XS,YS,X,Y,1)
XS=X
YS=Y
ENDIF
CONTINUE
40
CALL PAINTF(1)
CALL V_CIRC(XS,YS,P_RADI,2,0.,6.29)
CALL PAINTF(0)
50 CONTINUE
C
End graph
CALL GREND
STOP
END
SUBROUTINE RAND_U(IX,RN)
C
C
Uniform random number generator
C
C
IX
RN
: Preceding/following random number
: Normalized random number
C
C
----------------------IX = a*IX + b (mod n)
C
C
RN = IX/n
----------------------Double Precision N,MODULO
DATA MODULO/10000000/,IA/111/,IB/9/
N
= IA*IX+IB
IX = DMOD(N,MODULO)
サンプルプログラム
8.15. 研究課題:気体中のブラウン粒子の運動 -座標空間像RN = FLOAT(IX)/SNGL(MODULO-1)
RETURN
END
119
120
第8章
8.16
研究課題:気体中のブラウン粒子 -速度空間像-
8.16.1
概要
サンプルプログラム
ブラウン粒子の運動を速度空間での運動として捉えてみよう。ここでも、座標空間での運動と全く同様
に、酔歩のような軌跡を示していることが見て取れるだろう。つまり、ブラウン粒子は6次元の位相空間内
を酔歩のように歩んでいるということなのである。
8.16.2
出力例
一例として、1気圧の酸素ガス中における炭素微片のブラウン運動を、前項と同じ仮定のもとにシミュ
レーションしてみよう。
速度空間におけるブラウン粒子の運動
8.16. 研究課題:気体中のブラウン粒子 -速度空間像C
C
C
Sample Program [Chapter 7, Study 3]
3-D Brownian motion
by Monte Carlo method
C
C
(in CGS unit)
Seeds for RN generators
C
DATA IX1/23450/,IX2/34560/,IX3/45670/,IX4/56780/
Parameters for micro particle
C
-Initial position
DATA X0/0./,Y0/0./,Z0/0./
C
-Initial velocity
DATA VX0/0./,VY0/0./,VZ0/0./
C
-Mass:carbon micro cluster(~30000 particles)
DATA P_MASS/6.E-19/
C
DATA P_RADI/4.6E-7/
Parameters for gas
C
-Mass number of molecule:oxigen
C
DATA G_MNUM/32./
-Temperature:300K
C
DATA G_TEMP/300./
-Pressure:1 atm.
C
DATA G_PRES/1./
Universal constants
Data PI/3.14/
DATA C_BOLT/1.38E-16/,C_ABOG/6.03E23/
C
C
Parameters for simulation
-Number of Trials
C
DATA N_COLL/100000/
-Interval of observation
C
DATA N_INTR/ 1000/
Parameters for graphics
DIMENSION SCALE(3,2),XMON(100),YMON(100)
C
CHARACTER*8 NAME(2)/’T(SEC.) ’,’VX(CM/S)’/
Probability function for collision
C
DIMENSION P_COLL(101)
Initialization
C
-Graphics
CALL GRINIT
C
-Particle density in gas
G_DENS=C_ABOG*G_PRES/22.4E3
C
-kBT
TK=C_BOLT*G_TEMP
C
-Mass of molecule
G_MASS=G_MNUM/C_ABOG
C
-Velocity Range
VMIN=0.
121
122
第8章
VMAX=4.*SQRT(TK/G_MASS)
C
-Integration
DV =(VMAX-VMIN)/100.
C
Reduction of probability function for collision
SUM
=0.
AREA =PI*P_RADI*P_RADI
FNORM =SQRT(G_MASS/(2.*PI*TK))
FACTOR=AREA*G_DENS*FNORM
DO 10 I=1,101
V
=VMIN+DV *FLOAT(I-1)
PROB=FACTOR*V*EXP(-0.5*G_MASS*V*V/TK)*DV
SUM =SUM+PROB
P_COLL(I)=SUM
10 CONTINUE
T_SCAL=SUM
C
Scale probability
DO 20 I=1,101
P_COLL(I)=P_COLL(I)/T_SCAL
C
C
20 CONTINUE
Get time slice:mean collision time
DT=1./T_SCAL
Write title
CALL SETCRS(250.,10.)
CALL PRTCHR(’3-Dimensional Brownian Motion’,30)
CALL SETCRS(250.,30.)
CALL PRTCHR(’- Monte Carlo Simulation -’,27)
C
C
Monte Carlo Simulation
-Reset time
C
TIME=0.
-Initial position of particle
X=X0
Y=Y0
Z=Z0
VX=VX0
VY=VY0
VZ=VZ0
IM=1
C
C
C
C
DO 40 J=1,N_COLL
-Step DT
TIME=TIME+DT
-Before collision
..Time interval
CALL RAND_U(IX,RN)
DT_BEF=DT*RN
..Drift
サンプルプログラム
8.16. 研究課題:気体中のブラウン粒子 -速度空間像X=X+VX*DT_BEF
Y=Y+VY*DT_BEF
Z=Z+VZ*DT_BEF
C
..Velocity of molecule
CALL RAND_U(IX,RN)
DO 30 K=2,101
IF(RN.LE.P_COLL(K).AND.RN.GT.P_COLL(K-1)) THEN
KS=K-1
ENDIF
30
CONTINUE
FV=DV*(RN-P_COLL(KS))/(P_COLL(KS+1)-P_COLL(KS))
V =DV*FLOAT(KS-1)+FV
CALL RAND_U(IX1,RN)
COSTH=1.-2.*RN
SINTH=SQRT(1.-COSTH**2)
CALL RAND_U(IX2,RN)
PHAI =2.*PI*RN
VXM =V*SINTH*COS(PHAI)
VYM
VZM
C
C
=V*SINTH*SIN(PHAI)
=V*COSTH
-Kinematics
..Velocity of CMS
VCMX=(P_MASS*VX+G_MASS*VXM)/(P_MASS+G_MASS)
VCMY=(P_MASS*VY+G_MASS*VYM)/(P_MASS+G_MASS)
C
VCMZ=(P_MASS*VZ+G_MASS*VZM)/(P_MASS+G_MASS)
..Velocity in CMS
VRLX=VX-VCMX
VRLY=VY-VCMY
VRLZ=VZ-VCMZ
C
VRL =SQRT(VRLX**2+VRLY**2+VRLZ**2)
..Moving direction after collision
CALL RAND_U(IX3,RN)
COSTH=1.-2.*RN
SINTH=SQRT(1.-COSTH**2)
CALL RAND_U(IX4,RN)
C
C
PHAI =2.*PI*RN
-After collision
..Velocity
VRLX=VRL*SINTH*COS(PHAI)
VRLY=VRL*SINTH*SIN(PHAI)
VRLZ=VRL*COSTH
C
VX
VY
= VRLX+VCMX
= VRLY+VCMY
VZ
= VRLZ+VCMZ
..Drift
123
124
第8章
X=X+VX*(DT-DT_BEF)
Y=Y+VY*(DT-DT_BEF)
Z=Z+VZ*(DT-DT_BEF)
IF(MOD(J,N_INTR).EQ.0) THEN
XMON(IM)=TIME
YMON(IM)=VX
IM=IM+1
ENDIF
40 CONTINUE
C
Draw graph of vx as a function of time
P_VMAX
= VMAX*SQRT(G_MASS/P_MASS)
SCALE(1,1)= 0.
SCALE(2,1)= DT*N_COLL/10.
SCALE(3,1)= 500./10.
SCALE(1,2)=-0.5*P_VMAX
SCALE(2,2)= P_VMAX/10.
SCALE(3,2)= 300./10.
CALL DRWAXS(SCALE,NAME,1)
C
CALL DRWGRA(XMON,YMON,100,SCALE,4)
End graph
CALL GREND
STOP
END
SUBROUTINE RAND_U(IX,RN)
C
C
Uniform random number generator
C
C
IX
RN
C
C
----------------------IX = a*IX + b (mod n)
C
C
: Preceding/following random number
: Normalized random number
RN
=
IX/n
----------------------Double Precision N,MODULO
DATA MODULO/10000000/,IA/111/,IB/9/
N = IA*IX+IB
IX = DMOD(N,MODULO)
RN = FLOAT(IX)/SNGL(MODULO-1)
RETURN
END
サンプルプログラム
8.17. 研究課題:気体中のブラウン粒子 -速度空間分布-
8.17
研究課題:気体中のブラウン粒子 -速度空間分布-
8.17.1
概要
125
ブラウン粒子集団の速度空間分布を、運動のエルゴード性を仮定して、1粒子の運動の軌跡から再構成
してみよう。具体的には、気体分子と衝突する毎にブラウン粒子の速度をヒストグラムに取ればよい。得ら
れた分布は熱平衡であるボルツマン分布則に従っているだろうか?
8.17.2
出力例
一例として、1気圧の酸素ガス中における炭素微片のブラウン運動を、前項と同じ仮定のもとにシミュ
レーションしてみよう。
VARIABLE
CONTENTS
GRAPH OF DISTRIBUTION
0
5000
10000
15000
20000
25000
+----+----+----+----+----+----+----+----+----+----+
*
|
|
|
|
|
|
|
|
|
+
*
|
|
|
|
|
|
|
|
|
+
+*
|
|
|
|
|
|
|
|
|
+
+ * |
|
|
|
|
|
|
|
|
+
+----*----|----|----|----|----|----|----|----|----+
+
|*
|
|
|
|
|
|
|
|
+
+
|
| * |
|
|
|
|
|
|
+
+
|
|
*|
|
|
|
|
|
|
+
+
|
|
*|
|
|
|
|
|
|
+
+----|----|----|*---|----|----|----|----|----|----+
+
|
|
|
|
|*
|
|
|
|
+
+
|
|
|
|
*|
|
|
|
|
+
+
|
|
|*
|
|
|
|
|
|
+
+
|
|
|*
|
|
|
|
|
|
+
+----|----|----|----|-*--|----|----|----|----|----+
+
|
|
|
|*
|
|
|
|
|
+
+
|
|
|*
|
|
|
|
|
|
+
+
|
| * |
|
|
|
|
|
|
+
+
|
*
|
|
|
|
|
|
|
+
+----*----|----|----|----|----|----|----|----|----+
+ * |
|
|
|
|
|
|
|
|
+
*
|
|
|
|
|
|
|
|
|
+
*
|
|
|
|
|
|
|
|
|
+
*
|
|
|
|
|
|
|
|
|
+
*----|----|----|----|----|----|----|----|----|----+
+----+----+----+----+----+----+----+----+----+----+
-0.5250
-0.4830
0
-0.4410
181
-0.3990
266
-0.3570
911
-0.3150
2505
-0.2730
3001
-0.2310
5846
-0.1890
6819
-0.1470
6898
-0.1050
8015
-0.0630
12968
-0.0210
11825
0.0210
7815
0.0630
8012
0.1050
10874
0.1470
10741
0.1890
8218
0.2310
6264
0.2730
4792
0.3150
2285
0.3570
1631
0.3990
133
0.4410
0
0.4830
0
0.5250
0
0.5670
* 0.1000e+04
<NUMBER OF ENTRIES> TOT: 120000.
|
|
UNDER RANGE | IN RANGE | OVER RANGE
0. | 120000. |
0.
vx の分布
126
VARIABLE
第8章
CONTENTS
GRAPH OF DISTRIBUTION
0
5000
10000
15000
20000
25000
+----+----+----+----+----+----+----+----+----+----+
*
|
|
|
|
|
|
|
|
|
+
*
|
|
|
|
|
|
|
|
|
+
*
|
|
|
|
|
|
|
|
|
+
*
|
|
|
|
|
|
|
|
|
+
*----|----|----|----|----|----|----|----|----|----+
+*
|
|
|
|
|
|
|
|
|
+
+
*|
|
|
|
|
|
|
|
|
+
+
|
*|
|
|
|
|
|
|
|
+
+
|
| * |
|
|
|
|
|
|
+
+----|----*----|----|----|----|----|----|----|----+
+
|
|
| * |
|
|
|
|
|
+
+
|
|
|
| * |
|
|
|
|
+
+
|
|
|
|
|*
|
|
|
|
+
+
|
|
|
|
|*
|
|
|
|
+
+----|----|----|----|----|----|-*--|----|----|----+
+
|
|
|
|
*|
|
|
|
|
+
+
|
|
| * |
|
|
|
|
|
+
+
|
|
*
|
|
|
|
|
|
+
+
|
*
|
|
|
|
|
|
|
+
+----|--*-|----|----|----|----|----|----|----|----+
+ * |
|
|
|
|
|
|
|
|
+
*
|
|
|
|
|
|
|
|
|
+
*
|
|
|
|
|
|
|
|
|
+
*
|
|
|
|
|
|
|
|
|
+
*----|----|----|----|----|----|----|----|----|----+
+----+----+----+----+----+----+----+----+----+----+
-0.5250
-0.4830
0
-0.4410
0
-0.3990
0
-0.3570
0
-0.3150
0
-0.2730
262
-0.2310
2010
-0.1890
4558
-0.1470
6575
-0.1050
5136
-0.0630
8502
-0.0210
11447
0.0210
12898
0.0630
12932
0.1050
16113
0.1470
12230
0.1890
8987
0.2310
7590
0.2730
5074
0.3150
4144
0.3570
1533
0.3990
9
0.4410
0
0.4830
0
0.5250
0
0.5670
* 0.1000e+04
<NUMBER OF ENTRIES> TOT: 120000.
|
|
UNDER RANGE | IN RANGE | OVER RANGE
0. | 120000. |
0.
vy の分布
VARIABLE
CONTENTS
GRAPH OF DISTRIBUTION
0
5000
10000
15000
20000
25000
0.5250
+----+----+----+----+----+----+----+----+----+----+
0.4830
0
*
|
|
|
|
|
|
|
|
|
+
0.4410
0
*
|
|
|
|
|
|
|
|
|
+
0.3990
0
*
|
|
|
|
|
|
|
|
|
+
0.3570
131
*
|
|
|
|
|
|
|
|
|
+
0.3150
530
+*---|----|----|----|----|----|----|----|----|----+
0.2730
843
+ * |
|
|
|
|
|
|
|
|
+
0.2310
2676
+
*
|
|
|
|
|
|
|
|
+
0.1890
5697
+
|
|*
|
|
|
|
|
|
|
+
0.1470
4508
+
|
*|
|
|
|
|
|
|
|
+
0.1050
4759
+----|----*----|----|----|----|----|----|----|----+
0.0630
6777
+
|
|
*|
|
|
|
|
|
|
+
0.0210
12020
+
|
|
|
|
*|
|
|
|
|
+
0.0210
16418
+
|
|
|
|
|
| * |
|
|
+
0.0630
16067
+
|
|
|
|
|
| * |
|
|
+
0.1050
13263
+----|----|----|----|----|-*--|----|----|----|----+
0.1470
13220
+
|
|
|
|
|*
|
|
|
|
+
0.1890
6675
+
|
| * |
|
|
|
|
|
|
+
0.2310
6717
+
|
| * |
|
|
|
|
|
|
+
0.2730
5319
+
|
|*
|
|
|
|
|
|
|
+
0.3150
974
+-*--|----|----|----|----|----|----|----|----|----+
0.3570
1208
+ * |
|
|
|
|
|
|
|
|
+
0.3990
1469
+ * |
|
|
|
|
|
|
|
|
+
0.4410
681
+*
|
|
|
|
|
|
|
|
|
+
0.4830
48
*
|
|
|
|
|
|
|
|
|
+
0.5250
0
*----|----|----|----|----|----|----|----|----|----+
0.5670
+----+----+----+----+----+----+----+----+----+----+
* 0.1000e+04
<NUMBER OF ENTRIES> TOT: 120000.
|
|
UNDER RANGE | IN RANGE | OVER RANGE
0. | 120000. |
0.
vz の分布
サンプルプログラム
8.17. 研究課題:気体中のブラウン粒子 -速度空間分布C
C
C
Sample Program [Chapter 7, Study 3]
3-D Brownian motion
by Monte Carlo method
C
C
(in CGS unit)
Seeds for RN generators
C
DATA IX1/23450/,IX2/34560/,IX3/45670/,IX4/56780/
Parameters for micro particle
C
-Initial position
DATA X0/0./,Y0/0./,Z0/0./
C
-Initial velocity
DATA VX0/0./,VY0/0./,VZ0/0./
C
-Mass:carbon micro cluster(~30000 particles)
DATA P_MASS/6.E-19/
C
DATA P_RADI/4.6E-7/
Parameters for gas
C
-Mass number of molecule:oxigen
C
DATA G_MNUM/32./
-Temperature:300K
C
DATA G_TEMP/300./
-Pressure:1 atm.
C
DATA G_PRES/1./
Universal constants
Data PI/3.14/
DATA C_BOLT/1.38E-16/,C_ABOG/6.03E23/
C
C
Parameters for simulation
-Number of Trials
C
DATA N_COLL/100000/
Arrays for histogram
DIMENSION HPA_VX(4),HAR_VX(50),HST_VX(3)
DIMENSION HPA_VY(4),HAR_VY(50),HST_VY(3)
DIMENSION HPA_VZ(4),HAR_VZ(50),HST_VZ(3)
DATA HPA_VX/-525. , 525. , 42. , 25./
DATA HPA_VY/-525. , 525. , 42. , 25./
C
DATA HPA_VZ/-525. , 525. , 42. , 25./
Probability function for collision
C
DIMENSION P_COLL(101)
Initialization
C
-Particle density in gas
G_DENS=C_ABOG*G_PRES/22.4E3
C
-kBT
TK=C_BOLT*G_TEMP
C
-Mass of molecule
G_MASS=G_MNUM/C_ABOG
C
-Velocity Range
VMIN=0.
127
128
第8章
VMAX=4.*SQRT(TK/G_MASS)
C
-Integration
DV =(VMAX-VMIN)/100.
C
Reduction of probability function for collision
SUM
=0.
AREA =PI*P_RADI*P_RADI
FNORM =SQRT(G_MASS/(2.*PI*TK))
FACTOR=AREA*G_DENS*FNORM
DO 10 I=1,101
V
=VMIN+DV *FLOAT(I-1)
PROB=FACTOR*V*EXP(-0.5*G_MASS*V*V/TK)*DV
SUM =SUM+PROB
P_COLL(I)=SUM
10 CONTINUE
T_SCAL=SUM
C
Scale probability
DO 20 I=1,101
P_COLL(I)=P_COLL(I)/T_SCAL
C
C
20 CONTINUE
Get time slice:mean collision time
DT=1./T_SCAL
Monte Carlo Simulation
C
-Reset time
TIME=0.
C
-Initial position of particle
X=X0
Y=Y0
Z=Z0
VX=VX0
VY=VY0
VZ=VZ0
IM=1
DO 40 J=1,N_COLL
C
-Step DT
TIME=TIME+DT
C
C
-Before collision
..Time interval
CALL RAND_U(IX,RN)
DT_BEF=DT*RN
C
..Drift
X=X+VX*DT_BEF
Y=Y+VY*DT_BEF
Z=Z+VZ*DT_BEF
C
..Velocity of molecule
CALL RAND_U(IX,RN)
サンプルプログラム
8.17. 研究課題:気体中のブラウン粒子 -速度空間分布DO 30 K=2,101
IF(RN.LE.P_COLL(K).AND.RN.GT.P_COLL(K-1)) THEN
KS=K-1
30
ENDIF
CONTINUE
FV=DV*(RN-P_COLL(KS))/(P_COLL(KS+1)-P_COLL(KS))
V =DV*FLOAT(KS-1)+FV
CALL RAND_U(IX1,RN)
COSTH=1.-2.*RN
SINTH=SQRT(1.-COSTH**2)
CALL RAND_U(IX2,RN)
PHAI =2.*PI*RN
VXM =V*SINTH*COS(PHAI)
VYM
C
C
=V*SINTH*SIN(PHAI)
VZM =V*COSTH
-Kinematics
..Velocity of CMS
VCMX=(P_MASS*VX+G_MASS*VXM)/(P_MASS+G_MASS)
VCMY=(P_MASS*VY+G_MASS*VYM)/(P_MASS+G_MASS)
VCMZ=(P_MASS*VZ+G_MASS*VZM)/(P_MASS+G_MASS)
C
..Velocity in CMS
VRLX=VX-VCMX
VRLY=VY-VCMY
VRLZ=VZ-VCMZ
C
VRL =SQRT(VRLX**2+VRLY**2+VRLZ**2)
..Moving direction after collision
CALL RAND_U(IX3,RN)
COSTH=1.-2.*RN
SINTH=SQRT(1.-COSTH**2)
CALL RAND_U(IX4,RN)
PHAI =2.*PI*RN
C
C
-After collision
..Velocity
VRLX=VRL*SINTH*COS(PHAI)
VRLY=VRL*SINTH*SIN(PHAI)
VRLZ=VRL*COSTH
VX = VRLX+VCMX
VY
VZ
C
= VRLY+VCMY
= VRLZ+VCMZ
..Drift
X=X+VX*(DT-DT_BEF)
Y=Y+VY*(DT-DT_BEF)
Z=Z+VZ*(DT-DT_BEF)
CALL HBOOK(VX,HPA_VX,HAR_VX,HST_VX,1)
CALL HBOOK(VY,HPA_VY,HAR_VY,HST_VY,1)
129
130
第8章
CALL HBOOK(VZ,HPA_VZ,HAR_VZ,HST_VZ,1)
C
40 CONTINUE
Print out histograms
CALL HBOOK(VX,HPA_VX,HAR_VX,HST_VX,0)
CALL HBOOK(VY,HPA_VY,HAR_VY,HST_VY,0)
CALL HBOOK(VZ,HPA_VZ,HAR_VZ,HST_VZ,0)
STOP
END
SUBROUTINE RAND_U(IX,RN)
C
C
Uniform random number generator
C
C
IX
RN
C
C
----------------------IX = a*IX + b (mod n)
C
C
: Preceding/following random number
: Normalized random number
RN
=
IX/n
----------------------Double Precision N,MODULO
DATA MODULO/10000000/,IA/111/,IB/9/
N = IA*IX+IB
IX = DMOD(N,MODULO)
RN = FLOAT(IX)/SNGL(MODULO-1)
RETURN
END
サンプルプログラム