Modelica - 如何最好地将大型数组从 .CSV 文件或 .MAT 文件移动到外部 C 对象?

标签 modelica openmodelica

我正在使用 Open Modelica。

我有大量 .csv 格式或 .mat 格式的 float (约 4,000,000 个数字)(它们对我来说同样方便)。

我使用 ExternData 包 (.csv) 或使用 Modelica.Utilities.Streams.readRealMatrix (.mat) 将数据加载到 OpenModelica 中。它存储为 Real 类型的常量数组。

我生成了一个 C 函数,可以对此数据集执行一些操作(一些奇怪的插值)。它与保存数据的外部对象相关联,该数据是通过其构造函数和 Modelica 接口(interface)提供给它的。

我的问题是,当面对大尺寸的常量数组时,OpenModelica 转换器似乎会陷入停顿,并消耗大量内存。例如,以下模型翻译速度很慢。如果数组的大小增加,翻译时间和内存消耗似乎呈指数级增加。

model test
constant Real[10000,5] test_array;

end test;

是否有其他方法可以将数据从 .csv 或 .mat 文件移动到外部对象?我认为我的外部 C 代码可以自行导入 .csv 或 .mat 文件,但这远远超出了我几乎不存在的 C 编程能力。还有别的办法吗?

最佳答案

推荐的方法是将如此大的数组数据不在模型内,而是作为外部数据文件。 CombiTimeTable支持在仿真运行时读取文本文件和 MATLAB MAT 文件。您还将受益于更短的翻译时间。

关于Modelica - 如何最好地将大型数组从 .CSV 文件或 .MAT 文件移动到外部 C 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62105701/

相关文章:

modelica - 根据参数除以零

modelica - Modelica 中的抽象开关

modelica - Modelica 转换器能否更轻松地处理循环或矩阵乘法?

fluid - ValveLinear 模型 Modelica 标准库 - 工作原理

modelica - 参数定义部分是否可以有 if block (而不仅仅是语句)?

Modelica 传播/默认变量名

extends - 通过扩展/继承修改 Modelica

在 Modelica 中对特定时间进行积分,并在特定点将平均值写入向量

modelica - 在 Modelica 中动态切换连接

modelica - 为什么 Modelica 中的 "der()"运算符仅适用于时间变量?