Pitambar达亚尔,MathWorks公司
学习如何使用MATLAB在for循环中创建具有底层模式的矩阵®,以及如何使用预分配了相同的过程。
大家好,欢迎回到另一个MATLAB视频。今天,我们将讨论如何在循环中创建一个矩阵。我们将通过回答几个问题来做到这一点。
这是问题1。假设有一个向量。我想从中得到下面的矩阵,就是这个。我该怎么做呢?
如果我们仔细观察这个矩阵,我们可以看到一个模式。每一行的值等于1加上它上面的值。看,第一列是1 2 3 4 5。第二列是3 4 5 6 7,等等,等等。
所以,现在我们发现的模式,问题是,我们如何建立一个循环这个矩阵?那么,第一步将是创建初始向量。我会写一个等于1,3,6,8,9。我不会抑制在这个例子中输出。我会在视频的结尾告诉你为什么。
所以,现在,我们有我们的载体,我们需要考虑在一个循环中创造我们的矩阵。我们知道,我们需要四行附加到当前向量。因此,这意味着我们将需要在循环四次迭代。我会继续和我等于2至5然后在循环中,我会写下面的命令创建一个索引变量:A的我逗号冒号等于我减去1个逗号冒号加1的,然后结束。
因此,让我们走过的声明。我们进入环和i等于2的我一个逗号冒号意味着我们进行索引的所有行我,在这种情况下是2排和第二部分列,等于我减去1逗号结肠加1分意味着我们设定第二行等于1加之前它的行,在这种情况下的行1中的值,然后结束。所以一次迭代之后,A现在是由5矩阵2。
我们回到循环的顶部。而这个时候,我等于3.我们索引所有的第三行中的列,并设置这些值等于1加上面行。其结果将是A是一个3×5的矩阵。我们会通过循环继续迭代,直到我们完成了所有的指标变量了。
现在,让我们看到,当我们打到运行会发生什么。正如我们所看到的,我们得到我们期待的矩阵。而且,由于我们离开解除压缩的语句中,我们可以看到每个迭代为好。
让我们做一个稍微不同的例子。这一次,我们将与此列向量开始。我们要产生以下矩阵。我们如何去这样做呢?
所以第一步是要弄清楚的格局。在这种情况下,每一列的值都是双列前它的值。所以就像之前,让我们来创建初始向量,B。而这个时候,我们要追加三个多列到B.
当我们建立循环时,我们会说,for I = 2:4。下一步是在MATLAB代码中编写模式。所以我写B(冒号,I)等于2乘以B(冒号,I - 1)然后结束。如果我们运行这个,我们会得到我们想要的矩阵。和我们所做的。现在,我只想提一下我提供的解决方案是非唯一的。你可能会想出一些稍微不同但仍然有效的方法。
现在,有些人可能会指出,如果我们预先分配内存,这个过程会更快。你们是对的。预分配是一种优化MATLAB代码的方法,它显式地定义一个正在增长的数组或矩阵的最终大小。它可能不会影响我们当前示例的性能。因为矩阵很小。但是值得注意的是当矩阵变得非常大的时候。
让我们用预分配与第一例子。我们的代码将看起来很相似,之前,有两条线的除外。这第一条线将确定最终的矩阵将有多大。在这种情况下,这是一个5×5。所以,我将创建零是这种规模的占位符矩阵。
我的其余代码几乎是相同的。我把第一个例子复制过来,稍微调整一下。在上面这里,我们必须索引到零矩阵的第一行,然后用这个向量中包含的值覆盖这些值。但就是这样。现在,如果我们点击运行,我们会看到,它并没有增加大小,它只是覆盖了已经存在的行。
让我们回到第一个问题看看我们的矩阵是如何变得越来越大的。为了测试你对这个问题的理解,看看你能否把同样的过程应用到我们做的第二个问题上。不管怎样,谢谢你们收看。下个视频再见。