- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试为给定温度 T=200K 的强度与波长图编写一个简单的 Python 代码。到目前为止我有这个...
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
中),然后调用 plt.plot
绘制它们。注意 numpy 让你可以在 vectorized 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.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/
使用 Redshift 光谱时,您似乎只能导入提供位置直到文件夹的数据,并且导入文件夹内的所有文件。 有没有办法从包含多个文件的文件夹中导入仅导入一个文件。当提供带有 filename 的完整路径时,
我正在评估 Athena 和 Redshift Spectrum。两者都有相同的目的,Spectrum 需要一个 Redshift 集群,而 Athena 是纯粹的无服务器集群。 Athena 使用
我们目前生成每日 CSV 导出,并将其上传到 S3 存储桶,结构如下: |--reportDate- |-- part0.csv.gz |-- part1.csv.gz 我们希望能够
我在 S3 中有一个 JSON 结构数组,它已被 Glue 成功抓取和编目。 [{"key":"value"}, {"key":"value"}] 我正在使用自定义分类器: $[*] 然而,当尝试从
我是一名优秀的程序员,十分优秀!