【问题标题】:Preallocation of array sizes in Modelica mos scriptModelica mos 脚本中数组大小的预分配
【发布时间】:2020-01-27 14:03:20
【问题描述】:

我正在 Dymola 中编写一个 mos 脚本,我在其中动态计算 for 循环内的数组元素。大量信息打印在命令窗口上。每次打印时

Redeclaring variable: Real traj_phie [34, 1002];
Redeclaring variable: Real traj_phie [35, 1002];

等等。我不想每次都“redeclare”我的数组,我只想“fill”它。数组大小的预分配会解决这个问题吗?如果是这样,如何在 mos 脚本中预分配数组?我尝试了不同的方法,比如

Real[50,1002] traj_phie;

Dymola 会引发错误。所以我的问题是 1) mos 脚本中的数组预分配 2) 抑制命令输出。 有人能帮我吗? 谢谢

【问题讨论】:

    标签: arrays modelica dymola openmodelica pre-allocation


    【解决方案1】:

    有一个高级标志,可以让你抑制命令输出:

    Advanced.EchoScriptCommands = false
    

    要初始化具有特定大小的向量、矩阵或数组,请使用 fill() 函数。 Modelica中没有像NaN这样的东西,所以你必须用一定的值来初始化。

    然后你可以使用切片操作来分配感兴趣的行/行/元素。

    traj_phie = fill(0.0, 50, 10);
    
    // Assign line by-line
    for i in 1:50 loop
      traj_phie[i, :] = i*ones(10);
    end for;
    

    【讨论】:

    • 作为一个细微的变化,您可以使用 fill(0.0, 50, 10) 而不是 fill(0, 50, 10) 来确保 traj_phie 被视为一个真正的变量(尽管这无关紧要)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-21
    • 2015-08-01
    • 2019-07-24
    • 2011-01-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多