我一直在Matlab做这个程序大约4个星期,计算给定日期,时间和地点的太阳位置。现在我试图计算某一年的闰年,但似乎没有解决方案。这只是我的代码的一部分:
day=str2num(aw(1,1:2)); %To calculate day number (nth day of the year)
month=str2num(aw(1,4:5));
year=str2num(aw(1,4:5));
if mod(year,100)==0
switch month
case 1
dn=day;
case 2
dn=31+day;
case 3
dn=59+day;
case 4
dn=90+day;
case 5
dn=120+day;
case 6
dn=151+day;
case 7
dn=181+day;
case 8
dn=212+day;
case 9
dn=243+day;
case 10
dn=273+day;
case 11
dn=304+day;
case 12
dn=334+day;
end;
elseif mod(year,4)==0 && mod(year,400)~=0
switch month
case 1
dn=day;
case 2
dn=31+day;
case 3
dn=60+day;
case 4
dn=91+day;
case 5
dn=121+day;
case 6
dn=152+day;
case 7
dn=182+day;
case 8
dn=213+day;
case 9
dn=244+day;
case 10
dn=274+day;
case 11
dn=305+day;
case 12
dn=335+day;
end;
其余只是计算太阳位置的公式。是否可以将if
- else
语句与switch
/ case
语句合并?感谢有人帮助我,因为我不是真正的程序员。试着用MATLAB来推动这个计算。
答案 0 :(得分:1)
这不是你问题的真正答案,但可能是更好的做事方式。你应该使用MATLAB的内置datenum函数,而不是试图手工计算一年中的日期,这对于这种事情非常有用。例如,假设您有一个日期23/11/2008。您可以像这样确定一年中的某一天:
doy = datenum(2008,23,11) - datenum(2008,0,0);
datenum(2008,23,11)
计算从第0年到目标日期的天数。 datenum(2008,0,0)
计算从0年到2007年12月31日的天数。如果您减去这两个数字,则会得到目标日期的年份。这样你就不用担心闰年和所涉及的所有复杂问题,而只是让MATLAB为你处理它们。