内容:
matlab计算太阳高度角和方位角
输入年月日,小时,分钟,所在地经纬度,输出太阳高度角和方位角
%% 太阳高度角和方位角计算
%xp
%2024/1/2
function [al,az] = f_sun_angle2(year,mon,day,h,m,lo,la)
% 判断是这一年第几天
A = [31,28,31,30,31,30,31,31,30,31,30];
if mod(year,4)==0&&mod(year,100)~=0||mod(year,400)==0
A(2)=29;
end
num_day = sum(A(1:mon-1))+day;
% 计算日角
N_0 = 79.6764 + 0.2422 * (year - 1985) - floor((year - 1985) / 4);
b = 2 * pi * (num_day - N_0) / 365.2422;
% 计算当日的太阳赤纬角
ds=0.3723+23.2567*sin(b)+0.1149*sin(2.0*b)-0.1712*sin(3.0*b)-0.758*cos(b)...
+0.3656*cos(2.0*b)+0.02010*cos(3.0*b);
ds=deg2rad(ds);
% 计算真太阳时
% Ts表示真太阳时减去平太阳时的时差
Ts=0.0028-1.9587*sin(b)+9.9059*sin(2*b)-7.9024*cos(b)-0.6882*cos(2*b);
% end
% 计算时区及中心经度
zone = floor(lo / 15);
yushu = rem(lo, 15);
if yushu < 7.5
zoneout = zone;
else
zoneout = zone + 1;
end
zonecenter = zoneout * 15;
% end
S = h + m / 60;
if lo>0
Sd = S - (zonecenter - lo) / 15;
else
Sd = S + (zonecenter - lo) / 15;
end
st=Sd+Ts/60;
% 计算太阳时角
ts = (st - 12.0) * pi / 12.0;
% 高度角
al = asin(sin(ds) * sin(la * 0.01745329252) + cos(ds) * cos(la * 0.01745329252) * cos(ts));
% 方位角
% 真太阳时 st ∈ 0-24 & 时角ts > 0,或者真太阳时超界 & 时角<0 时,方位角取正值
az = acos((sin(al) * sin(la * 0.01745329252) - sin(ds)) / (cos(al) * cos(la * 0.01745329252)));
if (st > 0) && (st <24) && (ts < 0)
az = -az;
end
if ((st < 0) || (st > 24)) && (ts > 0)
az = -az;
end
al = rad2deg(al);
az = rad2deg(az);
az = az + 180;
end
参考文献: [1]葛海浪,臧勇,唐友亮等.太阳能自动跟踪系统研究[J].计算机测量与控制,2019,27(06):222-225.DOI:10.16526/j.cnki.11-4762/tp.2019.06.048.