频道直达
八强网 > 实务 > 编程语言 > 正文阅读
关键词

在.NET中应用MATLAB算法

www.8tops.com 2007-3-19 10:40:45   发布:八龙
媒体:微软中国  作者:李洪根

 在科学研究和工程应用中,往往要进行大量的数学计算,其中包括矩阵运算。这些运算一般来说难以用手工精确和快捷地进行,而要借助计算机编制相应的程序做近似计算。目前流行用Basic、Fortran和c语言编制计算程序, 既需要对有关算法有深刻的了解,还需要熟练地掌握所用语言的语法及编程技巧。对多数科学工作者而言,同时具备这两方面技能有一定困难。通常,编制程序也是繁杂的,不仅消耗人力与物力,而且影响工作进程和效率。为克服上述困难,美国Mathwork公司于1967年推出了“Matrix Laboratory”(缩写为MATLAB)软件包,并不断更新和扩充。目前最新的6.x版本(windows环境)是一种功能强、效率高便于进行科学和工程计算的交互式软件包。其中包括:一般数值分析、矩阵运算、数字信号处理、建模和系统控制和优化等应用程序,并集应用程序和图形于一便于使用的集成环境中。在此环境下所解问题的MATLAB语言表述形式和其数学表达形式相同,不需要按传统的方法编程。不过,MATLAB作为一种新的计算机语言,要想运用自如,充分发挥它的威力,也需先系统地学习它。但由于使用MATLAB编程运算与人进行科学计算的思路和表达方式完全一致,所以不象学习其它高级语言--如Basic、Fortran和C等那样难于掌握。实践证明,你可在几十分钟的时间内学会MATLAB的基础知识,在短短几个小时的使用中就能初步掌握它.从而使你能够进行高效率和富有创造性的计算。 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中产生的图片

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

参考:
BBS水木清华站∶精华区 MATLAB算法 教程
http://matlabspace.myrice.com/matlab/smth.matlab/00000031/index.htm

八强网,更多精彩在首页,
八强网首页
网友评论

发表

我也评两句
 
发文时请务必注意:
一、遵守国家相关法律规定,如 《北京地区互联网站电子公告服务倡议书》《全国人大常委会关于维护互联网安全的决定》 及中华人民共和国其他各项有关法律法规。一旦违犯法律法规,您将承担一切因您的行为而直接或间接导致的民事或刑事法律责任,本站工作人员有义务配合相关部门,提供必要的技术资料(如IP地址等)。
二、自觉遵守爱国、守法、自律、真实、文明的原则,严禁发表有人身攻击倾向、有造谣生事嫌疑的言论,严禁发表虚假广告、色情、网络传销性质的内容,本站管理人员有权删除违反规定的内容或取消违规网友的发文权限甚至删除其ID。
互联网产业作家
网站提交】【八强自荐
将八强网设为首页 将八强网添加到收藏夹 将八强网推荐给朋友 网络实名、通用网址:八强网
关于我们 - 联系合作 - 广告服务 - 友情链接 - 支持单位 - 免责声明
基于E-file技术构建 版权所有Copyright©2006 京ICP备06061834号