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

Matlab 为什么在if语句中得到未定义的变量?,matlab,if-statement,undefined,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); else

当我已经分配了等式时,在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

有人能帮忙吗?

使用矢量化,即使没有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)';
你的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

如果初始逻辑语句为false,那么在任何地方都不定义l,如果min\u ct==At,1,那么l\u mint=l;无法评估。在将来,如果您提供实际的错误消息,而不是您对它的解释,这将更有帮助,因为它告诉了问题所在的确切路线。不满足其中一个标准是不可能的,因为例如,最小值A1,:,必须等于A1,:!!我想要得到的是t的每次迭代的最小值的位置。例如,如果A1,:=[5 3 2],最小值显然是2,这是第三个元素。我想让代码选取向量B1的第三个元素:将它分配到向量l_min的第一个位置。我想象第二个“如果”实际上是一个“elseif”,其中一个“end”被删除。这显然不是不可能的,因为这就是正在发生的事情。你可以说服自己。如果min_ct~=At,1,就永远不会达到内部标准。我建议您重新评估您的逻辑块。@Danielldrich是正确的:您需要将第二个if更改为elseif。您还可以通过使用min的第二个输出来避免if的链,该输出给出了找到的最小值的索引。
for t=1:372
    [~, min_idx] = min(A(t,:));
    l_min(t) = B(t, min_idx);
end