如何动态存储循环输出?

时间:2017-09-25 17:25:10

标签: arrays matlab

我正在尝试对我的脚本进行敏感度研究。我有三个主要变量(velocity,searchVolume1和searchVolume2),它们将在代码中发生变化。但是,我已经能够编写一个脚本,只允许其中一个变量(searchVolume1)改变,而其他两个变量保持不变。我现在希望脚本允许两个变量(searchvolume1和velocity)改变,之后,我会重新运行,其中整个过程将在第三个变量(searchVolume2)发生变化时重复。只更改了一个变量的地方,有效的脚本是:

searchVolume1 = [0.5, 0.5, 2.4, 3.7, 4.6, 5.1]';
for kk = 1: numel(searchVolume1)

    [xN, xU, xC] = myMfile_sensitivity(searchVolume, kk);

    t1(:,kk)  = xN(:,kk);
    t2(:,kk)  = xU(:,kk);
    t3(:,kk)  = xC(:,kk);    
end

我重新编辑了这个(见下文)以包含第二个变量。虽然我正在考虑创建一种动态存储,但我不确定如何将t1,t2和t3的结果存储为新的更改。

Velocity = [10, 20, 30];
searchVolume1 = [0.5, 0.5, 2.4, 3.7, 4.6, 5.1]';

for tt = 1: numel(velocity)
   for kk = 1: numel(searchVolume1)

     [xN, xU, xC] = myMfile_sensitivity(searchVolume, kk, velocity, tt);

     t1(:,kk)  = xN(:,kk);
     t2(:,kk)  = xU(:,kk);
     t3(:,kk)  = xC(:,kk);    
   end
end

以上暗示我应该对{3} t1, t2, t3中的所有searchVolume1velocities。请,任何想法/帮助/建议表示赞赏。感谢

1 个答案:

答案 0 :(得分:0)

正如Adriaan所说,您希望预先分配输出变量大小以加快速度。我假设xN,xU和xC是常量。我没有将整个数组和索引传递给myMfile_sensitivity,而是将其更改为只需要传递的数字(例如searchVolume1(kk))。

velocity = [10, 20, 30];
searchVolume1 = [0.5, 0.5, 2.4, 3.7, 4.6, 5.1]';
% I just copied searchVolume1 for this example
searchVolume2 = [0.5, 0.5, 2.4, 3.7, 4.6, 5.1]';

t1 = zeros((length(velocity),length(searchVolume1),length(searchVolume2));
t2 = zeros((length(velocity),length(searchVolume1),length(searchVolume2));
t3 = zeros((length(velocity),length(searchVolume1),length(searchVolume2));
for tt = 1: numel(velocity)
   for kk = 1: numel(searchVolume1)
       for jj = 1: numel(searchVolume2)

           [xN, xU, xC] = myMfile_sensitivity(searchVolume1(kk), velocity(tt), searchVolume2(jj));

           t1(tt,kk,jj)  = xN;
           t2(tt,kk,jj)  = xU;
           t3(tt,kk,jj)  = xC;    
       end
   end
end