Python 整合黑体光谱以获得太阳';s测辐射热光度

Python 整合黑体光谱以获得太阳';s测辐射热光度,python,physics,astronomy,Python,Physics,Astronomy,我试图整合黑体光谱(函数BBS)来获得太阳的辐射热光度(主要是Lbol),应该是3.85*10**26瓦。但我只得到其中的三分之一 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, corres

我试图整合黑体光谱(函数BBS)来获得太阳的辐射热光度(主要是Lbol),应该是3.85*10**26瓦。但我只得到其中的三分之一

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

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

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

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

另外,请注意,当98%的辐射能量实际位于1013 Hz和1015 Hz之间时,在频率标度上积分超过8个数量级。幸运的是,QUADPACK是一个非常好的集成器,能够处理这种情况。

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

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

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

另外,请注意,当98%的辐射能量实际位于1013 Hz和1015 Hz之间时,在频率标度上积分超过8个数量级。幸运的是,QUADPACK是一个非常好的集成器,能够处理这种情况。

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

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

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

另外,请注意,当98%的辐射能量实际位于1013 Hz和1015 Hz之间时,在频率标度上积分超过8个数量级。幸运的是,QUADPACK是一个非常好的集成器,能够处理这种情况。

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

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

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

另外,请注意,当98%的辐射能量实际位于1013 Hz和1015 Hz之间时,在频率标度上积分超过8个数量级。幸运的是,QUADPACK是一个非常好的集成器,能够处理这种情况。

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