Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 为什么一个';如果';布局工作和其他不是当他们只是简单地颠倒?_Matlab_If Statement_Vector_Matrix_Append - Fatal编程技术网

Matlab 为什么一个';如果';布局工作和其他不是当他们只是简单地颠倒?

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

以下函数有两个矢量输入。它将向量2追加到1下方以形成矩阵,如果向量长度不等,则在最短向量上加0。我已经把不起作用的表单注释掉了,起作用的表单被保留了。为什么它只能以这种方式工作

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在我的回答中还可以看到编写函数的更简单方法