在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
这是一个课题系统中的实验,基于Visual C#和MATLAB的对到达过程模拟生成系统,本文主要记录一下自己实现产生符合log-normal随机数的时间点序列,并调用MATLAB进行画图的过程。界面比较简陋,主要为了实现这个过程,如下图: 1.基于窗体程序实现生成符合log-normal分布的时间点 1.1界面设计 (1)添加控件 添加两个按钮控件,和一个ListView控件。分别命名为makerand,plot,biaoge。 添加一个计时器。(我想到的方法就是利用计时器响应makerand按钮的消息产生随机数) 在这个窗体类中添加产生log-normal随机数的函数,一些分布的函数可以在网上找函数,也可以利用概率密度自己得到,因为这个函数不是自己写的,我就不粘贴了。 函数声明如下:double AverageRandom(double min, double max); double LogNormal(double x, double miu, double sigma); double Random_LogNormal(double miu, double sigma, double min, double max); 点击按钮,在消息响应函数中添加代码: 在 private void makerand_Click(object sender, EventArgs e)中添加timer1.Start(); 在计时器中添加产生随机数的过程,代码如下: if (currentCount < 50) } ListView的属性自己设定,怎么好看怎么整就行,在后续的过程中,我会完善自己的界面。 此时,模拟产生随机数的这个功能就实现了,点击产生随机数按钮,效果如下图:
2.基于C#调用MATLAB进行画图 根据生成的随机点,我们设置一个time=0,每个随机数就是一个时间间隔,进行打点,我在这里想到的是调用C#和MATLAB的接口,进行画图,因为我在调用的时候遇到了一些问题,所以说我决定记录一下我实现调用的过程。 思路就是,在窗体响应完plot消息后,c#调用已经写好的MATLAB动态链接库dll进行画图。 具体步骤如下: 在MATLAB 2016a中添加一个函数timeplot.m,在里面添加如下代码: function plottime = timeplot(time ); end 保存之后,在MATLAB 2016a中的command中输入deploytool选择 library compile进行动态库的编写如下: 添加你想要做成dll的函数,然后选择.NET Assembly。这里需要注意的是 在界面中有一个class的标签,这个要写清楚,因为在你将dll添入c#中后,所调用的类就是你这个类的名字。 在把它打包成dll后放入你的C#项目中,添加引用。在c#调用MATLAB的过程中,我们会进行参数的传递,这个时候我们需要把原本在MATLAB中的NWArray.dll放入c#的项目中,进行参数的传递。 在原项目中添加如下引用: using MathWorks.MATLAB.NET.Arrays; using timeplot; 这个timeplot就是我生成的dll。在下面的代码中的plotthetime类就是我在MATLAB中定义的类。 MWNumericArray plot = timespace; pl.timeplot(plot); 这样就实现画图了,效果如下: 因为调用的是接口,所以它的执行过程比较慢。 在我们实现调用的过程中,可能会出现一个参数没有传递成功的错误,这个时候我们把项目属性编程.NET Framework4.0既可,我会把源码的地址发一下。第一次写博客,写的不好请包涵。这里首要要感谢我们学院的安老师在整个过程中给我的帮助,让我开拓了建模的思想。
|
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论