Matlab:在for循环中将数组存储在矩阵中

时间:2016-07-11 16:38:26

标签: arrays matlab loops matrix

我正在运行一个for循环,它输出一个名为AFdata的(100x2)数组。对于每次循环迭代,我想在AFdata中保存AFmat。但是我无法为列解算算法,因此每次迭代的每AFdata个填充AFmat中的正确位置。

这是我现在使用的代码:

for i = 1:Nsections
    AFdata = Airfoil.getDatFile(Input.airfoilList{i},airfoilDir);
    if isfield(Input,'TcRatios') && ~isempty(Input.TcRatios)
        AFdata(:,2) = AFdata(:,2)*(Input.TcRatios(i)...
            /Airfoil.calculateThickness(AFdata(:,2)));
    end
end

例如:

第一次迭代给出了AFdata = [1 0; 2 0; 3 0] 第二次迭代给出AFdata = [4 9; 6 9; 8 9]

因此在2次迭代后,AFmat应为[1 0 4 9; 2 0 6 9 ;3 0 8 9]

感谢!!!

2 个答案:

答案 0 :(得分:2)

首先预先分配所需大小的AFmat,然后在每次迭代时填入适当的列,例如

AFmat = zeros(100, 2*Nsections);
for i = 1:Nsections
    % ... calc AFdata
    AFmat(:,[2*i-1,2*i]) = AFdata;
end

答案 1 :(得分:0)

您可以使用cat()功能。将AFmat声明为空白矩阵(如果您不知道确切的维度),然后再连接。

    AFmat=[];
    for i = 1:Nsections
    %calculate AFdata...............
    AFmat=cat(2,AFmat,AFdata);
    end

我听说过这会影响代码性能(不分配矩阵),但MATLAB并没有抱怨。我个人喜欢这个,因为cat()函数中的维度对我来说很容易控制最终的矩阵属性。