プランクの放射式を python (matplotlib) で描く
python のライブラリ matplotlib で、関数の図を描く遊び。
ここでは試しに黒体放射からのスペクトルを例にしてみた。
欧米で主流の、python でほぼ全てやってしまう流へのステップのひとつ。
import pylab def planck(x, kt): norm = 2.1e-4 y = norm*x**3/(pylab.exp(x/kt)-1) return y xmin = 1e-2 xmax = 1e+4 ymin = 1e-8 ymax = 1e+3 fig = pylab.plt.figure() x = pylab.arange(xmin, xmax, 0.1) y1 = planck(x, 0.58) pylab.loglog(x, y1, 'r', lw=1.5) y2 = planck(x, 5.8) pylab.loglog(x, y2, 'g', lw=1.5) y3 = planck(x, 58) pylab.loglog(x, y3, 'b', lw=1.5) pylab.xlim(xmin, xmax) pylab.ylim(ymin, ymax) pylab.xlabel("Energy $\epsilon$ (eV)", fontsize=12, fontname='serif') pylab.ylabel("Specific Radiative Intensity \ (erg s$^{-1}$ cm$^{-2}$ Hz$^{-1}$ str$^{-1}$)", fontsize=12, fontname='serif') pylab.title("Planck's law", fontsize=12, fontname='serif') pylab.legend(("0.58 eV", "5.8 eV", "58 eV"), "upper left") fig.savefig("planck.png", format='png')
黒体放射の Planck の法則のメモ*1。
せっかくだから、物理も復習しておこう。
温度 (K) の黒体での周波数 における、単位体積、単位周波数あたりのエネルギー密度 は、
と表される。ここで、
は、単位体積あたりで周波数 にあるモード(独立な粒子/波)の数であり、残りの部分は 単位で離散化した平均エネルギーに対応する。
全方位 に等しく放射されているとき、単位時間あたり、単位面積から、単位立体角に放出される、単位周波数での放射輝度は
である。これを光子のエネルギー で書き表すと、
になる。
*1:はてなダイアリーで tex 記法を使ってみよう、という試し。はてなで tex を各のは現状ではそれほど綺麗ではない@2010/08/22。