2017-09-25 65 views
0

我有一个循环,为每次迭代输出变量A作为mx1 matrix (where: m>1)。在整个循环结束时,A将最终成为mxn matrix。虽然输出是作为mxn矩阵返回的,但它会一直覆盖结果。我已经尝试了很多东西(包括那些为我以前的代码工作过的东西),但没有一个可以工作。不过,我觉得下面的代码应该可以工作,但我不确定错误来自哪里。我如何从循环保存我的输出数组?

x_A = NaN(28, 3); % 28=length of A and 3=length of kk 
Z = [1,2,4,7]; 

for kk = 1: numel(Z) 
    [A,B,C] = fsave_output(Z, kk) 
    x_A  = [x_A(:,kk) A(:,kk)]; 

    % repeat the line above for B and C 

end 

当运行此,我得到的错误消息:“试图访问x_A(:,3);索引超出范围,因为大小(x_norm)= [28,2]。”。但是,x_A(:,1)和X_A(:,2)中的输出是正确的,只有x_A(:,3)不显示。

任何想法/建议/帮助我应该在这里做什么?提前谢谢了!。

+0

你肯定A是大小相同的在每个循环迭代?并像'x_A = [x_A; [A]];'减慢代码,使用预分配。 – Gryphon

+0

感谢@Gryphon的回复。就像我说的,我在书中尝试了很多技巧。另外,对于你的问题的第一部分, 'A'肯定每次迭代都有相同的大小。 – User110

+0

在更新后的代码中,每次循环迭代调整x_A数组的大小,因此在kk = 3时会出现错误,因为此时x_A是28x2 – Gryphon

回答

0

如果知道矩阵循环之前存储的大小,尽量

Z = [1,2,4,7]; 
store_A = zeros(numel(Z), m); %m is known length 
store_B = zeros(numel(Z), m); %if not known, unroll first iteration of loop 
store_С = zeros(numel(Z), m); %or store it in a cell and concatenate after the loop 

for kk = 1: numel(Z) 
    [store_A(kk,:),store_B(kk,:),store_C(kk,:)] = fsave_output(Z, kk) 
end 
+0

非常感谢你@Gryphon。这会在函数“fsave_output”中引发一个错误。不过,我尝试了一些似乎更接近预期结果的东西。请参阅编辑的问题。 – User110