以下函数有两个向量输入。它将向量 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 x
,x
任何非零实数,计算结果为true
。所以if -1
和if 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)==1
或sign(diffv)==-1
作为旁注,您可以更轻松地定义函数,如下所示:
function mmat = makemat(vector1, vector2)
mmat = vector1;
mmat(2,1:length(vector2)) = vector2;
这是有效的,因为 Matlab 会自动填充零。在最后一行中,如果vector2
较短,则无法:
第二个索引。