我试图编写一个简单的python代码来绘制给定温度t=200k下的强度与波长的关系图。
到目前为止我有这个。。。

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

我不知道如何定义波长(wav),从而产生普朗克公式的绘图。任何帮助都将不胜感激。

最佳答案

这是一个基本的情节要使用plt.plot(x, y, fmt)绘图,需要两个大小相同的数组x和y,其中x是要绘图的每个点的x坐标,y是y坐标,fmt是描述如何绘制数字的字符串。
所以你所需要做的就是创建一个均匀分布的波长数组(我称之为np.array)。这可以通过wavelengths来完成,它将创建一个从开始到结束(不包括)的数组,间距为arange(start, end, spacing)
然后使用函数计算数组中每个点(将存储在另一个spacing中)的强度,然后调用np.array绘制它们。注意,numpy让我们在avectorized form中对数组快速进行数学运算,这将提高计算效率。

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()

你看:
您可能需要清除轴标签、添加图例、在同一绘图上绘制多个温度下的强度等查阅relevant matplotlib documentation

关于python - 普朗克黑体光谱公式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22417484/

10-08 22:40