【问题标题】:iterating over multiple intervals Matlab迭代多个区间 Matlab
【发布时间】:2012-07-20 12:16:12
【问题描述】:

我想在 Matlab 中创建一个循环,它只能在用户指定的时间间隔内工作,而不是整个时间。这个循环条件怎么写?

问候

【问题讨论】:

  • 时间是什么意思?运行循环所花费的实际时间,或者您正在循环的数组的索引?
  • 我的意思是我为迭代 1 - 200 运行循环,并且我想创建一个条件,即迭代将在 30 - 50 和 100 - 120 的间隔内完成。所以我'想在剩余的时间间隔内中断循环的执行,但不能完全中止。这可能吗?
  • 这与下面@High Performance Mark 的回答有何不同?
  • 对不起,我描述的不完全正确。它的不同之处在于,在下面的答案中,我给出了某些已知的间隔,而我想通过检查放置在结构单元格内的值的条件来获得这些间隔。所以我想我需要'if'语句。那怎样才能写得流畅呢?
  • 喜欢我下面的回答吗?顺利是什么意思?

标签: matlab loops iteration intervals


【解决方案1】:

通常您会以多种方式进行迭代。我能想到的主要方法有两种。我还将为社区 wiki 打开它,以便其他人也可以轻松地编辑它。


首先,使用简单的For 循环。

一般语法是for index = 1:someValue

someValue 在这种情况下实际上可以是大于1 的任何值。很多时候,它只是您要遍历的矩阵的最后一个索引值。

你也可以修改它!假设您希望每个第三个索引都从矩阵中的第二个位置开始。您所要做的就是:for index = 2:3:someValue 这里的 3 告诉循环它应该在每次循环迭代结束时将 3 添加到 index 直到达到(或超过)someValue

另一个修改是向后遍历。在这种情况下,您从“结束”开始并移动到开头。它看起来像这样:for index = someValue:-1:1 你也可以在倒退for index = someValue:-4:1 的同时执行每 4 个索引。

显然,您可以将两个 : 之间的值替换为您想要的步长。您只需要注意可能出现的潜在索引问题。即尝试索引超出矩阵范围或可能变为负数。


其次,您可以在循环本身中修改值。通常,当您使用 for 循环时,这不是最好的主意,因为您的索引变量的值将由循环以及您在循环中更改。很多时候,您会看到使用 while 循环或 do while 组合完成此操作。

几个例子如下:

index = 0;
do
{
% some operations
index = index + aNumber;
}while(index <= someValue)

在上面的示例中,循环将继续循环,直到在循环的当前迭代结束时索引值index 大于或等于someValue。这种类型的循环将始终执行,我重复执行至少一次。

index = 0;
while(index <= someValue)
{
%some operations
index = index + aNumber;
}

在这种情况下,循环将继续循环,而index 满足此处的逻辑语句。如果第一次尝试运行循环时语句不正确,则根本不会执行。


希望这会有所帮助,如果需要,请随时要求任何其他说明!

其他人,请随时编辑以添加其他信息或清理我可能没有完全解释的内容 =)

【讨论】:

    【解决方案2】:

    你的意思是这样的:

    for i = [1:5 7:10 12:14 21:22]
       do_func(i)
    end
    

    甚至

    for i = [1:5 4:7 19:-1:15]
       do_func(i)
    end
    

    ?

    【讨论】:

      【解决方案3】:

      如果你只想在循环中某个条件为真时执行一个动作,你只需要这样的东西:

      for i=1:length(arr)
          if condition(arr(i))
              do_something(arr(i));
          end
      end
      

      【讨论】:

      • 谢谢,问题解决了!我朝这个方向发展并创建了双 for 循环。首先到指定的上限,内部的从上限迭代直到下限递减。
      猜你喜欢
      • 2017-01-01
      • 1970-01-01
      • 2023-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多