【python】matplotlibがdvipngを見つけられない
最近理論の話が続いたのでプログラムの話に戻ろう。
先日matplotlibを使ったpythonコードを移植しようとしたところ、以下のようなエラーを吐いて動かない、ということがあった。
Could not obtain dvipng version
直訳すると「dvipngのバージョンを特定できない」というような意味だが、実はそうではないらしい。
そもそもdvipngとはtexで出力に使われるdviをじかにpngに変換するソフトで、一度このブログでも取り上げている。texliveに含まれているソフトで、texliveをインストールすれば一緒に入ってくる。
移植先の環境にはtexliveがすでに入っていると思っていたのだが、まずwhichでdvipngを調べても入っておらず、platexを調べても入っていないことがわかった。
そこで「dvipngだけ入ればいいや」とdvipngだけインストールしようとしたら、今度はlibkpathseaだったかがないというエラーが出た。仕方なしにtexliveをまるごと入れると、無事matplotlibまで動くようになった。
ごく簡単なことだが、エラーメッセージで検索をかけると英語のページしか出てこなかったので。
「熱速度」とは結局何なのか
統計物理の重要な概念のひとつに「熱速度」という概念がある。
熱速度とは、気体やプラズマのように多くの粒子からなる系で、さまざまな速度で運動する粒子集団の代表的な速度として定義される。しかし定義がいくつかあるうえ、あまりテキストに載っていないので、初学者の混乱のもとになっている。なのでここでまとめてみようと思う。
この記事では、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となるのである。
--------------