如何在 JModelica 中读取 .mat 输出文件?
Posted
技术标签:
【中文标题】如何在 JModelica 中读取 .mat 输出文件?【英文标题】:How to read .mat output files in JModelica? 【发布时间】:2020-04-02 19:25:09 【问题描述】:为了节省时间,我正在尝试读取.mat
文件,而不是再次模拟模型。
我使用了scipy.io.loadmat
,但效果不佳:
res = loadmat('ChatteringControl_result.mat')
res.keys()
['Aclass', 'dataInfo', 'name', 'data_2', 'data_1', 'description']
键不是变量名,不知道如何获取变量值。
然后我搜索分辨率,发现DyMat,对其他变量效果很好但是不能得到time
。
res1 = DyMat.DyMatFile('ChatteringControl_result.mat')
T = res1['T']
t = res1['time']
KeyError: 'time'
那么,如何才能在JModelica中得到所有的结果呢?(当然不用打开Matlab。)比如,JModelica中的一个内置函数?
非常感谢!
【问题讨论】:
不知道,这些.mat文件是标准mat文件吗?我认为打开 OpenModelica 生成的 mat 文件时也遇到了类似的问题,使用 scipy.loadmat。 啊,是的,来自 DyMat 的描述:“常规 mat 文件,但使用特殊的变量结构来有效地存储数据。”可以使用更详细的描述 - 也许数据隐藏在您找到的条目之一中? @Christoph 我认为它们被称为 level-4 mat-files,似乎很多包只支持 level-5 mat-files。 ..(例如,mat4py) @Christoph 我打印出所有的键,但找不到'time'
。(悲伤
这对我有用:github.com/thorade/jupyterNotebooks/blob/master/dymat/…
【参考方案1】:
要使用 JModelica 加载 mat 文件,您可以使用以下代码:
from pyfmi.common.io import ResultDymolaBinary
res = ResultDymolaBinary("MyResult.mat")
var = res.get_variable_data("myVar")
var.t #Time trajectory
var.x #Variable trajectory
【讨论】:
谢谢,这正是我所期待的!【参考方案2】:https://openmodelica.org/doc/OpenModelicaUsersGuide/latest/technical_details.html#the-matv4-result-file-format 描述格式。我认为您还可以查看 Dymola 手册了解更多详细信息。
对于 DyMat,没有理由获取时间轨迹,因为您通常会查找变量在特定时间的值。据我所知,开始和停止时间在 data_1 矩阵中(或者通常从 data_2 矩阵中的第一个轨迹中获取)。 (data_2 矩阵可能会被插值,因此存储在其中的时间值可能无法反映求解器内部采取的实际步骤)
【讨论】:
以上是关于如何在 JModelica 中读取 .mat 输出文件?的主要内容,如果未能解决你的问题,请参考以下文章