为什么我在if语句中得到未定义的变量?

时间:2017-10-30 13:56:20

标签: matlab if-statement undefined

我在if语句中遇到未定义函数或变量的错误(最后一行之前的最后一行),当我已经指定了等号时。

l_min = nan(372,1);
A = randn(372,3);
B= randn(372,3);
for t=1:372
    min_ct = min( A(t,:));
      if min_ct == A(t,1);
        l = B(t,1);
        if min_ct == A(t,2);
            l = B(t,2);
        elseif min_ct == A(t,3);
            l = B(t,3);
        end
    end
    l_min(t) = l;
end

有人可以帮忙解决这个问题吗?

2 个答案:

答案 0 :(得分:1)

您的if逻辑存在缺陷,应该是

min_ct = min(A(t,:));
if min_ct == A(t,1);
    l = B(t,1);
elseif min_ct == A(t,2); % <-- Note thise is an *else*if
    l = B(t,2);
elseif min_ct == A(t,3);
    l = B(t,3);
end

你的奇怪的半缩进可能会混淆你的逻辑流程。

注意:在双打上使用==也很容易给你unexpected results,所以你应该考虑使用更好的方法。特别是,min函数的第二个输出被设计为完全符合您的要求!

使用以下内容替换if阶梯:

for t=1:372
    [~, min_idx] = min(A(t,:));
    l_min(t) = B(t, min_idx);
end

答案 1 :(得分:0)

即使没有使用矢量化的for循环,您也可以完成任务。

这是通过使用min函数的索引输出并指定您希望确定最小值的方向来完成的。只需将for循环中的所有内容替换为:

[~, ind] = min(A,[],2); % Determine minimum locations
bindex = sub2ind(size(B),1:size(B,1),ind') % Convert the subscripts to indices 
l_min = B(bindex)';