MATLAB 无法加载由 Dymola 创建的 MAT 文件

6

我的问题是打开由Dymola生成的一些MAT文件。对于一些小模型,MATLAB没有问题打开创建的MAT文件。然后我可以在工作空间中看到结构。 但是我也有一个包含31,536,000个数据点的巨大仿真模型。对于这个模型,MATLAB无法打开它。我总是得到提示:

Error using load
Unable to read MAT-file C:\Users\Patrick\Desktop\DymolaWork\GridHH_SLP.mat

File may be corrupt.

我的MATLAB版本是R2014a 64位,我的Dymola版本是2014 FD001 64位。

我还尝试使用MathWorks首页提供的工具来解决变量名损坏的问题(loadfixnames/savebadnames)。但是这个工具不能正确地恢复矩阵data_2。请问有人能给我建议解决这个问题吗?


你使用.SDF文件代替.mat文件会有帮助吗?你试过了吗? - Jack
3个回答

3
对于Matlab4格式,不应该存在问题。矩阵的行数和列数存储为2个32位无符号整数,这应该可以创建一个大小为8*(2^32-1) *(2^32-1)的双精度矩阵。这只是读取格式的实现问题。
给定数据点的数量,如果模型有超过约136个变量,则data_2矩阵的总大小大于4GB(如果GridHH_SLP.mat文件大小足够大,您可能已经发现了这一点)。如果是这种情况,可能Matlab没有编程处理这种大小的矩阵。我在Octave中尝试了一个39GB的data_2矩阵,它只会显示:error: out of memory or dimension too large for Octave's index type。我可以在OpenModelica中打开相同的文件(但默认情况下它们不保存为转置格式,因此对于绘制这样的大文件效率低下)。
如果Dymola能够输出较少数量的变量,则该文件在Matlab中可能正常工作。您还可以尝试使用Dymola附带的alist程序,将选择的变量以mat文件的形式输出到csv格式(如果alist能够处理大文件)。

我将问题分成了12个较小的问题来解决。这样我就可以模拟一个问题。获得一个*.mat文件,可以在Matlab中使用最终值来初始化下一部分。 - Patrick
有没有其他解决方法?对我来说,把问题分成12个小问题并不是一个很好的选择。顺便说一句,我曾经成功地加载了一个持续五个月的文件,每10分钟运行一次(大约21600步),但不能超过这个范围。我目前正在使用的整年数据的解决方案是使用dymola加载结果,并将我需要的变量导出到一个更轻的.mat文件中,然后Matlab可以加载它。 - Daniel Pereira

0
根据我们的经验,当打开Dymola时Matlab崩溃,而Octave可以很好地处理它。因此,如果您不喜欢Octave中的整体工作流程,您可以简单地使用它来读取和转换数据为更常规的mat文件,然后在Matlab中打开。

Dymola生成的mat文件和MatLab生成的mat文件有什么区别? - Jack

0

通过在模型中使用所谓的变量选择,您可以将仿真结果文件减小到更易管理的大小。这在较新版本的Dymola中得到支持。


我该如何实现它?有没有详细的说明? - Jack

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接