0

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

问候

4

3 回答 3

1

你的意思是这样的:

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

?

于 2012-07-20T12:34:56.830 回答
1

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


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

一般语法是for index = 1:someValue

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

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

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

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


其次,您可以在这里修改循环本身的值。通常,当您使用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满足这里的逻辑语句。如果第一次尝试运行循环时该语句不正确,则它根本不会执行。


希望这会有所帮助,如果您需要,请随时要求任何额外的说明!

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

于 2012-07-20T12:38:54.400 回答
0

如果您只想在循环中某个条件为真时执行操作,则只需要以下内容:

for i=1:length(arr)
    if condition(arr(i))
        do_something(arr(i));
    end
end
于 2012-07-24T13:41:46.213 回答