【问题标题】:multichoice Matlab for loops [closed]用于循环的多选 Matlab [关闭]
【发布时间】:2015-01-11 11:20:12
【问题描述】:

谁能告诉我如何手动解决这个问题?

考虑以下 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) 的输出是什么?

  • a) x = [1 2 3 4 5 6 7 8 9 10]
  • b) x = [1 2 3 4 5 6]
  • c)x = [0 1 2 3 4 5]
  • d) x = [0 0 1 2 3]

【问题讨论】:

  • 自己做作业!
  • 它不是作业,它的修订表我在测试前做......
  • 您为什么不尝试自己逐个输入代码并查看结果是什么样子的呢?....但是如果您真的必须知道,这段代码基本上会返回一个包含 5 个元素的数组其中第一个元素始终为零,而其他四个元素是 A 数组的前四个元素。
  • 我试过做 0(2-1)=0 1(3-1)=2 2(4-1)=3 3(5-1)=12 但这显然不是答案
  • 看我知道答案是D,我只想知道过程是什么

标签: matlab for-loop


【解决方案1】:

好的,让我们逐行浏览这段代码。


第一行:

N = 5;

这基本上创建了一个名为N 的变量并将值 5 存储在其中。没什么大不了的。

下一行:

for ii = 2 : N

这是一个for循环,每次循环迭代,ii的值都会改变1。循环第一次运行,ii = 2,然后下一次再次开始,@987654327 @ 直到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];


希望这会有所帮助!

【讨论】:

  • @user3517701 - 我的荣幸。如果您愿意,请考虑接受我的回答,以表明您不再需要帮助。单击我的帖子顶部左侧的向上和向下箭头下方的复选标记图标。
猜你喜欢
  • 2013-06-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-06
相关资源
最近更新 更多