2016-02-13 99 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