欢迎来到天天文库
浏览记录
ID:37557448
大小:792.80 KB
页数:13页
时间:2019-05-25
《Matlab数据类型与.NET数据类型转换》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、Matlab数据类型与.NET数据类型转换GalaxyGap2012-12-11用Matlab写算法还是有很多优势的,具体表现在以下几个方面:1)Matlab的内部函数是用C语言写的,虽然M语言是解释性语言,但调用内部函数进行计算还是很快的。2)一般我们写算法都会涉及到很多基本的数学操作,比如说矩阵相乘、矩阵求逆、求特征值、满足特定分布的随机数生成、基本统计量的计算等等。这些基本的数学操作可以说是我们算法的基本组成部分,我们可以使用任何一种语言编写函数一一实现这些基本的数学操作,然后由这些最基本的数学操作构建我们更复杂的算法。但是我们有没有必要这么做呢?显然没有!因为这
2、些基本的数学操作虽然原理我们都懂,自己亲自动手实现也不会太难,但它太耗时,我们自己写出来的东西可能也不稳健!耗时这个很好理解了,即使是一个很简单的矩阵求逆我们也要写一大段的代码,费劲心思去进行流程设计和步骤分解,编写代码的时候也要小心翼翼地处理各种细节。可以说从最底层开始写算法是非常费神的,等你算法写好了,估计也已经累得半死,然后项目也早过期了。更严重的是自己写出来的基本模块没有一些数学软件提供的模块那么稳健,可能存在某些漏洞或bug,这样程序调试起来又更费力气。可以说从最底层写算法是一件吃力不讨好的事情。相反若在某些数学软件的平台上写算法,我们的工作就会省去一大半,而
3、且写出来的算法也更稳健。比如说在Matlab上我们要实现矩阵求逆,只需要调用一个函数便可得到结果。而且这个函数应该是比较稳健的,不会出什么意外。更重要的是,Matlab平台不仅仅是提供了一些最基本的数学操作,还在此基础上实现了一些更高级的模块,比如说求解线性方程组、曲线拟合、积分微分等。这些更高级的模块也都可以成为我们算法的组成部分。也即是我们的算法可以在更粗的粒度上来构建,而不局限于从基本的数学操作上开始构建。3)Matlab支持将M文件编译成其他平台能够使用的组件或者说模块,也即是Matlab能够和其他平台通信,只需要安装一个200多兆的MCR即可。当然什么东西都不
4、是十全十美的,用Matlab写算法也有它的缺点,特别是当我们想把Matlab中写的算法应用到其他平台上时,它的缺点就体现得更明显。1)首先是速度的问题,也许我们的算法直接在Matlab平台上运行的时候速度是很快的,但应用到其他平台上的时候就很慢了,这是因为Matlab和其他平台通信的时候耗时比较多,尤其是和.NET通信的时候。2)其次Matlab和其他平台通信的时候涉及到数据转换,因为不同平台的数据类型一般不相同。这种数据类型的转换有时候比较复杂,不便于不同平台下的程序员交流。比如说一个熟悉Matlab平台的算法程序员把算法写好并编译成.NET程序集之后交给一个不熟悉M
5、atlab环境的.NET程序员去用这个算法。在这种情况下,也许Matlab程序员很清楚他的算法需要什么样的数据作为输入,然后输出了什么样的数据,但.NET程序员却未必对这一算法的输入输出了解得那么清楚了。没有搞清楚输入输出想要应用这一算法就有点勉为其难。因此Matlab与.NET之间的数据交换就显得尤为重要,只有能理解两个平台的数据类型以及他们之间的转换过程才能顺利地将两个平台结合在一起。本文以下就专门讨论Matlab平台与.NET平台的数据交换过程。开始之前先提醒一下:Matlab平台与.NET平台的数据交换全是由MathWorks.MATLAB.NET.Arrays
6、这一命名空间下的类和接口实现的。这是一个由Matlab为支持.NET平台开发的.NET中的方法集。因此我们要想搞清楚这两个平台之间是如何通信的,除了对两个平台的数据类型由足够的了解之外,还要深谙这个命名空间下的各种方法的作用。Matlab中的M文件编译成.NET可用的程序集我们首先从Matlab这边开始,看看在Matlab这边写好的函数是怎样一步步变成.NET中可用的函数。假设我们在Matlab中写好了这样一个简单函数:functiony=Sum(x)y=sum(x);关于sum这个Matlab内部函数的作用,大家可以在Matlab的help中查到,这里就不具体说了。只
7、需要看看在Matlab中它的输入输出即可。比如说输入这样一个矩阵(我们知道Matlab中所有的数据类型都是以矩阵的形式表示的,即使是一个单一值,Matlab中也把它表示成1×1的矩阵):data=[123;456;789;101112];data=123456789101112可以看到这是一个4×3的矩阵。调用Sum函数之后得到的结果为:y=Sum(data)y=222630这个时候y已经是一个1×3的矩阵了。我们再用Sum处理一下这个y得到的结果是:Sum(y)ans=78可以看到就这么一个简单的函数在Matlab中它的输入输出可是变化
此文档下载收益归作者所有