「熱速度」とは結局何なのか
統計物理の重要な概念のひとつに「熱速度」という概念がある。
熱速度とは、気体やプラズマのように多くの粒子からなる系で、さまざまな速度で運動する粒子集団の代表的な速度として定義される。しかし定義がいくつかあるうえ、あまりテキストに載っていないので、初学者の混乱のもとになっている。なのでここでまとめてみようと思う。
この記事では、1次元Maxwell分布を考える。すなわち分布関数が次で与えられる系を考える。
1. 粒子の平均速度からの定義
今考えている系は1次元なので、平均値を考えると速度は0となってしまう。そのため2乗平均の平方根を考える。
したがって
となる。
平均速度が0であることを考えると、は速度の統計的な揺らぎそのものであり、大多数の粒子は以下の速さで正か負の方向に運動していると解釈できる。
2. 速さの平均値
1次元Maxwell分布で「速度」の平均は0になるが、その絶対値である「速さ」の平均はそうはならない。それを計算してみると、
となる。
3. 1/e値半幅
分布関数の指数部分がうまく規格化されるようにを定める。
と定義すると、分布関数は
と指数部分が速度が熱速度で規格化されたきれいな形になる。
このときのの意味だが、の粒子を考えると、
となり、分布関数が最大値の1/eとなる速度であることがわかる。
4. で、結局どれなのか
ここまで3つの定義を述べたが、どれも使われていることがあるので、どれが使われているのかは前後の文脈から判断するしかない。
定義上係数がちがうだけだが、なので、
となり、相対誤差は最大で(1.414-0.798)/(0.798)=77.2%にもなる。
実際には熱速度は理論計算のときに式変形を簡単にするためであったり、数値として出てくるときは目安として出てくる。前者の場合は文脈から読み取れることも多いが、後者の場合は定義がかかれていなければまるで意味のないものになってしまう。なのでレポートに使うときはどの定義を使ったのかはっきり書いておく必要がある。
ここからは個人の感想だが、出てくる頻度としては1の定義が一番多い気がする。次に多いのは3の定義で、2の定義はwikipedia以外で見たことがない。
なお、3次元の場合でも考えることができ、そのときはさらに係数が変わってくる。計算は面倒なのでここでは書かない。
参考:この手の計算ではガウス積分の計算が大量に出てくる。わからなければ以下の拙著も参考にしてほしい。
bluepost69-tech.hatenablog.com
ガウス積分チートシート
理系学生としてあってはならないことだが、僕は頻繁にガウス積分を忘れる。導出の方法は覚えているのだが、毎回導出するのはかなりあほらしいしまちがいのもとにもなりかねないので、ここにまとめておこうと思う。
- 1.一番基本的なケース(e^{-x^2})
- 2.指数の肩が定数倍されているケース(e^{-ax^2})
- 3.積分区間が0以上のみのケース
- 4. xがかかっているケース(xe^{-x^2})
- 5.x^nがかかっているケース(x^n e^{-ax^2})
1.一番基本的なケース(e^{-x^2})
積分の積に関する可換性と変数変換を用いる。
とおくと、
ここで2次元極座標に変換する、すなわち
なる変数変換を行う。ただし、変域はもも負の無限大から正の無限大だったので、点対称となりの項はとなる。すなわち
となる。ここの積分がわからない場合は4を参照されたい。の正値性より積分も正なので、
を得る。
--------------
3.積分区間が0以上のみのケース
これも、が偶関数であることを考えれば単純で、2の結果を半分にすればよい。すなわち
また、次のように考えてもよい。1の議論で「積分は全空間だから角度積分はとなる」とした。それに対して積分区間が0から無限大の場合、の積分領域は座標平面で、がともに正である第一象限のみとなり、は1/4、結局は1/2となるのである。
--------------
【python】fortranのnamelistで書かれた設定ファイルを読み込む(f90nml)
以前fortranのnamelistという機能を紹介した。
数字を羅列しただけの平文ファイルとちがってnamelistはfortran独自のものなので、ほかの言語で読み込む場合は何らかの工夫が必要になる。
「fortranで計算した結果をpythonのmatplotlibでグラフ化したい」というような場合は多々あるだろう。pythonではそのために「f90nml」というライブラリが用意されている。
インストールについてはpipが使える環境であれば簡単にできる。またgit cloneしてインストールすることもできる。インストールについては以下を参照されたい。
f90nml 0.2.1 : Python Package Index
ただしこのドキュメントには1ヶ所間違いがある。管理者権限のないユーザでも--userをつければインストールできるとあるが、オプションをつける位置が間違っており、正しくは以下のようにする必要がある。
python setup.py install --user
f90nmlではreadというメソッドでnamelistをリストとして読み込み、writeというメソッドで出力できる。
具体的な使い方として、前回の記事で使ったparams.inのhogeというリストのyyという要素を取得するには、次のようにする。
import f90nml
params=f90nml.read('params.in')
yy=params['params']['yy']