首页/文章/ 详情

dymola与matlab生成矩阵散点图

8月前浏览14012

image.png

过冷水诚挚邀请你加入Matlab仿真秀官方交流群进行Matlab学习、问题咨询、 Matlab相关资料下载,**:927550334

QQ图片20210424105303.png

过冷水在使用Dymola的过程中使用Sweep Parameters命令分析自变量和结果之间的关系,

image.png



点击Run Sweep后,运行,如果是一个自变量,一个因变量。就是简单的点线图。

image.png

 

如果是两个自变量。一个因变量,就是二维半平面图

image.png

如果是三个自变量及以上,就是矩阵散点图

image.png

其对应的矩阵散点的脚本程序为:

simulateModel("odelica.Mechanics.Rotational.Examples.CoupledClutches", stopTime=10, method="dassl", resultFile="CoupledClutches");
translateModel("Modelica.Mechanics.Rotational.Examples.CoupledClutches");
Design.Experimentation.sweepManyParametersScatter(
Design.Internal.Records.ModelDependencySetup(
Model="Modelica.Mechanics.Rotational.Examples.CoupledClutches",
dependencyParameters={Design.Internal.Records.DependencyParameter(
name="J1.J",
values=linspace(1, 5, 5),
unit="kg.m2",
displayUnit="kg.m2"),Design.Internal.Records.DependencyParameter(
name="J2.J",
values=linspace(1, 5, 5),
unit="kg.m2",
displayUnit="kg.m2"),Design.Internal.Records.DependencyParameter(
name="J3.J",
values=linspace(1, 5, 5),
unit="kg.m2",
displayUnit="kg.m2"),Design.Internal.Records.DependencyParameter(
name="J4.J",
values=linspace(1, 5, 5),
unit="kg.m2",
displayUnit="kg.m2")},
VariablesToPlot={Design.Internal.Records.VariableToPlot(
name="J4.w",
unit="rad/s",
displayUnit="rad/s")},
integrator=Design.Internal.Records.Integrator(
startTime=0,
stopTime=10,
numberOfIntervals=0,
outputInterval=0.001,
method="Dassl",
tolerance=0.0001,
fixedStepSize=0),
outputToCSV=true),
seedForPlotting=Design.Experimentation.RandomNumber.Functions.seed(
x=1,
y=1,
z=1));

过冷水之前一直做matlab的应用,于是就考虑该如何用matlab实现编程。首选我们需要将dymola中的数据导出。我们采取直接copy数据的方法,将数据导入matlab中.针对本案例虽然有16张图,可是只是由四个自变量,一个因变量组成。因此只需要复杂对角线上的数据,然后再放入matlab中进行处理即可。

image.png

image.png



数据为四组二维数据,需要导入进matlab中,然后再根据Y列进行排序,将四个组数据拼接为626*5的一个矩阵。矩阵散点图在matlab中可以使用plotmatrix函数绘图,

clear all
data=xlsread('Êý¾Ý.xlsx','Sheet2','A2:K626');
J1= sortrows(data(:,[1,2]),2,'descend'); 
J2= sortrows(data(:,[4,5]),2,'descend'); 
J3= sortrows(data(:,[7,8]),2,'descend') ;
J4= sortrows(data(:,[10,11]),2,'descend') ;
data_table= table(J1(:,1),J2(:,1),J3(:,1),J4(:,1),J4(:,2),'VariableNames',{'J1_J','J2_J','J3_J','J4_J','J4_w'});
figure
plotmatrix(data_table.Variables,'*r')

image.png

 

过冷水在使用过程中觉得plotmatrix函数不能做到赋予散点颜色,即用二维数据表示三维信息的能力。过冷水发现散点图可以用scatter函数绘制,且能赋予散点的含义,基本能够得到与Dymola的一样的图,于是改用scatter函数,自行设计矩阵散点图。

image.png

clear all
data=xlsread('Êý¾Ý.xlsx','Sheet2','A2:K626');
J1= sortrows(data(:,[1,2]),2,'descend'); 
J2= sortrows(data(:,[4,5]),2,'descend'); 
J3= sortrows(data(:,[7,8]),2,'descend') ;
J4= sortrows(data(:,[10,11]),2,'descend') ;
data_table= table(J1(:,1),J2(:,1),J3(:,1),J4(:,1),J4(:,2),'VariableNames',{'J1_J','J2_J','J3_J','J4_J','J4_w'});
figure
for i=1:4
    for j=1:4
        subplot1=subplot(4,4,(i-1)*4+j)
        if i==j
            scatter(data_table(:,i).Variables,data_table(:,5).Variables,20,data_table(:,5).Variables,'filled');  
            ylabel('J4_w','FontName','NewTime');
            xlabel(data_table.Properties.VariableNames(i),'FontName','NewTime');
        else
            scatter(data_table(:,j).Variables,data_table(:,i).Variables,20,data_table(:,5).Variables,'filled');
            ylabel(data_table.Properties.VariableNames(i),'FontName','NewTime');
            xlabel(data_table.Properties.VariableNames(j),'FontName','NewTime');
        end
        box('on')
    end
end

这样就实现了使用matlab绘制dymola中的矩阵散点图,这么做的好处是,因为Matlab的绘图功能比较强大,可以最大程度的自行设计样框格式,matlab更适合做数据分析,所以,将dymola的数据导入matlab中还是很有必要的。


matlab绘制农夫过河动态图

分子动力学的原子空间运动轨迹演示编程

过冷水带你用matlab制作演示动画

python批量移动文件&重命名代码分享

过冷水和你分享 matlab读取存储各种文件的方法 文末有独家金曲分享

QQ图片20210424105303.png

未标题-7.gif

附件

50积分dymola与matlab绘制矩阵散点图.zip
STEPSMATLABUMDYMOLAModelica
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2024-02-16
最近编辑:8月前
过冷水
博士 | 讲师 讨论号:927550334
获赞 359粉丝 183文章 107课程 11
点赞
收藏
作者推荐

在dymola中采用脚本命令绘图

过过冷水诚挚邀请你加入Matlab仿真秀官方交流群进行Matlab学习、问题咨询、Matlab相关资料下载,**:927550334冷水开始使用dymola进行模型工作分析,在早期遇到的问题就是不知道,软件中的Script与Commards该怎么使用。在分析仿真结果时需要绘制变量曲线的图:过冷水在实践中发现,当如果绘图工作量比较大的时候,在VariableBrowser选择变量的时候就比较麻烦。可以选择用NewScript命令框里的GenerateScript生成绘图脚本命令:选择GenerateScript后,会弹出选择框,选择Plotsetup,点击OK即可生成脚本文件*.Mos将脚本文件命名为huitu.mos:代码:removePlots(false);Advanced.FilenameInLegend=true;Advanced.FilesToKeep=16;createPlot(id=1,position={0,0,1140,393},y={"Ag_Cu.y[1]"},range={0.0,10000.0,-0.5,4.0},autoscale=false,grid=true,filename="C:/Users/wayne/Desktop/Ag_Cu_dymola.mat",legends={"Ag_Cu.y[1]"},colors={{28,108,200}},thicknesses={0.5},timeUnit="s");createPlot(id=1,position={0,0,1140,393},y={"Ag_Ge.y[3]"},range={0.0,10000.0,-0.5,4.0},erase=false,autoscale=false,grid=true,filename="C:/Users/wayne/Desktop/Ag_Ge_dymola.mat",legends={"Ag_Ge.y[1]"},colors={{238,46,47}},thicknesses={0.5},timeUnit="s");在控制面板找到ExecuteScript,并双击运行,便可生成绘制Ag_Cu.y[1],Ag_Ge.y[1]的图像。过冷水在实践中还发现,如果想用脚本命令在一个窗口中绘制多幅曲线图。使用GenerateScript得到的脚本命令为:removePlots(false);Advanced.FilenameInLegend=true;Advanced.FilesToKeep=16;createPlot(id=1,position={0,0,1140,509},y={"Ag_Cu.y[1]"},range={0.0,10000.0,-1.0,4.0},autoscale=false,grid=true,filename="C:/Users/wayne/Desktop/Ag_Cu_dymola.mat",legends={"Ag_Cu.y[1]"},subPlot=101,colors={{28,108,200}},thicknesses={0.5},timeUnit="s");createPlot(id=1,position={0,0,1140,509},y={"Ag_Cu.y[2]"},range={0.0,10000.0,-5.0,15.0},autoscale=false,grid=true,filename="C:/Users/wayne/Desktop/Ag_Cu_dymola.mat",legends={"Ag_Cu.y[2]"},subPlot=102,colors={{28,108,200}},thicknesses={0.5},timeUnit="s");createPlot(id=1,position={0,0,1140,509},y={"Ag_Cu.y[3]"},range={0.0,10000.0,-1.0,4.0},autoscale=false,grid=true,filename="C:/Users/wayne/Desktop/Ag_Cu_dymola.mat",legends={"Ag_Cu.y[3]"},subPlot=103,colors={{28,108,200}},thicknesses={0.5},timeUnit="s");createPlot(id=1,position={0,0,1140,509},y={"Ag_Ge.y[1]"},range={0.0,10000.0,-1.0,4.0},erase=false,autoscale=false,grid=true,filename="C:/Users/wayne/Desktop/Ag_Ge_dymola.mat",legends={"Ag_Ge.y[1]"},subPlot=101,colors={{238,46,47}},thicknesses={0.5},timeUnit="s");createPlot(id=1,position={0,0,1140,509},y={"Ag_Ge.y[2]"},range={0.0,10000.0,-5.0,15.0},erase=false,autoscale=false,grid=true,filename="C:/Users/wayne/Desktop/Ag_Ge_dymola.mat",legends={"Ag_Ge.y[2]"},subPlot=102,colors={{238,46,47}},thicknesses={0.5},timeUnit="s");createPlot(id=1,position={0,0,1140,509},y={"Ag_Ge.y[3]"},range={0.0,10000.0,-1.0,4.0},erase=false,autoscale=false,grid=true,filename="C:/Users/wayne/Desktop/Ag_Ge_dymola.mat",legends={"Ag_Ge.y[1]"},subPlot=103,colors={{238,46,47}},thicknesses={0.5},timeUnit="s");运行脚本命令:可得图像,存在的问题是VariableBrowser存在多组Ag_Cu_dymola,Ag_Ge_dymola数据,显然这是没有必要的,分析原因发现是createPlot命令中含有:filename="C:/Users/wayne/Desktop/Ag_Ge_dymola.mat"其存在会导致每次执行createPlot命令时,都会导入读取一次*.mat文件,因此导致VariableBrowser中有多组数据,采取对应的方法为,可以减少filename的使用,采用默认数据,因为有两种数据,可以先绘制Ag_Cu_dymola.mat"对应的三幅图,第一副图使用filename="C:/Users/wayne/Desktop/Ag_Ge_dymola.mat"后面的命令取消filename,采用默认,则对应代码为:createPlot(id=1,position={0,0,1140,509},y={"Ag_Cu.y[1]"},range={0.0,10000.0,-1.0,4.0},autoscale=false,grid=true,filename="C:/Users/wayne/Desktop/Ag_Cu_dymola.mat",legends={"Ag_Cu.y[1]"},subPlot=101,colors={{28,108,200}},thicknesses={0.5},timeUnit="s");createPlot(id=1,position={0,0,1140,509},y={"Ag_Cu.y[2]"},range={0.0,10000.0,-5.0,15.0},autoscale=false,grid=true,legends={"Ag_Cu.y[2]"},subPlot=102,colors={{28,108,200}},thicknesses={0.5},timeUnit="s");createPlot(id=1,position={0,0,1140,509},y={"Ag_Cu.y[3]"},range={0.0,10000.0,-1.0,4.0},autoscale=false,grid=true,legends={"Ag_Cu.y[3]"},subPlot=103,colors={{28,108,200}},thicknesses={0.5},timeUnit="s");运行代码得到的图像为:图像如我们预期,VariableBrowser里面也只有一个Ag_Cu_dymola,则完整的代码和对应图像为:removePlots(false);Advanced.FilenameInLegend=true;Advanced.FilesToKeep=16;createPlot(id=1,position={0,0,1140,509},y={"Ag_Cu.y[1]"},range={0.0,10000.0,-1.0,4.0},autoscale=false,grid=true,filename="C:/Users/wayne/Desktop/Ag_Cu_dymola.mat",legends={"Ag_Cu.y[1]"},subPlot=101,colors={{28,108,200}},thicknesses={0.5},timeUnit="s");createPlot(id=1,position={0,0,1140,509},y={"Ag_Cu.y[2]"},range={0.0,10000.0,-5.0,15.0},autoscale=false,grid=true,legends={"Ag_Cu.y[2]"},subPlot=102,colors={{28,108,200}},thicknesses={0.5},timeUnit="s");createPlot(id=1,position={0,0,1140,509},y={"Ag_Cu.y[3]"},range={0.0,10000.0,-1.0,4.0},autoscale=false,grid=true,legends={"Ag_Cu.y[3]"},subPlot=103,colors={{28,108,200}},thicknesses={0.5},timeUnit="s");createPlot(id=1,position={0,0,1140,509},y={"Ag_Ge.y[1]"},range={0.0,10000.0,-1.0,4.0},erase=false,autoscale=false,grid=true,filename="C:/Users/wayne/Desktop/Ag_Ge_dymola.mat",legends={"Ag_Ge.y[1]"},subPlot=101,colors={{238,46,47}},thicknesses={0.5},timeUnit="s");createPlot(id=1,position={0,0,1140,509},y={"Ag_Ge.y[2]"},range={0.0,10000.0,-5.0,15.0},erase=false,autoscale=false,grid=true,legends={"Ag_Ge.y[2]"},subPlot=102,colors={{238,46,47}},thicknesses={0.5},timeUnit="s");createPlot(id=1,position={0,0,1140,509},y={"Ag_Ge.y[3]"},range={0.0,10000.0,-1.0,4.0},erase=false,autoscale=false,grid=true,legends={"Ag_Ge.y[1]"},subPlot=103,colors={{238,46,47}},thicknesses={0.5},timeUnit="s");这样我们就基本做到了使用脚本命令来实现绘图,本案例由于简单,我们是采用先绘图,在使用GenerateScript得到对应的脚步命令,这样看起来似乎脚本命令没有实际用途,过冷水的目的也是为了演示如何获取脚本命令的典型案例代码,在后续工作中,就可以知道.mat文件后,直接使用脚本命令绘图即可,这样效率会非常高。matlab绘制农夫过河动态图分子动力学的原子空间运动轨迹演示编程过冷水带你用matlab制作演示动画python批量移动文件&重命名代码分享过冷水和你分享matlab读取存储各种文件的方法文末有独家金曲分享

有附件
未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习 福利任务 兑换礼品
下载APP
联系我们
帮助与反馈