我的问题是打开Dymola生成的som * .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版本是2014a 64bit,而我的Dymola版本是2014 FD001 64bit。 我还尝试使用mathworks主页上提供的工具解决问题,以解决损坏的变量名称(loadfixnames / savebadnames)。但这并不是很好。因为此工具无法恢复矩阵data_2。任何人都可以给我一个解决这个问题的建议。 非常感谢你
答案 0 :(得分: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可以处理大文件)。
答案 1 :(得分:0)
通过在模型中使用所谓的变量选择,可以将模拟结果文件缩小到更易于管理的大小。支持更多腾讯版Dymola。
答案 2 :(得分:0)
根据我们的经验,当在Matlab中打开Dymola结果失败时,Octave可以做得很好。 因此,如果您不喜欢Octave中的整体工作流程,则可以简单地使用它来读取数据并将其转换为更常规的mat文件,然后在Matlab中打开它。