为什么一个'if'布局有效,而另一个在简单地颠倒时不起作用?



以下函数有两个向量输入。它将向量 2 附加到 1 下方以制作矩阵,如果向量长度不相等,则在最短处加零。我已经注释掉了不起作用的表单,保留了有效的表单。为什么它只能以这种方式工作?

function mmat = makemat(vector1,vector2)
diffv = length(vector1)-length(vector2);
% if sign(diffv) 
%     addi = zeros(1,diffv);
%     vector2 = [vector2 addi];
% elseif sign(diffv)== -1
%     addi = zeros(1,abs(diffv));
%     vector1 = [vector1 addi];
if sign(diffv) == -1
    addi = zeros(1,abs(diffv));
    vector1 = [vector1 addi];
elseif sign(diffv)
    addi = zeros(1,diffv);
    vector2 = [vector2 addi];
else
end
mmat = [vector1;vector2];
end

那是因为if xx任何非零实数,计算结果为true。所以if -1if 1一样.当diffv为负数时,if sign(diffv)给出true,并且addi被错误地计算为addi = zeros(1,diffv) diffv为负数。这给出了一个空addi,这是错误的。

在代码的另一部分不会发生错误,因为首先正确排除了负情况(if sign(diffv) == -1)。即使最后elseif sign(diffv)应该是 elseif sign(diffv)==1 ,在这种情况下,它按预期工作,因为此时变量diffv只能是正数。

所以:将代码中的所有if/elseif条件更改为:sign(diffv)==1sign(diffv)==-1


作为旁注,您可以更轻松地定义函数,如下所示:

function mmat = makemat(vector1, vector2)
mmat = vector1;
mmat(2,1:length(vector2)) = vector2;

这是有效的,因为 Matlab 会自动填充零。在最后一行中,如果vector2较短,则无法:第二个索引。

相关内容

最新更新