2012-07-20 205 views
0

我想在Matlab中做一个循环,只能在用户指定的时间间隔内工作,而不是简单的整个时间。怎么能写这个循环条件?遍历多个区间Matlab

问候

+0

你是什么意思的时间?实际运行循环所用的时间,或者您正在循环的数组的索引? – Isaac 2012-07-20 12:23:30

+0

我的意思是我运行循环迭代1 - 200, ,我想创建一个条件,迭代将完成间隔例如30 - 50,然后100 - 120.所以我想打破执行的剩余时间间隔的循环,但不能完全中止。那可能吗? – beginh 2012-07-24 13:03:12

+0

与@High Performance Mark的答案有何不同? – Isaac 2012-07-24 13:09:21

回答

1

通常你和迭代多种方式。有两种主要的方法可以从我的头脑中思考。我也会为社区维基开放它,以便其他人也可以轻松地编辑它。


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

一般语法for index = 1:someValue

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

虽然你可以修改这个!假设您希望每个第三个索引从矩阵中的第二个位置开始。所有你需要做的是: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满足逻辑语句这里。如果当您尝试首次运行循环时语句不成立,它将根本不会执行。


希望这可以帮助,并随时要求任何额外的澄清,如果你想要它!

其他人,请随时编辑添加其他信息,或收拾东西,我可能还没有完全解释=)

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 

0

如果您仅希望在一定条件下在一个循环是真正要执行的操作,你只需要像这样:

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

谢谢,解决问题!我去了这个方向,并创建了双循环。一直到指定的上限,内层从上限迭代直到下限递减。 – beginh 2012-07-26 16:37:26