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