3 python numpy matplotlib scipy
我试图写一个简单的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
Run Code Online (Sandbox Code Playgroud)
我不知道如何定义波长(wav),从而产生普朗克公式的图.任何帮助,将不胜感激.
这是一个基本情节.要使用绘图,plt.plot(x, y, fmt)
您需要两个相同大小的数组x和y,其中x是要绘制的每个点的x坐标,y是y坐标,并且fmt
是描述如何绘制数字的字符串.
因此,您需要做的就是创建一个均匀间隔的波长阵列(np.array
我将其命名wavelengths
).这可以arange(start, end, spacing)
用来创建从开始到结束(不包括)间隔开的阵列spacing
.
然后使用函数在数组中的每个点计算强度(将存储在另一个点中np.array
),然后调用plt.plot
绘制它们.注意numpy让你以矢量化的形式快速对数组进行数学运算,这将在计算上有效.
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()
Run Code Online (Sandbox Code Playgroud)
而你看到:
您可能需要清理轴标签,添加图例,在同一图表上绘制多个温度下的强度等.请参阅相关的matplotlib文档.
归档时间: |
|
查看次数: |
13096 次 |
最近记录: |