radiation_thermometer.py 技術ドキュメント
プログラムの動作
radiation_thermometer.py は、プランクの放射則に基づき、物体が最も強く放射する波長(最大放射波長 \(\lambda_{max}\))からその物体の温度 \(T\) を計算するプログラムです。放射温度計の原理をシミュレートし、ウィーンの変位則の近似式による温度と、プランクの放射則を厳密に解いて得られる温度を比較します。
主な機能は以下の通りです。
所定の波長範囲(100 nm から 10000 nm)において、最大放射波長に対する温度を計算します。
温度計算には、ウィーンの変位則の近似式と、ニュートン法を用いた厳密解の2種類を使用します。
計算結果を標準出力に表形式で表示します。
近似温度と厳密温度、およびその差をグラフとして視覚化します。
このプログラムは、放射物理学における最大放射波長と温度の関係、およびその近似と厳密解の差異を理解するための教育的ツールとして役立ちます。
原理
このプログラムは、以下の物理法則と数値計算手法に基づいています。
プランクの放射則 黒体放射のスペクトル輝度 \(B(\lambda, T)\) は、以下の式で表されます。 $\(B(\lambda, T) = \frac{2hc^2}{\lambda^5} \frac{1}{e^{hc/(\lambda k_B T)} - 1}\)\( ここで、\)h\( はプランク定数、\)c\( は光速、\)k_B\( はボルツマン定数、\)T\( は絶対温度、\)\lambda$ は波長です。
ウィーンの変位則 プランクの放射則において、スペクトル輝度が最大となる波長 \(\lambda_{max}\) は、温度 \(T\) に反比例します。この関係はウィーンの変位則として知られています。 \(\lambda_{max} T = b\) ここで \(b\) はウィーンの変位定数です。
このプログラムでは、プランクの放射則の導関数がゼロとなる条件から得られる厳密な関係式を数値的に解きます。その条件は、\(x = hc/(\lambda_{max} k_B T)\) とおくと、以下の非線形方程式で与えられます。 $\(x = 5(1 - e^{-x})\)\( この方程式を \)T\( について解くために、プログラムでは `func(lm, T) = 0` の形式に変換しています。具体的には、 \)\(f(T) = \frac{hc}{\lambda_{max} k_B T (1 - e^{-hc/(\lambda_{max} k_B T)})} - 5 = 0\)\( を満足する \)T\( を求めています。コード内の `func(lm, T)` 関数は、`-5.0 + bhcl / (1.0 - exp(-bhcl))` を計算しており、これは上記の方程式の符号を反転したものです。この方程式の解 \)x\( は約 \)4.965$ です。
ウィーンの変位則(近似式) プログラムでは、厳密解の \(x \approx 4.965\) の代わりに、
4.97を用いた近似式で初期温度を計算します。 $\(T_{approx} = \frac{hc}{4.97 \lambda_{max} k_B}\)$ これは、コード内のTapprox = h * c / 4.97 / kB / (lm * 1.0e-9)に対応します。ニュートン法 上記の非線形方程式 \(f(T) = 0\) の厳密解 \(T_{exact}\) を求めるために、
scipy.optimize.newton関数を利用しています。これはニュートン・ラプソン法に基づいており、反復計算によって関数の根を効率的に見つけます。初期値として、ウィーンの変位則の近似式で得られた \(T_{approx}\) を使用することで、収束を速めています。
使用される物理定数:
h(プランク定数): \(6.6260755 \times 10^{-34}\) Jsc(光速): \(2.99792458 \times 10^8\) m/skB(ボルツマン定数): \(1.380658 \times 10^{-23}\) J/K
必要な非標準ライブラリとインストール方法
本プログラムは、以下の非標準ライブラリを使用します。
scipy: 科学技術計算ライブラリ。非線形方程式の根を求めるoptimize.newton関数を使用します。matplotlib: グラフ描画ライブラリ。計算結果の可視化に使用します。
これらのライブラリは、Pythonのパッケージマネージャーである pip を使ってインストールできます。
pip install scipy matplotlib
必要な入力ファイル
本プログラムは、コマンドライン引数や外部ファイルからの入力を必要としません。波長範囲やステップ幅などのパラメータは、プログラムのソースコード内で直接定義されています。
lmin: 最大放射波長の最小値 (100 nm)lmax: 最大放射波長の最大値 (10000 nm)lstep: 最大放射波長のステップ幅 (100 nm)
生成される出力ファイル
本プログラムは、計算結果を以下の形式で出力します。
標準出力(コンソール): 以下の4列のデータが、タブ区切り(
\t)で表示されます。lm (nm): 最大放射波長(ナノメートル)Tapproximation (K): ウィーンの変位則の近似式から計算された温度(ケルビン)Texact (K): プランクの放射則からニュートン法で厳密に計算された温度(ケルビン)difference (K): 厳密温度と近似温度の差 (\(T_{exact} - T_{approx}\))(ケルビン)
グラフィックウィンドウ:
matplotlibを使用して、以下の2つのグラフを含むウィンドウが表示されます。上段のグラフ: 「Temperature from maximum intensity wavelength」
横軸:
lambda_max (nm)(最大放射波長)縦軸:
T (K)(温度)近似式による温度(
approximation)と厳密解による温度(exact)が、異なる色でプロットされます。
下段のグラフ: 温度差
横軸:
lambda_max (nm)(最大放射波長)縦軸:
dT (K)(温度差 \(T_{exact} - T_{approx}\))近似温度と厳密温度の差がプロットされます。
グラフィックウィンドウは、ユーザーがEnterキーを押すまで表示され続けます。
コマンドラインでの使用例 (Usage)
本プログラムは、特にコマンドライン引数を必要としません。以下のコマンドで直接実行できます。
python radiation_thermometer.py
コマンドラインでの具体的な使用例
以下のコマンドを実行します。
python radiation_thermometer.py
実行結果の説明:
プログラムを実行すると、まず標準出力に以下のような計算結果の表が表示されます(表示は一部抜粋)。
lm (nm) Tapproximation (K) Texact (K) difference (K)
100.0 58703.119 58688.077 -15.042
200.0 29351.559 29344.038 -7.521
300.0 19567.706 19562.692 -5.014
400.0 14675.780 14672.019 -3.761
...
9900.0 592.961 592.819 -0.142
10000.0 587.031 586.881 -0.150
Press ENTER to exit>>
この表は、最大放射波長ごとに近似温度、厳密温度、およびその差を示しています。波長が短い(温度が高い)ほど、近似と厳密解の差が大きくなる傾向が見られます。
同時に、matplotlib によってグラフウィンドウがポップアップ表示されます。このウィンドウには、最大放射波長に対する近似温度と厳密温度の変化、および両者の差がプロットされた2つのサブグラフが含まれています。
プログラムは、「Press ENTER to exit>>」と表示された状態で一時停止し、グラフィックウィンドウとコンソールが待機状態になります。グラフィックウィンドウを確認した後、コンソールで Enter キーを押すことでプログラムが終了します。