这条MATLAB代码的含义/输出是什么?

时间:2015-03-20 05:12:40

标签: matlab function for-loop matrix

有人可以逐行向我解释这段代码的含义/意义吗?我是MATLAB /编程的初学者,所以请特别在解释fprintf函数时使用简单的术语。 (我尝试在MATLAB中使用'帮助'功能来理解' fprintf'函数,我仍然不理解它...如果它很简单,预期的输出是多少?

A = zeros(1,3); %pre-allocate space 
k = 1;  %count loop iterations 
valueMatrix = [1 2 3; 5 6 7]; 
for jj = valueMatrix 
fprintf('iteration %d:\n', k)
A(k) = jj(1) + jj(2);
jj, A  %display variables on terminal 
k = k + 1; 
end

1 个答案:

答案 0 :(得分:1)

不确定。让我们分别浏览每行代码。请记住,我回答主要是因为for循环使用矩阵而不是向量,并且没有多少人知道它实际上做了什么。


A = zeros(1,3); %pre-allocate space 

这会创建一个包含三个元素的空向量,并存储在A


k = 1;  %count loop iterations 

我稍后会解释。


valueMatrix = [1 2 3; 5 6 7]; 

声明一个大小为2 x 3的矩阵,如下所示:

1   2   3
5   6   7

for jj = valueMatrix 

这是一个for循环。我假设你知道那是什么。 for循环允许您在for语法内执行一段代码一定次数。你指定一个向量或一个矩阵,循环一次又一次地执行for结构中的代码片段......每次执行时,它都会从向量或矩阵中提取每个值并将其存储到循环中反变量。在这种情况下,该变量为jj。例如,如果我们这样做:

for jj = 1 : 8
    disp(jj);
end

此循环将以jj = 1开头,我们将在控制台中显示此内容。接下来,我们转到jj = 2并在控制台中显示此信息,我们将一直持续到jj = 8然后停止。现在有一个矩阵,这略有不同。它是如何工作的,在每次迭代时,我们一次拉出。例如,如果我们这样做:

for jj = [1 2 3; 4 5 6; 7 8 9]
    disp(jj);
end

我们会显示:

1
4
7

...在第一次迭代中,然后:

2
5
8

...然后最后一次迭代:

3
6
9

因此,如果我们这样做了:

for jj = valueMatrix

...这意味着我们将运行此循环三次次。在第一次迭代中,jj将是:

1
5

下一次迭代:

2
6

最后一次迭代:

3
7

重要的是,在每次迭代时,jj是一个2元素向量。


    fprintf('iteration %d:\n', k)

fprintf代表格式化打印到文件。但是,它被调用的方式打印到屏幕而不是文本文件。这可能看起来不熟悉,因为这与您在C中调用printf的方式基本相同。此函数的第一个参数是您要显示在屏幕上的字符串。您还可以做的是通过在字符串中放入正确的说明符来显示变量的内容。您使用所谓的格式化字符串。在这种情况下,%d指定要打印的整数,\n表示移动到下一行。每个格式字符串都伴随着您要打印的变量。在我们的示例中,%d与变量k配对,因此您希望在每次迭代时打印出变量k。在每次迭代时看起来都是这样的:

iteration 1:
iteration 2:
iteration 3:

    A(k) = jj(1) + jj(2);

您会注意到k从1开始,每次循环迭代时增加1(k = k + 1语句后两行)。因此,在每次迭代时,我们会在A中添加jj中的两个元素来填充 jj, A %display variables on terminal 中的每个条目。


iteration

言自明的。我们将这些变量显示在屏幕上,在 k = k + 1; 打印输出语句之上...有点凌乱的恕我直言。


end

已经谈过这个。每次迭代时的增量。


A

结束循环。


因此,valueMatrix中存储的三元素向量的内容发生了变化,其中每个元素都来自A的列。因此,对于A = [6 8 10]; ,你应该得到:

{{1}}