不确定我在这里做错了什么;
我正在尝试使用以下函数的条件语句进行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
答案 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代码的一个很好的入门。