This workbook calculates the black-body spectra of 'hot' objects, in this case a hot cup of tea and a person.
To do this the code includes examples of how to find the maximum value of a numpy
array, using np.amax()
, and the array index that this corresponds to, using np.argmax()
.
In the case of black-body radiation, we can use these two functions to find the wavelength at which the spectral intensity is a maximum, and the maximum intensity.
The Planck equation describes a blackbody radiation curve. It is a historically important equation in quantum theory, because it was the first use of quantisation of energy.
\begin{equation} I_{\lambda, T} = \frac{2hc^2}{\lambda ^5 e^{\frac{hc}{\lambda k_B T}}-1} \end{equation}This notebook uses a function to calculate the intensity of the radiation at each wavelength.
Other techniques used in this notebook are:
matplotlib.pyplot
is used to plot the calculated spectra.numpy
is used for handling the arrays used in the calculations.np.argmax
and np.amax
are used to find the wavelength of the maximum value and the maximum intensity, respectively.Some other useful things to note...
\mu
+'tab' changes in your notebook to read $\mu$.matplotlib
, but these are most of the single letter colours.display
it. This allows us to combine the results from our calculation with the nice formatting available with LaTeX and Markdown. The details of how this works, and an introduction to formatted print, and using LaTeX in Markdown will all be topics covered in future notebooks.import matplotlib.pyplot as plt
import numpy as np
from scipy.constants import h #Planck's constant
from scipy.constants import c #speed of light
from scipy.constants import k #Boltzmann constant
from IPython.display import Markdown as md
#
def planck(lambdanm, T):
intensity = 2.0*h*c**2/ ( (lambdanm**5) * (np.exp(h*c/(lambdanm*k*T)) - 1.0) )
return intensity
#
## wavelengths in increments from 100nm to 60 um in 1 nm increments
wavelengths = np.arange(100e-9, 60e-6, 1e-9)
#
## intensity at 363K, 310K
intensity363 = planck(wavelengths, 363.) #hotcupoftea
#intensity310 = planck(wavelengths, 310.) #person
#note the use of the multiplier on the wavelengths such that it willnow have units of μm
plt.plot(wavelengths*1e6, intensity363, 'c-', label='363 K') #hotcupoftea - cyan
#plt.plot(wavelengths*1e6, intensity310, 'm-', label='310') #person - magenta
plt.title('Black body radiation curves')
plt.legend() # Shows the legend
plt.xlabel('$\lambda$ / $\mu$m')
plt.ylabel('intensity')
## show the plot
plt.show()
print ("λ max =", wavelengths[np.argmax(intensity363)]*1e6, "μm")#maximum wavelength of emission, np.argmax(intensity373,axis=0)] is pulling the maximum value from the intensity array and then matching it to the corresponding wavelength in put to the calculation
#you can get the mu symbol by typing in the latex for it then pressing tab! so \mu tab!
print ("I max = ", np.amax(intensity363), "J m^2")
λ max = 7.983 μm I max = 25814151.3197 J m^2
from IPython.display import Markdown as md
lambda_max = wavelengths[ np.argmax( intensity363 ) ]
display( md(r"$\lambda_\mathrm{{max}}$ = {:.3f} $\mu$m".format( lambda_max * 1e6 ) ) )
display( md(r"$I_\mathrm{{max}}$ = {:.3e} J m$^{{-2}}$.".format( np.max( intensity363 ) ) ) )
$\lambda_\mathrm{max}$ = 7.983 $\mu$m
$I_\mathrm{max}$ = 2.581e+07 J m$^{-2}$.