青ポスの部屋

旅と技術とポエムのブログ

【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分布を考える。すなわち分布関数が次で与えられる系を考える。

\displaystyle f(v)=\left(\frac{m}{2\pi T}\right)^{\frac{1}{2}}e^{-\frac{mv^2}{2T}}

1. 粒子の平均速度からの定義

今考えている系は1次元なので、平均値を考えると速度は0となってしまう。そのため2乗平均の平方根を考える。
\begin{eqnarray}\overline{v^2} &=&\left(\frac{m}{2\pi T}\right)^{\frac{1}{2}}\int^{\infty}_{-\infty}v^2 e^{-\frac{mv^2}{2T}}dv \\
&=&\frac{T}{m}
\end{eqnarray}
したがって
\displaystyle v_{th1}=\sqrt{\frac{T}{m}}
となる。

平均速度が0であることを考えると、v_{th1}は速度の統計的な揺らぎそのものであり、大多数の粒子はv_{th1}以下の速さで正か負の方向に運動していると解釈できる。

2. 速さの平均値

1次元Maxwell分布で「速度」の平均は0になるが、その絶対値である「速さ」の平均はそうはならない。それを計算してみると、
\displaystyle \begin{eqnarray}
v_{th2} &=& \overline{|v|}\\
&=&\left(\frac{2\pi T}{m}\right)^{\frac{1}{2}}\int^{\infty}_{-\infty}|v|e^{-\frac{mv^2}{2T}}dv \\
&=& \left(\frac{2\pi T}{m}\right)^{\frac{1}{2}} \times 2 \times \int^{\infty}_0 ve^{-\frac{mv^2}{2T}}dv \\ 
&=& 2 \times \left(\frac{m}{2\pi T}\right)^{\frac{1}{2}} \times \frac{1}{2} \times \frac{2T}{m} \\
&=& \sqrt{\frac{2T}{\pi m}}
\end{eqnarray}
となる。

3. 1/e値半幅

分布関数の指数部分がうまく規格化されるようにv_{th3}を定める。
\displaystyle v_{th3}=\sqrt{\frac{2T}{m}}
と定義すると、分布関数は
\displaystyle
f(v)=\left(\frac{m}{2\pi T}\right)^{\frac{1}{2}}e^{-\frac{v^2}{v_{th3}^2}}
と指数部分が速度が熱速度で規格化されたきれいな形になる。

このときのv_{th3}の意味だが、v=v_{th3}の粒子を考えると、
f(v_{th3})=f_0e^{-1}
となり、分布関数が最大値の1/eとなる速度であることがわかる。

4. で、結局どれなのか

ここまで3つの定義を述べたが、どれも使われていることがあるので、どれが使われているのかは前後の文脈から判断するしかない。

定義上係数がちがうだけだが、\sqrt{2/\pi}\simeq0.798, \sqrt{2}=1.414なので、
v_{th}=(1.106\pm0.308)\sqrt{\frac{T}{m}}
となり、相対誤差は最大で(1.414-0.798)/(0.798)=77.2%にもなる。

実際には熱速度は理論計算のときに式変形を簡単にするためであったり、数値として出てくるときは目安として出てくる。前者の場合は文脈から読み取れることも多いが、後者の場合は定義がかかれていなければまるで意味のないものになってしまう。なのでレポートに使うときはどの定義を使ったのかはっきり書いておく必要がある。

ここからは個人の感想だが、出てくる頻度としては1の定義が一番多い気がする。次に多いのは3の定義で、2の定義はwikipedia以外で見たことがない。

なお、3次元の場合でも考えることができ、そのときはさらに係数が変わってくる。計算は面倒なのでここでは書かない。

参考:この手の計算ではガウス積分の計算が大量に出てくる。わからなければ以下の拙著も参考にしてほしい。
bluepost69-tech.hatenablog.com

(ケ)旧京阪交通社の旅行業端末

 かつて、京阪グループは「京阪交通社」という旅行代理店を持っていた。京阪の主要駅に出店しており、MARSに接続された旅行業端末を持っていた。マルス券まとめのページによると、京阪交通社発行の乗車券は発行箇所に(ケ)と表記されていたらしい。

2011年、京阪交通社はJTBと共同出資の京阪トラベルへ旅行業を譲渡し、屋号もJTBとなった。そのため淀屋橋丹波橋にあった支店はJTBとなって営業を続けている。

そこでこの1年程度で、支店で乗車券を購入しようとしてみた。しかし「端末がないので取り寄せになる」ということが複数回あった。そのため、どうやら経営移行の際に撤去されてしまったようである。

撤去が確認された店舗

淀屋橋(端末がない旨掲示があった)
丹波橋

 仮に全部撤去されていたとして、淀屋橋や京橋は近くにほかの旅行代理店やJRの駅があるのでそれほど困ることもないだろうが、丹波橋枚方市はすこし遠くなので、困りそうだなと思った。

参考: 発行されていた時代のきっぷは検索してもなかなか出てこなかったが、以下のブログに掲載されていた。下にスクロールしていくと淀屋橋発行の18きっぷが掲載されている。