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 编译在主机系统中失败