【问题标题】:Integrate the black body spectrum to get the sun's bolometric luminosity整合黑体光谱以获得太阳的辐射光度
【发布时间】:2014-11-03 22:08:26
【问题描述】:

我尝试整合黑体光谱(函数 BBS)以获得太阳的辐射光度(Lbol in main),它应该约为 3.85*10**26 瓦。但我只得到了其中的 1/3。

import numpy as np
from scipy.integrate import quad

global h, c, k # ISU
h = 6.62607e-34
c = 2.998e8
k = 1.38065e-23

global mu_min, mu_max
mu_min, mu_max = 3e10, 3e18
# hertz, corresponds to 1 ångström to 1e8 ångström
# while the sun's spectrum peak at 5000 ångström

global Rsun
Rsun = 6.955e8 # meter

def BBS(mu, tempe):
    i = 2.*h/(c**2.) * (mu**3.) / (np.exp(h/k*mu/tempe)-1.)
    return i

def Teff2Lbol(Teff):
    I = quad(BBS, mu_min, mu_max, args=(Teff,))[0]
    return I

def main():
    T = 5800 # Kelvin
    Lbol = Teff2Lbol(T) * (4*np.pi*Rsun**2.)

【问题讨论】:

  • 如果你做h = 6.62607e-34这样的事情可能会更干净
  • @BrianFunt 就像你说的那样。
  • 这是我在 Stack Overflow 中见过的最好的标题
  • 您能告诉我们您使用过哪些模块吗?顺便说一句,6.2607e-34 等中的 34 之后不应有任何小数点。此外,在 Python 中为变量赋值之前,无需声明变量。

标签: python physics astronomy


【解决方案1】:

你的代码是正确的,但你的物理绝对不是。光谱辐射度的测量单位为 W m-2 Hz-1 sr-1。 sr-1 是因为辐射是每单位立体角的,你必须在覆盖发射点的整个半球上积分。在计算该积分时,必须记住黑体是朗伯体,即它们根据余弦定律发射:I(theta) = I0*cos(theta),其中theta 是表面法线与辐射方向之间的角度。

要获得每单位表面积的总辐射度,您必须将频率上的积分乘以 cos(theta) dOmega 上半球上的积分(在球坐标中)。很容易通过解析计算该积分,其值正好是pi。因此,您必须将Teff2Lbol 重新定义为:

def Teff2Lbol(Teff):
    I = quad(BBS, mu_min, mu_max, args=(Teff,))[0]
    return np.pi*I

另外,请注意,当 98% 的辐射能量实际上位于 1013 Hz 和 1015 赫兹。幸运的是,QUADPACK 是一个非常好的集成商,能够处理此类情况。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-20
    • 1970-01-01
    • 2018-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多