-->

Etiquetas

La radiación del cuerpo negro y el fondo cósmico de microondas (CMB) en Python: parte I

Este post es el primero de una serie de dos en el cual examinaremos con ayuda del lenguaje Python las características de la radiación de un cuerpo negro en general y, en un segundo post, aplicaremos lo visto al caso particular del espectro de radiación térmica del fondo cósmico de microondas (CMB).
El estudio de las propiedades de los objetos celestes, como su color o luminosidad, necesita del concepto de cuerpo emisor ideal de radiación conocido como "cuerpo negro". Las estrellas radian energía que depende de su temperatura y de la longitud de onda de la radiación, y la ley de emisión de un cuerpo negro pude considerarse como una primera aproximación de las características de esta radiación. Por este motivo mostraré en este post como construir en Python las curvas de radiación características de un cuerpo negro a diferentes temperaturas, lo que constituirá además un buen ejercicio para practicar con el uso de unidades físicas con el módulo quantities, que fue el objeto del post anterior
Como de costumbre, esta entrada está escrita íntegramente utilizando el Notebook de IPhython

Importaciones y referencias

Puede consultarse el siguiente artículo en Wikipedia. Personalmente recomiendo la versión inglesa del mismo: Planck's law
In [1]:
%matplotlib inline

from __future__ import division

import quantities as pq
import numpy as np
import matplotlib.pyplot as plt

# Generar un cuadro con versiones de las librerías utilizadas en este notebook
#https://github.com/jrjohansson/version_information
%load_ext version_information
%version_information numpy, matplotlib, quantities
Out[1]:
SoftwareVersion
Python2.7.9 64bit [GCC 4.4.7 20120313 (Red Hat 4.4.7-1)]
IPython2.3.1
OSLinux 3.13.0 44 generic x86_64 with debian jessie sid
numpy1.9.1
matplotlib1.4.2
quantities0.10.1
Thu Jan 22 20:25:59 2015 CET

Radiación del cuerpo negro

La ecuación de Plank representa la intensidad de la radiación de un cuerpo negro en función de la longitud de onda. Existe una curva para cada temperatura del cuerpo negro. Su forma es conocida como Ley de Plank:
\[ B_\lambda(T) = \frac{2hc^2}{\lambda^5} \frac{1}{e^\frac{hc}{\lambda k_B T} -1}\]
\(B\) Es la radiancia espectral, definida como la potencia emitida por un área unidad del cuerpo negro en un ángulo sólido unitario normal al área, por unidad de longitud de onda. Se emplea normalmente la letra B en lugar de la letra I con la que se designan genéricamente las intensidades, para subrayar que nos estamos refiriendo específicamente a un cuerpo negro ("blackbody"). Sus unidades, suponiendo que medimos las longitudes de onda en namometros, serán: \(W m^{⁻2} nm^{-1} sr^{⁻1}\), siendo \(sr\) la unidad de ángulo sólido "estereorradian".
La fórmula anterior utiliza las constantes siguientes:
  • \(k_B\) la constante de Boltzmann
  • \(h\) la constante de Plank
las cuales, en el paquete de Python quantities se definen como:
In [2]:
print repr(pq.constants.Planck_constant)
print repr(pq.constants.Boltzmann_constant)
UnitConstant('Planck_constant', 6.62606896e-34 * s*J, 'h')
UnitConstant('Boltzmann_constant', 1.3806504e-23 * J/K, 'k')

Vamos a definir una función que permitirá calcular la radiancia espectral según la anterior fórmula de Plank
In [3]:
def B(wl,T):
    '''wl es un array de longitudes de onda con unidades de longitud
    T es una temperatura expresada en Kelvin
    el resultado es un array de r.e. con unidades W/(m**2 * nm * sr)
    '''
    I = 2 * pq.constants.h * (pq.c)**2 / wl**5 *  \
        1 / (np.exp((pq.constants.h*pq.c \
        / (wl*pq.constants.k*T)).simplified)-1)
    return I.rescale(pq.watt/(pq.m**2 * pq.nm *pq.sr))
Comprobaremos el correcto funcionamiento de la función con un ejemplo:
In [4]:
B( 5000 *pq.angstrom, 5780 *pq.K)
Out[4]:
array(26421.6296096971) * W/(m**2*nm*sr)
A continuación aplicaremos esta función para obtener las curvas de radiación del cuerpo negro para cuatro temperaturas
In [5]:
T1 = 4000 * pq.Kelvin
T2 = 5000 * pq.Kelvin
T3 = 6000 * pq.Kelvin
T4 = 7000 * pq.Kelvin
Representaremos las curvas con la función plot() del paquete Matplotlib
In [6]:
wl = np.arange(10,2000,10) * pq.nm    # array de longitudes de onda en nanometros

fig, ax = plt.subplots(figsize=(12, 8))
ax.plot(wl, B(wl,T4), label='7000K')
ax.plot(wl, B(wl,T3), label='6000K')
ax.plot(wl, B(wl,T2), label='5000K')
ax.plot(wl, B(wl,T1), label='4000K')
ax.legend()
ax.set_title(u'Radiación del cuerpo negro')
ax.title.set_fontsize(20)
ax.set_xlabel('Longitud de onda en nm')
ax.xaxis.label.set_fontsize(15)
ax.set_ylabel('Radianza espectral $(W m^{-2}nm^{-1}sr^{-1})$')
ax.yaxis.label.set_fontsize(15)
ax.axvspan(0,400,facecolor = 'violet',alpha = 0.6)
ax.axvspan(400,700, facecolor='yellow', alpha = 0.5)
ax.axvspan(700,2000, facecolor ='red', alpha = 0.3)
ax.text(150,6e4, 'UV', fontsize=30, color = 'b')
ax.text(1200,6e4, 'IR', fontsize=30, color = 'r')
ax.text(420,6e4, 'VISIBLE', fontsize=20, color = 'green');
En la anterior figura se aprecia muy bien como, conforme se eleva la temperatura del cuerpo negro, el máximo de la intensidad emitida va correspondiendo a longitudes de onda cada vez más cortas, es decir, frecuencias más elevadas, o fotones más energéticos, entrando este máximo, a partir de los 7000K, en la región del ultravioleta. Este hecho se expresa matemáticamente mediante la ley de Wien.

Ley de Wien

La longitud de onda máxima \(\lambda_{max} \) a la que emite un cuerpo negro viene dada por:
\[ \lambda_{max} = \frac{b}{T} \]
Siendo \(b\) la constante de Wien, cuyo valor viene dado por:
In [7]:
print repr(pq.constants.b)
UnitConstant('Wien_wavelength_displacement_law_constant', 0.0028977685 * m*K, 'b')

Veamos algunos ejemplos:
La estrella Betelgeuse, en la constelación de Orion, tiene una temperatura superficial de 3600K. Si la consideramos en primera aproximación como un cuerpo negro, ¿en qué longitud de onda presentará su espectro el máximo de radiación?
In [8]:
l_max = pq.constants.b/(3600 * pq.K)
print '%d Angstrom' %l_max.rescale(pq.angstrom)
8049 Angstrom

Es decir, la radiación de Betelgeuse alcanzará su máximo en la región del infrarojo cercano.
La ley de Wien también se puede utilizar para estimar la temperatura de una estrella a partir de su espectro (siempre con la aproximación de suponer un modelo de radiación de cuerpo negro):
In [9]:
# Supongamos que la radiación de una estrella tiene su intensidad máxima en los 400 nm

lmax  = 400 * pq.nm

T = pq.constants.b / lmax

print "Su temperatura efectiva será: %d K" %T.simplified
Su temperatura efectiva será: 7244 K

Ley de Stefan–Boltzmann

La ley de Stefan-Boltzmann es otra consecuencia importante de la ley de radiación de Plank. Indica que el valor de la energía total radiada por unidad de superficie y unidad de tiempo en todas las longitudes de onda, es proporcional a la cuarta potencia de la temperatura.
A la energía total radiada por unidad de superficie de un cuerpo negro en una unidad de tiempo, en todas las longitudes de onda se la conoce como potencia emisiva, y viene dada por:
\[ E = \sigma T^4 \]
E se mide en \(W/m^2\)
\(\sigma\) es la llamada constante de Stefan-Boltzmann, y su valor es:
In [10]:
print pq.constants.sigma, '=', pq.constants.sigma.simplified
1 sigma (Stefan_Boltzmann_constant) = 5.6704e-08 kg/(s**3*K**4)

Un concepto relacionado es el de la luminosidad intrínseca de una estrella, L, definida como la energía total radiada por la estrella en una unidad de tiempo. Si el radio de la estrella es R y la temperatura de su superficie es T, se cumplirá que:
\[L = 4 \pi R^2 E = 4 \pi R^2 \sigma T^4 \]
La fórmula anterior se podría en principio utilizar para calcular la temperatura de la estrella conocida su luminosidad. Sin embargo las estrellas no son cuerpos negros perfectos, aunque unas se aproximan más que otras. Por esta razón se utiliza el concepto de temperatura efectiva, que es la temperatura que tendría un cuerpo negro cuya luminosidad fuera la de la estrella. Esta temperatura efectiva puede considerarse como una aproximación de la temperatura real de la superficie de la estrella. veamos un ejemplo:
La luminosidad del Sol es: 3.839 x 10²⁶ W. ¿Cual será su temperatura efectiva?
In [11]:
# Necesitaremos el valor del radio del Sol:
sun_radius = 695000000.0 * pq.m

l_sun = 3.839e26 * pq.watt

temp_sun = (l_sun/(4 * np.pi * sun_radius**2 * pq.constants.sigma))**(1./4)
print temp_sun.simplified
5779.04712292 K

Bueno, de momento paramos en este punto para no hacer la entrada demasiado larga. En mi siguiente post aplicaré lo anterior al estudio con ayuda del lenguaje Python del espectro de radiación del fondo cósmico de microondas (CMB).

4 comentarios:

  1. Hola buenos días! muy bueno el post, quería saber como hacer para incrustar esas formulas tan bonitas en el Notebook usas LATEX?
    Tendrías el ejemplo de la ecuación de Plank?

    ResponderEliminar
  2. Muy buen trabajo amigo, de casualidad si tienes publicado la segunda parte soy nuevo en esta pagina saludos. me interesa ver del CMB

    ResponderEliminar
  3. Excelente contenido, no conocía quantities ahorra mucho trabajo, que gran aporte.

    ResponderEliminar