blackbody_radiation.py 技術ドキュメント
プログラムの動作
blackbody_radiation.py は、指定されたExcelファイルから太陽光スペクトルデータを読み込み、そのスペクトルデータと、指定された温度におけるプランクの法則に基づく理想的な黒体放射スペクトルとを比較・可視化するPythonプログラムです。太陽光がどの程度、ある温度の黒体放射に近いかを知ることができます。
原理
このプログラムは、以下の主要な物理式に基づいています。
プランクの法則(Planck's Law) プランクの法則は、絶対温度 \(T\) の黒体が放出する電磁波のスペクトル放射輝度 \(B(\lambda, T)\) を記述するものです。波長 \(\lambda\) におけるスペクトル放射輝度は以下の式で表されます。
\[B(\lambda, T) = \frac{2hc^2}{\lambda^5} \frac{1}{e^{hc/(\lambda k_B T)} - 1}\]ここで、
\(h\) はプランク定数 (\(6.6260755 \times 10^{-34} \text{ Js}\))
\(c\) は光速 (\(2.99792458 \times 10^8 \text{ m/s}\))
\(k_B\) はボルツマン定数 (\(1.380658 \times 10^{-23} \text{ J/K}\))
\(T\) は絶対温度 (\(\text{K}\))
\(\lambda\) は波長 (\(\text{m}\))
プログラム中では、エネルギー密度に関連する量として、\(\frac{8 \pi h c}{\lambda^5 (e^{hc/(\lambda k_B T)} - 1)}\) の形式で計算されています。この計算結果は、さらに
1.0e-6 * 1.5という係数で調整され、単位が W/(m\(^2\) m) から W/(m\(^2\) nm) に変換されています。物理定数 プログラム内で以下の物理定数が使用されています。
\(\pi\) (円周率)
\(h\) (プランク定数)
\(hbar\) (ディラック定数, \(\hbar = h/(2\pi)\)。ただしプログラム中では未使用)
\(c\) (光速)
\(e\) (素電荷, \(1.60218 \times 10^{-19} \text{ C}\)。ただしプログラム中では未使用)
\(k_B\) (ボルツマン定数)
必要な非標準ライブラリとインストール方法
このプログラムの実行には、以下のPython非標準ライブラリが必要です。
openpyxl: Excel (.xlsx) ファイルの読み込みに使用します。numpy: 数値計算用のライブラリですが、このプログラムではインポートされているものの、直接的な機能は使用されていません。しかし、一般的な科学計算環境の一部としてインストールしておくことを推奨します。matplotlib: グラフ描画に使用します。
これらのライブラリは、Pythonのパッケージ管理システム pip を使ってインストールできます。
pip install openpyxl numpy matplotlib
必要な入力ファイル
プログラムは、solar.xlsx という名前のExcelファイルから太陽光スペクトルデータを読み込みます。
ファイル形式: Excel (.xlsx) 形式
ファイル名:
solar.xlsx(プログラム内でハードコードされています)データ構造:
データはアクティブシートから読み込まれます。
波長データは
H列(またはコメントアウトされたB列)に格納されていると期待されます。エネルギー密度データは
J列(またはコメントアウトされたD列)に格納されていると期待されます。データは2行目から読み込みを開始します。
波長の単位はマイクロメートル (\(\mu m\))、エネルギー密度の単位は W/m\(^2\)/\(\mu m\) であると想定されます。
データの読み込みは、セルが空になるか、浮動小数点数への変換に失敗するまで続きます。
生成される出力ファイル
このプログラムはファイル出力を生成しません。 代わりに、以下の出力を生成します。
標準出力:
読み込んだExcelシートの名前が表示されます。
Excelファイルから読み込んだ波長(nm)とエネルギー密度(W/m\(^2\)nm)のデータがタブ区切りで表示されます。
プログラム終了時に「Press ENTER to exit>>」というメッセージが表示され、ユーザーの入力を待ちます。
グラフウィンドウ:
matplotlibを使用して、太陽光スペクトルと計算された黒体放射スペクトルを比較するグラフウィンドウが表示されます。X軸は波長 (um)、Y軸はエネルギー密度 (W/m\(^2\)nm) です。
グラフには凡例が表示され、各データ系列を識別できます。
コマンドラインでの使用例 (Usage)
プログラムは、黒体放射の計算に使用する温度をコマンドライン引数として受け取ります。
python blackbody_radiation.py T
T: 黒体放射スペクトルを計算するための絶対温度(ケルビン単位)。浮動小数点数も指定可能です。
コマンドラインでの具体的な使用例
実行コマンド
太陽の表面温度に概ね相当する $6000 \text{ K}$ を温度として指定して実行する例です。
python blackbody_radiation.py 6000
実行結果
上記のコマンドを実行すると、以下のような出力が標準出力に表示され、別途グラフウィンドウが開きます。
['Sheet1']
lambda(um) E(W/m2/um)
100.22 0.0001
100.74 0.0001
101.27 0.0001
101.8 0.0001
... (中略) ...
2999.6 0.0001
Press ENTER to exit>>
(標準出力には、Excelシート名 ['Sheet1'] と、読み込まれた波長とエネルギー密度データが大量に表示されます。上記は例として一部を抜粋したものです。)
同時に、matplotlib によって以下のようなグラフウィンドウが表示されます。
グラフの内容:
青色の線:
solar.xlsxから読み込まれた太陽光スペクトルデータ。赤色の線: 指定された
$6000 \text{ K}$で計算されたプランクの法則に基づく黒体放射スペクトル。
軸の範囲:
X軸(wavelength (um))は
$0 \text{ um}$から$3000 \text{ um}$。Y軸(Energy density (W/m\(^2\)nm))は
$0 \text{ W/m^2nm}$から$2.2 \text{ W/m^2nm}$。
凡例: 各プロットの識別情報が表示されます。
終了: グラフウィンドウとプログラムは、標準出力で「Press ENTER to exit>>」と表示されたプロンプトで
Enterキーが押されるまで閉じません。