2016-02-13 81 views
1

我有一个迭代函数,它给了我两个矢量输出。如何将这些输出存储到Matlab中的两个单独的矩阵中?迭代函数输出到矩阵

[A, B]=iterative_function(x,y) 

A和B的大小不变,它们是1x4。

有没有办法做到这一点没有“细胞”?

回答

2

如果我理解正确,您想要连接在每次迭代时输出的所有AB。如果它们的大小从未改变,则不需要使用单元阵列,则可以使用常规矩阵。
您的AB是行向量,所以假设您想要将每个结果连接为单行。

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_totalB_total并指定每个ABi个行:

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的矢量。假设AB不是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列和所有行)。

最后,这两种方法的工作原理是因为AB具有相同的大小,它永远不会改变。尽管如果出于任何原因,这样的尺寸会变得不同,但Matlab不会允许您连接这些向量,而您唯一的机会依赖于单元阵列。正如您所期望的那样,矩阵只能在所有矢量具有相同大小的情况下创建(即,不能连接长度为4的数组和长度为5的数组)。相反,单元阵列是一种异构数据结构,因此每个单元可以包含任何你喜欢的数据。

+0

因为他似乎并不熟悉连接矩阵,所以您可以添加到答案中,您可以对列向量执行相同的操作,但必须忽略';'或用','替换它。 – Max

+0

好点@Max。答案已更新。 – Alessiox