【问题标题】:Outputting from loop to array in Matlab without overwriting在Matlab中从循环输出到数组而不覆盖
【发布时间】:2014-12-08 04:14:36
【问题描述】:

我有一个脚本来获取 simulink 模型的输出并将此信息放入一个数组中,以便编写每个循环,然后可以绘制/分析等。但是在运行脚本时,我得到以下信息:

test1

Outvs =

68.0000
68.0007
68.0430
68.0746

In an assignment  A(I) = B, the number of elements in B and I must be the same.

Error in test1 (line 19)
output(sensv0) = Outvs;

我的脚本如下:

%Vectors/containers to store values%
%input = zeros(4,4);
output = zeros(4,4);

%INITIAL VELOCITY (v0)
%do a sensitivity analysis for different input values
for sensv0 = 85:88
    %step 1: define input value to variable
    v0 = sensv0;
    %step 2: run simulation
    sim('sldemo_absbrake');
    %step 3: look at graphs at t=0,5,10,15s for Vehicle Speed
    Outvs = getdatasamples(vs, [2,6,11,14]);
    %Display Outvs (troubleshooting)
    Outvs
    %input(sensv0) = v0;
    output(sensv0) = Outvs;
end

【问题讨论】:

  • 您将多个样本放入一个输出字段。如果输出是长度为 4 的行(!)向量(我认为基于您的预分配),您可以尝试 output(sensv0-84,:) = Outvs; 减去 84 是访问索引 1 到 4 所必需的,并且完整的行由结肠。如果这不起作用,只需将Outvs 打印到屏幕上,而不是将其分配给output 的某个子集。然后您可以看到Outvs 的实际外观,并基于此,您可以想办法将其正确存储在output 矩阵的一部分中。
  • 糟糕,我错过了您在问题中包含 Outvs 的形状:它的 4×1。所以,这意味着output(:,sensv0-84) = Outvs; 应该可以工作。我相信你可以自己弄清楚为什么;)

标签: arrays matlab loops overwrite


【解决方案1】:

处理此类事情的两种方法。

  1. 如果outvs的大小是恒定的,可以初始化一个合适大小的变量:

    var=zeros([4,4])
    for k=85:88
        var(k-84, :)=outvs;
    end
    
  2. outvs 的大小不同,请使用元胞数组(带花括号)。

    for k=85:88
        var{k-84}=outvs;
    end
    

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-08
    • 1970-01-01
    • 1970-01-01
    • 2017-08-06
    • 1970-01-01
    • 2016-09-18
    • 2021-04-06
    • 2020-02-14
    相关资源
    最近更新 更多