2014-11-03 88 views
0

我试图整合黑体光谱(函数BBS)以获得太阳的热光度亮度(主要为Lbol),其应该约为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.) 
+0

如果你像'h = 6.62607e-34'这样的东西可能更干净 – binaryfunt 2014-11-03 22:48:27

+0

@BrianFunt就像你说的那样。 – CJJ 2014-11-03 23:50:14

+0

这是我在堆栈溢出中见过的最好的标题 – slezica 2014-11-03 23:51:07

回答

3

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

要获得每单位表面积的总辐射亮度,必须将频率上的积分乘以上半球上的积分(球面坐标)。计算积分分析很容易,其数值恰好为pi。因此,你必须重新定义Teff2Lbol为:

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

此外,需要注意的是积分,8订单的频率规模大小时的辐射能量的98%,10 赫兹之间实际上是介于和10 Hz。幸运的是,QUADPACK是一个非常好的集成商,能够处理这种情况。