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 サンプルプログラム
© Copyright 2024 Paperzz