随笔-13  评论-29  文章-31  trackbacks-0

.NET中应用MATLAB算法

MATLAB算法是一个优秀的算法,我们在软件开发过程中,尤其是数据库开发方面,要进行数据汇总、统计分析、然后根据汇总的数据产生图表(包括柱图、饼图、四分图、雷达图等),这种需求甚为普遍。

由于MATLAB算法具有强大的计算处理功能,所以在许多软件中已经用到它,比如作个销售预测,前提是基于以往的销售数据,可以用MATLAB算法对以往的销售数据进行处理(如函数、矩阵的一系列运算,或者采用一些运筹学的知识进行数据处理),再由MATLAB算法产生出相关数据的精美图形输出,得到一个具有科学理论依据的方案,把我们的管理思想融合到了计算机程序设计中,使软件解决方案不是简单的电算化工具,而是一个综合许多学科的智慧的结晶!

微软的.NET开发工具,结合数据库SQL SERVER,是开发数据库应用的最佳选择!我们可以把SQL SERVER里的数据用MATLAB算法进行处理,还可以将自己写的算法包装成COM,在.NET中引用就可以了。在使用的MATLAB算法时,图形输出的功能往往被人忽略,下面的例子,就是采用的MATLAB出的图形

 

首先在.NET中,引用matlab 的对象库(Matlab Application(version 6.5) Type Library),笔者采用的是MATLAB 6.5 版本,然后在窗体上加一个图片框PictureBox1,用于显示图片;

一个Button1用于调用MATLAB,并加载图形。

代码:

    Dim strMatLab As String    '定义matlab语句字符串

    ' 显示正弦图

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        Dim MatLab As Object

        '建立matlab应用

        MatLab = CreateObject("matlab.application")

        '最小化matlab命令窗口

        MatLab.MinimizeCommandWindow()

        'matlab语句

        strMatLab = "t=2:0.2:4*pi;y=sin(t);plot(t,y)"

        '执行matlab算法

        matlab.Execute(strMatLab)

        '生成一个JPG的图形c:\Test1.jpg

        matlab.Execute("print( gcf, '-djpeg', 'c:\Test1')")

        '退出matlab,释放资源

        matlab.Quit()

        MatLab = Nothing

        '显示在图片框

        PictureBox1.Image = New Bitmap("c:\Test1.jpg")

End Sub

 

    ' 显示饼图

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

        Dim matlab As Object

        matlab = CreateObject("matlab.application")

        strMatLab = "sale=[100 400 150 250 500];pie3(sale,[0 0 1 0 0],{'公司A','公司B','公司C','公司D','公司E'})"

        matlab.Execute(strMatLab)

        matlab.Execute("print( gcf, '-djpeg', 'c:\Test2')")

        matlab.Quit()

        matlab = Nothing

        PictureBox1.Image = New Bitmap("c:\Test2.jpg")

    End Sub

 

    ' 显示三维螺旋线图

    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click

        Dim matlab As Object

        matlab = CreateObject("matlab.application")

        strMatLab = "t=0:0.2:4*pi;plot3(sin(t),cos(t),t)"

        matlab.Execute(strMatLab)

        matlab.Execute("print( gcf, '-djpeg', 'c:\Test3')")

        matlab.Quit()

        matlab = Nothing

        PictureBox1.Image = New Bitmap("c:\Test3.jpg")

End Sub

 

    ' 显示立体波浪图

    Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click

        Dim matlab As Object

        matlab = CreateObject("matlab.application")

        strMatLab = "[X,Y,Z] = peaks(20);surfc(X,Y,Z);colormap hsv;axis ([-2 4 -6 8 -10 6])"

        matlab.Execute(strMatLab)

        matlab.Execute("print( gcf, '-djpeg', 'c:\Test5')")

        matlab.Quit()

        matlab = Nothing

        PictureBox1.Image = New Bitmap("c:\Test5.jpg")

    End Sub

 

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        PictureBox1.SizeMode = PictureBoxSizeMode.StretchImage

End Sub

总结:一般情况下,我们将自己的算法在MATLAB中生成dll,供VB.NET调用此算法,输入一组数据,输出一系列数据,而且MATLAB算法比较简单,一个命令就完成了许多功能,大大提高了开发效率!

posted on 2005-09-22 18:42 生活像一团麻 阅读(324) 评论(0)  编辑 收藏 引用 所属分类: 其他
只有注册用户登录后才能发表评论。