2

为了节省时间,我试图读取.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 中的内置函数?

非常感谢!

4

2 回答 2

3

https://openmodelica.org/doc/OpenModelicaUsersGuide/latest/technical_details.html#the-matv4-result-file-format描述了格式。我认为您还可以查看 Dymola 手册以获取更多详细信息。

至于 DyMat,没有理由获取时间轨迹,因为您通常会查找变量在特定时间的值。据我所知,开始和停止时间在 data_1 矩阵中(或者通常从 data_2 矩阵中的第一个轨迹中获取)。(data_2 矩阵可能是插值的,因此存储在其中的时间值可能无法反映求解器内部采取的实际步骤)

于 2019-12-10T07:15:42.407 回答
3

要使用 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
于 2019-12-10T09:29:25.710 回答