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

dea*_*r10 1 modelica openmodelica

我正在使用 Open Modelica。

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

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

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

我的问题是 OpenModelica 翻译器在面对大尺寸的常量数组时似乎会停止,并消耗大量内存。例如,跟随模型翻译缓慢。如果数组的大小增加,翻译时间和内存消耗似乎呈指数增长。

model test
constant Real[10000,5] test_array;

end test;
Run Code Online (Sandbox Code Playgroud)

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

tbe*_*beu 5

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