过冷水诚挚邀请你加入Matlab仿真秀官方交流群进行Matlab学习、问题咨询、 Matlab相关资料下载,**:927550334
在dymola中,得到仿真结果后,由于dymola的图形界面不是那么的友好,绘图不够好看,需要将数据导出,用MATLAB绘图,并做数据分析。
导出数据的方法通常有在Variable Browser中选择仿真变量右击选择Export Result,
其会弹出三种选项,All,Only Plot Window,Only Current Diagram。通常是没有必要选择All的,因为input_data这样类型的文件在仿真时,本身就会导出对应的.mat文件.过冷水在实践中也遇到过,由于原始的*.mat文件过大,Matlab中无法处理,需要放入dymola中做瘦身,过冷水最多的时候选择采用将要导出的变量进行绘图,然后使用Only Plot Window绘图将数据导出。
导出文件为input_data_partial.mat。在matlab中将该文件进行读取。读取文件的代码为:
load('input_data_partial.mat')
matlab工作区中的文件即为input_data_partial.mat所包含的文件。过冷水比较困惑的是dynola在生成*.mat文件时的逻辑是什么。为什么是这样的格式。工作区的char文件格式都很奇怪,对于不熟悉matlab和char类型的使用者来说,是有一定难度的。Aclass,description,name的内容分别为:
字符串看起来很奇怪,这是因为字符串的显示有问题,对字符串做转置处理:
Data2是一个数组,观察即可知道是与name对应的数据。
我们为了让data2与name对应,可以创建一个结构体,具体代码为:
>> data_name=name; [m,n]=size(data_name); data_struct=struct('Time',data_2(1,:)); for i=2:m dataname=strrep(strrep(strrep(strrep(data_name(i,:),'.','_'),' ',''),'[','_'),']',''); strname=regexprep(dataname,'\[^\]*\]|(_^\)_*\)',''); datastruct.(strname)=data_2(i,:); end
对应的结构体格式为:
这样我们就实现了将dymola中的数据导入到matlab。过冷水在实践中还发现如果Variable Browser中有四十个变量需要导出为*.mat文件.我们还采用Only Plot Window效率就有点低了,我们可以采用脚本命令实现,具体的脚步命令为:
fileName="C:/Users/wayne/Desktop/input_data.mat"; names={"input_data.y[1]", "input_data.y[2]", "input_data.y[3]", "input_data.y[4]", "input_data.y[5]", "input_data.y[6]"} n=readTrajectorySize(fileName); traj=readTrajectory(fileName,names,n); traj_transposed=transpose(traj); filepath="C:/Users/wayne/Desktop/input_data_partial1.mat"; writeTrajectory(filepath, names, traj_transposed);
在matlab中打开input_data_partial1.mat文件
可以看出用脚本命令生成的*.mat文件内容简单,names也不需要转置,这样过冷水就给出了如何将dymola的simulation value如何放入matlab中处理,本文给出的两种方法基本上能满足大部分的数据导出需求。
过冷水和你分享 matlab读取存储各种文件的方法 文末有独家金曲分享