Upload a notebook to connect that:

  • Uses your Planck function (or mine) and numpy.diff to find

    $$\frac{dE_\lambda}{d\lambda}$$

    for a range of wavelengths between 0.1 - 20 microns and temperatures of Temp = 250 K, 300 K, 350 K, 400 K.

  • With day3_datetime.ipynb_ Section 3 as a guide, plot these 4 curves with a legend and show that each one passes through 0 (i.e. the Planck function reaches a maximum) at a wavelength of:

    $$\lambda_{max} = \frac{a}{Temp}$$

    in agreement with Stull 2.14 (Wien's law)

    (i.e. -- your graph should have 4 lines, a legend, and four colored dots at coordinates ($\lambda_{max}$, 0) that hopefully lie on appropriate the line.


In [5]:
import numpy as np
from matplotlib import pyplot as plt
#
# get Stull's c_1 and c_2 from fundamental constants
#
c=2.99792458e+08  #m/s -- speed of light in vacuum
h=6.62606876e-34  #J s  -- Planck's constant
kb=1.3806503e-23  # J/K  -- Boltzman's constant
c=3.e8  #speed of light in vacuum (m/s)
c1=2.*h*c**2.*np.pi
c2=h*c/kb
sigma=2.*np.pi**5.*kb**4./(15*h**3.*c**2.)

def planckwavelen(wavel,Temp):
    """
    Calculate the blackbody radiant exitence (Stull 2.13)
    
    Parameters
    ----------
    
      wavel: float or array
           wavelength (meters)
           
      Temp: float
           temperature (K)
           
    Returns
    -------
    
    Elambda:  float or arr
           monochromatic radiant exitence (W/m^2/m)
    """
    Elambda=c1/(wavel**5.*(np.exp(c2/(wavel*Temp)) -1))
    return Elambda

In [6]:
%matplotlib inline
a= 2897.  #micron Kelvins -- Stull eq. 2.14
Temps = [250, 300, 350, 400]  #Kelvins
wavelengths = np.arange(0.1, 20,0.01)  #microns
#
# initialize a dictionary with empty lists
#
# below I do it the long way
#
# shorter way, use defaultdict:
# from collections import defaultdict
# hold_dict = defaultdict(list)
#
#
hold_dict={}
for a_temp in Temps: 
    hold_dict[a_temp] = []
    
dlambda = np.diff(wavelengths)
#
# empty list hold_list to hold the wavelengths of maxima
#
hold_max=[]
for a_temp in Temps:
    E_vals = planckwavelen(wavelengths*1.e-6,a_temp)*1.e-6  #W/m^2/micron
    dE = np.diff(E_vals)
    deriv = dE/dlambda
    hold_dict[a_temp]=deriv
    hold_max.append(a/a_temp)
  
plt.close('all')
avg_wavelength=(wavelengths[1:] + wavelengths[:-1])/2.
fig, ax = plt.subplots(1,)
for a_temp in hold_dict.keys():
    deriv = hold_dict[a_temp]
    max_wavelen = a/a_temp
    line_label = "{} K".format(a_temp)
    the_line=ax.plot(avg_wavelength,deriv,label=line_label)
    #
    # make the points and lines the same color
    #
    color=the_line[0].get_color()
    ax.plot(max_wavelen,0,'o',color=color)
_=ax.legend()



In [ ]: