Estoy tratando de escribir un simple código de python para una parcela de intensidad vs longitud de onda para una temperatura dada, T=200K.
Hasta ahora tengo esto…

import scipy as sp
import math
import matplotlib.pyplot as plt
import numpy as np
pi = np.pi
h = 6.626e-34
c = 3.0e+8
k = 1.38e-23

def planck(wav, T):
    a = 2.0*h*pi*c**2
    b = h*c/(wav*k*T)
    intensity = a/ ( (wav**5)*(math.e**b - 1.0) )
    return intensity

No sé cómo definir la longitud de onda(wav) y, por tanto, producen la trama de las chapas de la Fórmula. Cualquier ayuda se agradece.

  • Es de suponer que usted desea un rango de longitudes de onda. ¿Sabe usted qué rango? Buscar en range.
  • Generalmente la longitud de onda es sólo hasta espaciados vector, puede utilizar np.arange o np.linspace. Recuerde que la sangría en su función de planck.
InformationsquelleAutor | 2014-03-14

1 Comentario

  1. 6

    Aquí básico de una parcela. Para trazar el uso de plt.plot(x, y, fmt) se necesitan dos matrices x e y del mismo tamaño, donde x es la coordenada x de cada punto de la parcela y y es la coordenada y, y fmt es una cadena que describe la forma de representar los números.

    Así que todo lo que necesitas hacer es crear una espaciados uniformemente gama de longitudes de onda (un np.array que he nombrado wavelengths). Esto se puede hacer con arange(start, end, spacing) que va a crear una matriz de principio a fin (no incluido) espaciados a spacing aparte.

    A continuación, calcular la intensidad de uso de su función en cada uno de esos puntos en la matriz (que serán almacenados en otro np.array) y, a continuación, llamar a plt.plot para trazar. Nota numpy vamos a hacer operaciones matemáticas con matrices rápidamente en un vectorizados formulario que será computacionalmente eficiente.

    import matplotlib.pyplot as plt
    import numpy as np
    
    h = 6.626e-34
    c = 3.0e+8
    k = 1.38e-23
    
    def planck(wav, T):
        a = 2.0*h*c**2
        b = h*c/(wav*k*T)
        intensity = a/ ( (wav**5) * (np.exp(b) - 1.0) )
        return intensity
    
    # generate x-axis in increments from 1nm to 3 micrometer in 1 nm increments
    # starting at 1 nm to avoid wav = 0, which would result in division by zero.
    wavelengths = np.arange(1e-9, 3e-6, 1e-9) 
    
    # intensity at 4000K, 5000K, 6000K, 7000K
    intensity4000 = planck(wavelengths, 4000.)
    intensity5000 = planck(wavelengths, 5000.)
    intensity6000 = planck(wavelengths, 6000.)
    intensity7000 = planck(wavelengths, 7000.)
    
    plt.hold(True) # doesn't erase plots on subsequent calls of plt.plot()
    plt.plot(wavelengths*1e9, intensity4000, 'r-') 
    # plot intensity4000 versus wavelength in nm as a red line
    plt.plot(wavelengths*1e9, intensity5000, 'g-') # 5000K green line
    plt.plot(wavelengths*1e9, intensity6000, 'b-') # 6000K blue line
    plt.plot(wavelengths*1e9, intensity7000, 'k-') # 7000K black line
    
    # show the plot
    plt.show()

    Y vea usted:

    Las chapas Fórmula para el espectro de cuerpo negro

    Usted probablemente querrá limpiar las etiquetas de los ejes, agregar una leyenda, la trama de la intensidad en varias de las temperaturas en la misma parcela, entre otras cosas. Consultar el pertinentes matplotlib documentación.

    • por qué math.e**b en lugar de sólo np.exp(b)
    • Porque me tomó de la función de user3421850‘s pregunta y se utiliza math.e**b.
    • Ahora que lo miro, su fórmula es incorrecta, ya que tienen un extra de pi en la fórmula para a. (Nota h es la constante de Planck, no h-bar (de Planck reducida constante ħ = h/2pi).)
    • Re unidades: es de todos modos mejor usar siempre adimensional unidades en lugar de (arbitrario) unidades del SI. Escribir la fórmula en una hoja de papel, el uso de las sustituciones (aquí, x = \manejadores * \omega / k T), de expresar tanto la rhs y lhs en términos de adimensional funciones de variables adimensionales, parcela de aquellos (y el uso de etiquetas en el eje para que indique exactamente variables).
    • ¿Por qué estás comentando conmigo acerca de esto? El planck ecuación fue tomada desde el OP pregunta sólo trivialmente modificado inicialmente (añadir sangría y quitar paréntesis en la instrucción return). Hay muchas situaciones que tiene más sentido para la trama en unidades del SI; por ejemplo, cuando la ingeniería o cuando se tiene familiaridad con longitudes de onda (por ejemplo, visible es de ~400 nm (violeta) y 700 nm (rojo)). Además se debe nunca deje caer o innecesariamente agregar adimensional constantes como pi como nunca se puede añadir de nuevo en medio de análisis dimensional (unir con otra variable está muy bien).
    • A la pregunta original, quería intensidad vs longitud de onda no la frecuencia, por lo que su sustitución es algo muy diferente. Nota su B_\nu d\nu = – B_\lambda d\lambda, por lo que el cuerpo negro de la fórmula que se trazan contra de la frecuencia y la longitud de onda va a tener, por ejemplo, los picos en diferentes puntos (frecuencia pico != c/pico de longitud de onda). Finalmente, T varía de forma independiente de la longitud de onda (y la frecuencia) y la longitud de onda (y la frecuencia) que aparecen en otras partes de la fórmula, por lo que no tiene sentido agrupar juntos. (Si lo hace feo/unidades extrañas.) Pero, siéntase libre de hacer una parcela de su propio.

Dejar respuesta

Please enter your comment!
Please enter your name here