In [1]:
%pylab inline
import matplotlib.pyplot as plt
from ipywidgets import *  # az interaktivitásért felelős csomag
Populating the interactive namespace from numpy and matplotlib

Planck's law of black-body radiation

(Planck-féle feketetest-sugárzási törvény)

In [2]:
hbar=1.0545718*10**(-34)  
kB = 1.3806488*10**(-23) 
clight= 299792458
In [3]:
def Planck_om(lam,T):
    # hbar/(pi**2*clight**3)*
    beta=1/(kB*T)
    tmp = omega**3/(exp(beta*hbar*omega)-1)
    return tmp

def Planck_lam(lam,T):
    # hbar/(pi**2*clight**3)*
    beta=1/(kB*T)
    omega=clight* 2*pi/lam
    tmp = 16*pi**2*hbar*clight*lam**(-5)/(exp(beta*hbar*omega)-1)
    return tmp
In [4]:
# Az abra kimentesehez az alabbiakat a plt.show()  ele kell tenni!!! 

#savefig('fig_rainbow_p2_1ray.pdf');  # Abra kimentese
#savefig('fig_rainbow_p2_1ray.eps');  # Abra kimentese

# Abra es fontmeretek
xfig_meret= 9   #    12 nagy abrahoz
yfig_meret= 6    #   12 nagy abrahoz
xyticks_meret= 15  #  20 nagy abrahoz
xylabel_meret= 20  #  30 nagy abrahoz
legend_meret= 17   #  30 nagy abrahoz

Spektral energy density: $\frac{dE}{d \omega} = u(\omega,T)$, where $u(\omega,T) = \frac{\hbar}{\pi^2 c^3}\, \frac{\omega^3 }{\left(e^{\beta \hbar \omega} -1\right)}$

The same as a function of wave length:

$\frac{dE}{d \lambda} = u(\lambda,T)$, where
$u(\lambda,T) = \frac{16 \pi^2 \hbar c }{\lambda^5\left(e^{\beta \hbar \omega} -1\right)}$

Wien's displacement law (Wien-féle eltolódási törvény):

Position of the maximum of the spectral energy density $u(ω,T)$ in frequency:

$\beta \hbar \omega_{\mathrm{max}} = 2.82144$

Position of the maximum of the energy density $u(\lambda,T)$ in wavelength:

$\frac{2\pi \hbar c}{k_\mathrm{B}T \lambda_{\mathrm{max}}} = 4.96511$

Universal Planck's law:

$u(x) = \frac{x^3}{e^x-1}$, where $x = \beta \hbar \omega$

Rayleigh-Jeans law:

$u(x) \approx x^2$ for $x \ll 1$

Wien's law:

$u(x) = x^3 e^{-x}$ for $x \gg 1$

In [11]:
npoints=100
xmax = 10  
x=linspace(0.001,xmax,npoints)

    
figsize(xfig_meret,yfig_meret)

plot(x,x**3/(exp(x)-1),color='r',lw=3,label='Planck\'s law')
plot(x,x**3/exp(x),'--g^',lw=2,label='Wien\'s law')

x=linspace(0.001,1.2,50)
plot(x,x**2,'--b',lw=3,label='Rayleigh-Jeans')

title("Universal Planck\'s law, $u(x)$",fontsize=15)
ylabel(r'$u(x)$',fontsize=xylabel_meret, rotation=0, labelpad=30)
xlabel(r'$x=\frac{\hbar \omega}{k_{\mathrm{B}}T} $',fontsize=xylabel_meret)

legend(loc='upper right',fontsize=12)

ylim(0,1.5)

grid();
In [6]:
npoints=1000
lammax = 3000  #  in nm 
x=linspace(10,lammax,npoints)

Tvec=[3000,4000,5000]
vonal=['-.','--','-']

xmm=4.965114231 #  Wien eltolodasi torveny
lamvec=[]
for TT in Tvec:
    lamvec.append(10**9*clight*2*pi/(kB*xmm*TT/hbar))

print(lamvec)

ommax = 2.814*kB*Tvec[-1]/hbar #  \omega_max erteke a legnagyobb T-nel.
norm = 1/Planck_lam(lamvec[-1]*10**(-9),Tvec[-1]) # a Planck gorbe maximuma a legnagyobb T-nel, 
                                # ezzel normalunk
    
figsize(xfig_meret,yfig_meret)

[plot(x,norm*Planck_lam(x*10**(-9),Tvec[i]),label=r'$T= $' + str(Tvec[i]) +' K',
      ls=vonal[i],color='k') 
 for i in range(3)]


title("Planck\'s law, $u(\lambda,T)$",fontsize=15)
ylabel(r'$u(\lambda,T)$',fontsize=xylabel_meret, rotation=0, labelpad=30)
xlabel(r'$\lambda\, (\mathrm{nm}) $',fontsize=xylabel_meret)

xvcoord=[450,500,700]
szin=['b','g','r']
[axvline(x=xvcoord[i],color=szin[i]) for i in range(len(xvcoord))]

ylim(0,1.1)
legend(loc='upper right',fontsize=legend_meret)
grid();
[965.9241089669024, 724.4430817251769, 579.5544653801414]
In [7]:
npoints=1000
lammax = 6000  #  in nm 
x=linspace(10,lammax,npoints)

Tvec=[3000,4000,5000]
vonal=['-.','--','-']

xmm=4.965114231 #  Wien eltolodasi torveny
lamvec=[]
for TT in Tvec:
    lamvec.append(10**9*clight*2*pi/(kB*xmm*TT/hbar))

print(lamvec)

ommax = 2.814*kB*Tvec[-1]/hbar #  \omega_max erteke a legnagyobb T-nel.
norm = 1/Planck_lam(lamvec[-1]*10**(-9),Tvec[-1]) # a Planck gorbe maximuma a legnagyobb T-nel, 
                                # ezzel normalunk
    
figsize(xfig_meret,yfig_meret)

[plot(x,norm*Planck_lam(x*10**(-9),Tvec[i]),label=r'$T= $' + str(Tvec[i]) +' K',
      ls=vonal[i],color='k') 
 for i in range(3)]


text(2200, 0.2, 'Rayleigh-Jeans \n classical model', fontsize=15)

xRJ=linspace(2000,lammax,100)
[plot(xRJ,norm*16*pi**2*hbar*clight*(xRJ*10**(-9))**(-5)/
      (exp(hbar*2*pi/(xRJ*10**(-9))/kB/Tvec[i])),'--r.')  for i in range(3)] 

title("Planck\'s law, $u(\lambda,T)$",fontsize=15)
ylabel(r'$u(\lambda,T)$',fontsize=xylabel_meret, rotation=0, labelpad=30)
xlabel(r'$\lambda\, (\mathrm{nm}) $',fontsize=xylabel_meret)

xvcoord=[450,500,700]
szin=['b','g','r']
[axvline(x=xvcoord[i],color=szin[i]) for i in range(len(xvcoord))]

ylim(0,0.35)
legend(loc='upper right',fontsize=legend_meret)
grid();
[965.9241089669024, 724.4430817251769, 579.5544653801414]
In [8]:
def rajzPlanck(lammin,lammax,npoints,TT): 

#    npoints=1000
#    lammax = 3000  #  in nm 
    x=linspace(10,lammax,npoints)

 #   TT=5000

    xmm=4.965114231 #  Wien eltolodasi torveny
    lamvec=10**9*clight*2*pi/(kB*xmm*TT/hbar)

    ommax = 2.814*kB*Tvec[-1]/hbar #  \omega_max erteke a legnagyobb T-nel.
    norm = 1/Planck_lam(lamvec*10**(-9),TT) # a Planck gorbe maximuma a legnagyobb T-nel, 
                                # ezzel normalunk
    
    figsize(xfig_meret,yfig_meret)
     
    norm=1
    plot(x,norm*Planck_lam(x*10**(-9),TT),label=r'$T= $' + str(TT) +' K',
      ls='-',color='k') 

    title("Planck\'s law, $u(\lambda,T)$",fontsize=15)
    ylabel(r'$u(\lambda,T)$',fontsize=xylabel_meret, rotation=0, labelpad=30)
    xlabel(r'$\lambda\, (\mathrm{nm}) $',fontsize=xylabel_meret)

    xvcoord=[450,500,700]
    szin=['b','g','r']
    [axvline(x=xvcoord[i],color=szin[i]) for i in range(len(xvcoord))]

    #ylim(0,1.1)
    legend(loc='upper right',fontsize=legend_meret)
    grid();

    print('blue = {0:.0f} nm'.format(xvcoord[0] ))
    print('green = {0:.0f} nm'.format(xvcoord[1] ))
    print('red = {0:.0f} nm'.format(xvcoord[2] ))
    
    print('lambda_max = {0:.3f} nm'.format(lamvec))
In [9]:
interact(rajzPlanck,
               lammin=fixed(10),
               lammax=fixed(3000),
               TT=FloatSlider(min=300,max=5000,step=500,value=3000,description='T='),
               npoints=fixed(1000));
blue = 450 nm
green = 500 nm
red = 700 nm
lambda_max = 965.924 nm