带有for循环的条件语句

时间:2014-07-09 19:27:45

标签: matlab loops if-statement for-loop conditional

不确定我在这里做错了什么;

我正在尝试使用以下函数的条件语句进行for循环。我想做到这一点h不是一个向量。我这样做1到5,增量为0.1。

Y = f(h) = h^2    if h <= 2 or h >= 3
Y = f(h) = 45     otherwise

我的代码是

for h = 0:0.1:5
if h <= 2;
   Y = h^2;
elseif h >= 3;
Y = h^2;
else;
   h = 45;
end
end

2 个答案:

答案 0 :(得分:3)

这可以更容易,但使用for循环,我认为你可以使用:

h=0:0.1:5;
y=zeros(1,length(h));

for i=1:length(h)
    if or(h(i) <= 2, h(i) >= 3)
       y(i) = h(i)^2;
    else
       y(i) = 45;
    end
end

答案 1 :(得分:2)

为什么要避免让h成为数组? MATLAB专门研究数组操作。实际上,MATLAB中的vectorized operations通常比for循环更快,我发现它在C ++中开始编码时反直觉。

代码的矢量化验证示例可以是:

h = 0:0.1:5;
inds = find(h > 2 & h < 3);  % grab indices where Y = 45
Y = h.^2;  % set all of Y = h^2
Y(inds) = 45;  % set only those entries for h between 2 and 3 to 45

.^2运算符中的句点将该运算符广播到h数组中的每个元素。这意味着您最终会单独调整h中的每个数字。通常,像这样的矢量化操作在MATLAB中更有效,因此最好养成对代码进行矢量化的习惯。

最后,您可以通过不存储索引来减少上述代码:

h = 0:0.1:5;
Y = h.^2;  % set all of Y = h^2
Y(find(h > 2 & h < 3)) = 45;  % set only those entries for h between 2 and 3 to 45

This blog series似乎是对矢量化MATLAB代码的一个很好的入门。