我有一個迭代函數,它給了我兩個矢量輸出。如何將這些輸出存儲到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