首页 > 解决方案 > 使用 Matlab 在循环内更改循环

问题描述

我查看了 Matlab 手册和各种帖子,但似乎没有什么合适的。您会在下面找到有问题的代码。

我的代码运行良好,但是,我不确定 Year 和 PartOfYear 的循环。我希望我的代码运行 Year = 2008:2016 和 PartOfYear = 1:2,但是,当 Year = 2017 时,它应该只运行 PartOfYear = 1。即,当 Year = 2017 时没有 PartOfYear = 2。是有更有效(甚至正确,因为我的可能不正确)的方法吗?目前,我只是尝试再次运行 PartOfYear = 1,只要它到达 Year = 2017,PartOfYear = 2,因此只需执行这部分代码两次,但我认为它不正确且效率低下,因为结果似乎要关闭。

谢谢!

for index = 1:20

StartYearData = 2008;
EndYearData = 2017;

for Year = StartYearData:EndYearData
    for PartOfYear = 1:2

        if PartOfYear == 1
            StartDayData = 1;
            StartMonthData = 1;
            EndDayData = 30;
            EndMonthData = 6;

        elseif PartOfYear == 2
            StartDayData = 1;
            StartMonthData = 7;
            EndDayData = 31;
            EndMonthData = 12;

            % THIS IS THE WAY I USE TO TRY AND FIX MY PROBLEM
            % BUT I BELIEVE IT IS WRONG OR AT LEAST INEFFICIENT:
            if Year == 2017
                PartOfYear = 1; StartDayData = 1; StartMonthData = 1;
                EndDayData = 30; EndMonthData = 6;
            end
        end 

% DO A LOT OF THINGS

end

标签: matlabperformanceloopsfor-loop

解决方案


您不能更改循环内的循环变量。看起来您只是对循环和if语句的顺序感到困惑。

有很多方法可以实现您所要求的。这段代码应该做你想做的事,并且只在以下情况下使用PartOfYear = 1(not =1:2) Year = 2017

for index = 1:20    
    StartYearData = 2008;
    EndYearData = 2017;    
    for Year = StartYearData:EndYearData 
        % If the year is 2017, we only want to use PartOfYear=1, otherwise 1:2
        if Year == 2017
            parts = 1;
        else
            parts = 1:2;
        end
        % Now we can loop over the 'parts', which is either 1 or 1:2
        for PartOfYear = parts 
            StartDayData = 1;   % This is the same regardless of PartOfYear value 
            if PartOfYear == 1
                StartMonthData = 1;
                EndDayData = 30;
                EndMonthData = 6;    
            elseif PartOfYear == 2
                StartMonthData = 7;
                EndDayData = 31;
                EndMonthData = 12;    
            end     
            % Stuff...
        end
    end
end

推荐阅读