有谁能告诉我如何手动解决这个问题?
考虑以下MATLAB函数:
function Anew = mystery( A )
N=5;
for ii=2:N
Anew(ii)= A(ii-1);
end
end
如果我们定义v = [0,1,2,3,4,5,6,7,8,9,10]
。 x = mystery(v)
的输出是什么?
x = [1 2 3 4 5 6 7 8 9 10]
x = [1 2 3 4 5 6]
x = [0 1 2 3 4 5]
x = [0 0 1 2 3]
答案 0 :(得分:2)
好的,让我们逐行浏览此代码。
第一行:
N = 5;
这基本上创建了一个名为N
的变量,并将值5存储在其中。没什么大不了的。
下一行:
for ii = 2 : N
这是一个for
循环,每次循环迭代时,ii
的值将改变1.循环第一次运行ii = 2
,然后下一次它再次开始,ii = 3
最多ii = 5
,然后循环停止。
所以,让我们从ii = 2
开始。循环内的语句相当于:
Anew(2) = A(2-1);
这简化为:
Anew(2) = A(1);
如果查看代码,Anew
从未定义过。当您尝试将值分配给先前未声明的数组中的某个位置时,MATLAB将填充您自动指定为零的位置之前的值。因此,如果您这样做:
Anew(8) = 9; %// For example
Anew
看起来像这样:
Anew =
0 0 0 0 0 0 0 9
第8个位置的值为9,而第8个位置之前的其他位置都为零。因此,通过执行Anew(2) = A(1);
,Anew
的第一个位置为零,而Anew
的第二个位置获得A
的第一个值并将其置于此处。因此,Anew
目前看起来像:
Anew =
0 0
让我们ii = 3
。这意味着在循环中,语句简化为:
Anew(3) = A(3-1);
....这是:
Anew(3) = A(2);
这意味着Anew
的第三个位置会复制A
的第二个元素。请注意,Anew
的原始大小为2.通过执行Anew(3) = A(2);
,MATLAB将自动调整Anew
的大小,然后将A(2)
放入第三个位置Anew
。因此,Anew
看起来像:
Anew =
0 0 1
作为一个小测试,如果我们要做Anew(6) = A(2);
,这就是它的样子:
Anew =
0 0 0 0 0 1
请注意,在此之前我们之前有Anew = [0 0];
。通过执行Anew(6) = A(2);
,Anew
的第3,第4和第5个位置将填充0,第6个位置的值为1,即A(2)
。
你现在可以看到一个模式。 Anew
的每个位置都会将A
的元素向左移动1.因此,对于ii = 4
:
Anew(4) = A(3);
现在的样子是:
Anew =
0 0 1 2
最后,对于ii = 5
,我们得到:
Anew(5) = A(4);
现在的样子是:
Anew =
0 0 1 2 3
在此循环结束后,Anew
将作为mystery
的输出返回。
因此,答案是(d):x = [0 0 1 2 3];
。
希望这有帮助!