【问题标题】:what is the meaning/output of this piece of MATLAB code?这段 MATLAB 代码的含义/输出是什么?
【发布时间】:2015-03-20 05:12:40
【问题描述】:

有人可以逐行向我解释这段代码的含义/意义吗?我是 MATLAB/编程的初学者,所以请使用简单的术语,特别是在解释 fprintf 函数时。 (我尝试使用 MATLAB 中的 'help' 函数来理解 '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

【问题讨论】:

  • 为什么不运行看看呢?

标签: matlab function for-loop matrix


【解决方案1】:

当然。让我们分别浏览每一行代码。请记住,我之所以回答主要是因为 for 循环使用 ma​​trix 而不是向量,而且没有多少人知道它实际上做了什么。


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];

【讨论】:

    猜你喜欢
    • 2011-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-11
    • 2017-11-21
    相关资源
    最近更新 更多