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

Posted

技术标签:

【中文标题】MATLAB 无法加载 Dymola 创建的 MAT 文件【英文标题】:MATLAB is unable to load MAT-file created by Dymola 【发布时间】:2014-07-21 15:39:25 【问题描述】:

我的问题是打开一些由 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 文件会有帮助吗?你试过吗? 【参考方案1】:

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 个小问题。所以我可以模拟一个问题。获取一个可以在Matlab中使用的*.mat文件,并使用最终值来初始化下一部分。 还有其他解决方案吗?对我来说,将问题分成 12 个较小的问题并不是一个很好的选择。顺便说一句,我曾经设法加载一个五个月的文件,每 10 分钟运行一次(大约 21600 步),但仅此而已。我目前正在为全年数据管理的一个解决方案是使用 dymola 加载结果,并将我需要的变量仅导出到更轻的 .mat 中,Matlab 可以加载。【参考方案2】:

通过在模型中使用所谓的变量选择,您可以将模拟结果文件减小到更易于管理的大小。更多腾讯版本的 Dymola 支持。

【讨论】:

我怎么能意识到这一点?有详细的说明吗?【参考方案3】:

根据我们的经验,当在 Matlab 中打开 Dymola 导致失败时,Octave 可以做得很好。 因此,如果您不喜欢 Octave 中的整体工作流程,您可以简单地使用它来读取数据并将其转换为更常规的 mat 文件,然后在 Matlab 中打开它。

【讨论】:

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

以上是关于MATLAB 无法加载 Dymola 创建的 MAT 文件的主要内容,如果未能解决你的问题,请参考以下文章

将MongoDB数据库连接到MATLAB时出错(无法加载消息目录'mongodb:mongodb')

matlab deploytool 生成的独立应用程序/使用 OPC 编译在主机系统中失败

如何诊断为啥在 MATLAB 中执行 .mex 文件时无法加载 .so 文件?

优化算法蜉蝣优化算法(MA)含Matlab源码 457期

MATLAB编程与应用系列-第2章 数组及矩阵的创建及操作

在 Matlab 中从磁盘加载保存的对象很慢