【发布时间】:2012-01-18 09:59:43
【问题描述】:
我有一个用 C 语言编写的 for 循环:
for (int i = 0; i < 1000; i+=25)
如何将其转换为 MATLAB?
【问题讨论】:
我有一个用 C 语言编写的 for 循环:
for (int i = 0; i < 1000; i+=25)
如何将其转换为 MATLAB?
【问题讨论】:
MATLAB for loop syntax 是
for i = values
program statements
:
end
values 是其中之一
start:endstart:step:end,或start:end 形式假定步长为 1,而您希望步长(或增量)为 25,因此请使用第二种形式。根据您的问题,for(int i = 0; i < 1000; i+=25) 生成了一个数字列表0 25 50 ... 950 975,即它不包括1000(注意for 循环中的i < 1000;),所以我们不能使用end=1000 in out MATLAB 语法。而是使用end = 1000-25 = 975:
for i = 0:25:975
program statements
:
end
将产生与 C 等效项相同的 i 值。
注意:请参阅我对 Mithun Sasidharan 的回答的评论。他的答案为 C 和 MATLAB for 循环产生了不同的数字(他似乎已经从他的 MATLAB 答案中删除了for)。他的回答为 C 循环提供了0 25 50 ... 950 975,为他的 MATLAB 代码提供了0 25 50 ... 950 975 1000。
编辑:Aashish Thite 的回答提出了一个关于 for 循环和数组索引的重要观点,这在 C 和 MATLAB 之间是不同的。
【讨论】:
for 循环
for (int i = 0; i <= 1000; i+=25)
可以通过这种方式转换为MATLAB for循环:
>> for i = [0:25:1000]
# Code
end
【讨论】:
for i,而不仅仅是i。而且您不需要在冒号表达式周围加上[]。
for(int i = 0; i < 1000; i+=25) 产生数字0 25 50 ... 950 975,而i = 0:25:1000 产生0 25 50 ... 950 975 1000。如果 i < 1000; 被替换为 i <= 1000; 或者如果 i = 0:25:975 被使用,那么输出将匹配。
i=[0:25:1000] 实际上与i=0:25:1000 的含义不同——在第一种情况下,您实际上是在预分配内存来存储向量0:25:1000。这对于这个循环可能无关紧要,但与 i=1:inf 和 i=[1:inf] 相比。
如果您打算使用 'i' 作为索引来扫描数组,for i=0:25:1000 将不起作用。 matlab数组中第一个元素的索引是1。所以使用for i=1:25:1000
【讨论】: