Matlab 为什么一个';如果';布局工作和其他不是当他们只是简单地颠倒?
以下函数有两个矢量输入。它将向量2追加到1下方以形成矩阵,如果向量长度不等,则在最短向量上加0。我已经把不起作用的表单注释掉了,起作用的表单被保留了。为什么它只能以这种方式工作Matlab 为什么一个';如果';布局工作和其他不是当他们只是简单地颠倒?,matlab,if-statement,vector,matrix,append,Matlab,If Statement,Vector,Matrix,Append,以下函数有两个矢量输入。它将向量2追加到1下方以形成矩阵,如果向量长度不等,则在最短向量上加0。我已经把不起作用的表单注释掉了,起作用的表单被保留了。为什么它只能以这种方式工作 function mmat = makemat(vector1,vector2) diffv = length(vector1)-length(vector2); % if sign(diffv) % addi = zeros(1,diffv); % vector2 = [vector2 add
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带有x
任何非零实数,则计算结果为true
。因此,if-1
与if-1
相同。当diffv
为负时,if sign(diffv)
给出true
,并且addi
被错误地计算为addi=0(1,diffv)
,其中diffv
为负。这会给出一个空的addi
,这是错误的
在代码的另一部分中,不会发生错误,因为首先正确排除了否定的大小写(if sign(diffv)=-1
)。即使最后一个elseif符号(diffv)
应该是elseif符号(diffv)=1,在这种情况下,它仍能按预期工作,因为此时变量diffv
只能为正
因此:将代码中的所有if
/elseif
条件更改为:符号(diffv)==1
或符号(diffv)=-1
作为旁注,您可以更轻松地定义函数,如下所示:
function mmat = makemat(vector1, vector2)
mmat = vector1;
mmat(2,1:length(vector2)) = vector2;
这是因为Matlab自动用零填充。在最后一行中,第二个索引不能是:
,因为矢量2
较短。在这里似乎有效。你发现了什么问题?举一个例子,用具体的vectorsOkay对另一半进行注释;输入makemat(2:7,1:4)可以正常工作,但输入makemat(1:4,2:7)返回错误:使用连接矩阵的vertcat维度的错误不一致。makemat中的错误(第22行)mmat=[vector1;vector2]@user2839806如果您知道结果,则不需要使用=
:任何非零实数(即使是负数)都将表现为1。所以if 1
和if-1
是相同的(并且两者都与if 0
相反),我现在明白了你的意思,在不正确的版本中,diffv是否为-/+1,第一个“if”部分将执行,因此在“-”的情况下,我将零中的列指定为负数@user2839806在我的回答中还可以看到编写函数的更简单方法