在.NET中应用MATLAB算法

原创 2003年05月20日 12:28:00

.NET中应用MATLAB算法<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

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

 

 

运行结果的图片显示:

<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />CSDN_Dev_Image_2003-5-201036040.jpg

CSDN_Dev_Image_2003-5-201036042.jpg

以下是MATLAB中产生的图片

CSDN_Dev_Image_2003-5-201036044.jpg

CSDN_Dev_Image_2003-5-201036046.jpg

 

 

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

 

参考:

BBS水木清华站精华区 MATLAB算法 教程

http://matlabspace.myrice.com/matlab/smth.matlab/00000031/index.htm

 

 

RANSAC算法及应用。。

转自:http://blog.csdn.net/xufuyuan/article/details/7106040 本文翻译自维基百科,英文原文地址是:http://en.wikipedia.or...
  • zkl99999
  • zkl99999
  • 2015年06月24日 11:28
  • 2397

VS调用Matlab计算引擎

C++&Matlab混合编程
  • u013166794
  • u013166794
  • 2016年04月27日 13:22
  • 1373

在C#的Web项目中调用Matlab代码的方法

为了毕设的图形检索方向的研究,本人需要在信科的师兄师姐们已经完成的C#界面中,调用现在研究的算法的Matlab代码,以便看到实验的效果。前段时间已经拖延了1个多月,一方面因为实习越来越多事情,时间减少...
  • Germanknight
  • Germanknight
  • 2015年04月17日 00:34
  • 2034

ASP.Net应用递归算法案例

案例需求:动态将一个公司各个部门按照部门顺序排列,在页面动态生成列表,并且子级部门需要比父级部门缩进20px。 页面代码: 后台代码: 1、 public cla...
  • zjk20108023
  • zjk20108023
  • 2015年03月24日 20:41
  • 527

.Net算法库 NMath应用介绍

.Net算法库NMath     下载>> 医学应用——曲线拟合 实例:SIGA>> 数据挖掘应用——层次聚类 实例:UserZoom>> 财务投资应用—...
  • nottichan
  • nottichan
  • 2012年12月11日 16:03
  • 425

.net_置放龙珠_精典算法八皇后应用改写的益智游戏

  • 2012年01月19日 21:08
  • 897KB
  • 下载

[VB.NET源码]密码算法及其在信息安全中的应用

  • 2008年12月16日 22:14
  • 346KB
  • 下载

asp.net下调用Matlab生成动态链接库

对于这次论文项目,最后在写一篇关于工程的博客,那就是在asp.net下调用matlab生成的dll动态链接库。至今关于matlab,c/c++(opencv),c#(asp.net)我总共写了4篇配置...
  • u010277881
  • u010277881
  • 2015年09月27日 16:55
  • 518

MATLAB与.NET混合编程实例(C#)

我们为什么要应用MATLAB接口技术进行混合编程?     MATLAB使用一种脚本语言,它的执行是逐行解释执行的,也就是边解释边执行,程序中所有的变量都是MxArray来实现的,所以为了保证通用性...
  • pengfeixiong
  • pengfeixiong
  • 2012年07月23日 15:28
  • 4434

在vb.net中调用MATLAB函数

在网上搜到很多有关VS调用MATLAB函数的方法,以下是本人已经实现了的在vb.net中调用MATLAB函数的方法。         首先在MATLAB中配置环境:         1. mbuild...
  • zhquanquan
  • zhquanquan
  • 2016年12月30日 16:20
  • 1657
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:在.NET中应用MATLAB算法
举报原因:
原因补充:

(最多只允许输入30个字)