我有一个迭代函数,它给了我两个矢量输出。如何将这些输出存储到Matlab中的两个单独的矩阵中?迭代函数输出到矩阵
[A, B]=iterative_function(x,y)
A和B的大小不变,它们是1x4。
有没有办法做到这一点没有“细胞”?
我有一个迭代函数,它给了我两个矢量输出。如何将这些输出存储到Matlab中的两个单独的矩阵中?迭代函数输出到矩阵
[A, B]=iterative_function(x,y)
A和B的大小不变,它们是1x4。
有没有办法做到这一点没有“细胞”?
如果我理解正确,您想要连接在每次迭代时输出的所有A
和B
。如果它们的大小从未改变,则不需要使用单元阵列,则可以使用常规矩阵。
您的A
和B
是行向量,所以假设您想要将每个结果连接为单行。
A_total=[];
B_total=[];
while(your loop is going)
[A, B]=iterative_function(x,y)
A_total=[A_total ; A];
B_total=[B_total ; B];
end
如果你预先知道多少次迭代会被你的循环来完成,你可以和预分配这样的矩阵A_total
和B_total
并指定每个A
和B
到i
个行:
A_total=zeros(MaxIteration,4); %because A has length 4
B_total=zeros(MaxIteration,4); %because B has also length 4
for i=1:MaxIterations
[A, B]=iterative_function(x,y)
A_total(i,:)=A;
B_total(i,:)=B;
end
更新:正如@Max正确指出的那样,我认为值得一提的是,即使您的向量不是行向量,而是列向量,也可以做同样的事情(即连接多个矩阵大小相同的向量)已经构建函数。主要技巧是,现在你不分配1行= 1的矢量,但1列= 1的矢量。假设A
和B
不是1x4,而是4x1。这种级联可以很容易地做到如下(内循环):
A_total=[A_total , A]; % a space without a comma works just as well
B_total=[B_total , B];
或者,再次,如果你知道一个先验的迭代次数就可以以这种方式预分配:
A_total=zeros(4,MaxIteration); %because A has length 4
B_total=zeros(4,MaxIteration); %because B has also length 4
这个时候您将拥有与迭代一样多的列,而在之前的例子中,您有多少个迭代。 而内循环则可以以这种方式取代i列:
A_total(:,i)=A;
B_total(:,i)=B;
那里(我不好我没有解释更早)冒号运算符(:
)表示“所有的这些”(即表达式A_total(:,i)
表示第i列和所有行)。
最后,这两种方法的工作原理是因为A
和B
具有相同的大小,它永远不会改变。尽管如果出于任何原因,这样的尺寸会变得不同,但Matlab不会允许您连接这些向量,而您唯一的机会依赖于单元阵列。正如您所期望的那样,矩阵只能在所有矢量具有相同大小的情况下创建(即,不能连接长度为4的数组和长度为5的数组)。相反,单元阵列是一种异构数据结构,因此每个单元可以包含任何你喜欢的数据。
因为他似乎并不熟悉连接矩阵,所以您可以添加到答案中,您可以对列向量执行相同的操作,但必须忽略';'或用','替换它。 – Max
好点@Max。答案已更新。 – Alessiox