有人可以帮我解决这个问题吗? Matlab简单地拒绝考虑if语句中的for o=k:k-20
语句。
if d(k)<=-1.5 || d(k) >=1.5
k
tab=tab+1
6
%table_results(k,:)=[5, d(k), E(k,1), b(k,1), F(k,1)];
for o=k:k-20
5
if abs(d(o))<abs(d(o-1))
bench_value=o;
break;
end
end
.
.
.
.
end
答案 0 :(得分:5)
试试这个:
for o=k:-1:k-20
当你写for variable=1:5
时(例如),Matlab会将1:5
扩展为[1 2 3 4 5]
并将每个值传递给for
。由于您的范围从k
到k-20
,:
运算符会返回一个空数组,因为它会将值从第一个值递增到最后一个值。为了减少它,你应该在中间传递-1
。例如,5:-1:1
将扩展为[5 4 3 2 1]
。
答案 1 :(得分:2)
表达式for o=k:k-20
可以重写为while
循环:
o = k;
while (o < k-20)
% Do something
o = o+1;
end
从这里开始,它应该更清楚一点,你永远不会进入循环,因为当你开始时,o
已经大于k-20
。
如果您希望o
从k
转到k-20
向后,则应将其写为:for o=k:-1:k-20
,其中{ {1}}意味着它应该减少 -1
。
答案 2 :(得分:0)
for o=k:k-20
这个语句会给“o”一个空向量,因为MATLAB默认假设o = k:1:k-20,其中:1:中间是增量跳转,减少你必须加-1而不是这个1因此MATLAB将知道你想在for循环中递减