我想在Matlab中创建一个仅在用户指定的时间间隔内工作的循环,而不仅仅是整个时间。如何写这个循环条件?
问候
答案 0 :(得分: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
答案 1 :(得分:1)
一般来说,您可以通过多种方式进行迭代。我可以通过两种主要方式来思考。我还将为社区维基打开这个,以便其他人也可以轻松编辑它。
首先,使用简单的For
循环。
一般语法为for index = 1:someValue
someValue
实际上可以是大于1
的任何内容。很多时候,它只是您想要遍历的矩阵的最后一个索引值。
你也可以修改它!假设您希望每个第3个索引从矩阵中的第2个位置开始。你所要做的就是:for index = 2:3:someValue
这里的3告诉循环它应该在每次循环迭代结束时向index
添加3,直到你到达(或超过)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 :(得分:0)
如果您只想在循环中某个条件为真时执行某个操作,则只需要:
for i=1:length(arr)
if condition(arr(i))
do_something(arr(i));
end
end