计算晴空紫外线指数时如何处理太阳天顶角的负余弦值?
How to handle negative cosine of Solar Zenith Angle while calculating clear-sky UV Index?
我正在使用 this source to calculate the UVI value for every hour in a day (From 7am to 7pm). And using pysolar 模块来获取 Solar Zenith Angle
。等式如下:
from pysolar.solar import *
from math import cos
import datetime
dobj = datetime.datetime(2017,7,1,8,0)
sza = float(90)-get_altitude(42.57952, 1.65362, dobj)
ozone = 300
raw_uvi = 12.50*pow(cos(sza),2.42)*pow(float(ozone)/300,-1.23)
print (raw_uvi)
输出是:
0.4850283419701262+1.8890606693266203j
我的问题是当 cos(sza) 变为负数时,它会给出一个复数作为输出,我该如何处理?此外,在早上 7 点,uvi 结果为 9.232276464148745
,这是错误的。我错过了什么吗?还是我对算法的理解有误?
math.cos
需要弧度,但你似乎以度为单位。
使用 sza * math.pi / 180
将度数转换为弧度。那么你不应该得到 -90 和 +90 度之间的角度的负值(我想这是有道理的,假设 0 度意味着太阳在天顶,90 度是 horizon)。
我正在使用 this source to calculate the UVI value for every hour in a day (From 7am to 7pm). And using pysolar 模块来获取 Solar Zenith Angle
。等式如下:
from pysolar.solar import *
from math import cos
import datetime
dobj = datetime.datetime(2017,7,1,8,0)
sza = float(90)-get_altitude(42.57952, 1.65362, dobj)
ozone = 300
raw_uvi = 12.50*pow(cos(sza),2.42)*pow(float(ozone)/300,-1.23)
print (raw_uvi)
输出是: 0.4850283419701262+1.8890606693266203j
我的问题是当 cos(sza) 变为负数时,它会给出一个复数作为输出,我该如何处理?此外,在早上 7 点,uvi 结果为 9.232276464148745
,这是错误的。我错过了什么吗?还是我对算法的理解有误?
math.cos
需要弧度,但你似乎以度为单位。
使用 sza * math.pi / 180
将度数转换为弧度。那么你不应该得到 -90 和 +90 度之间的角度的负值(我想这是有道理的,假设 0 度意味着太阳在天顶,90 度是 horizon)。