在MATLAB中是否可以将if语句与switch case语句结合使用?

时间:2013-12-04 02:41:33

标签: matlab if-statement switch-statement

我一直在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来推动这个计算。

1 个答案:

答案 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为你处理它们。