C#中使用MATLAB
原文 http://www.cnblogs.com/sorex/archive/2012/08/01/2617469.html
闲来无聊写篇文章聊以慰藉。
本文写了Matlab的2种基本调用方式,且同时和C#内部的Math类做了性能对比。
软件:Windows 7 x64,Microsoft Visual Studio 2012 RC,Matlab R2012a
一、首先装好Matlab R2012a。
二、打开Matlab,File->New->Function
输入如下代码
|
1
2
3
|
function result = TestFun(x, y)result = power(x, y);end |
然后保存
三、File->New->Deployment Project Type一定要选择.Net Assembly

四、添加一个Class,然后将上面我们新建的文件放进去。

五、点击编译



六(1)、在项目目录中可以看到distrib和src文件夹,这里我们直接将TestMatlab.dll引用到项目中。另外再添加MWArray.dll如下图所示

七(1)、输入如下代码:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
List<double> x = new List<double>();List<double> y = new List<double>();List<double> z1 = new List<double>();List<double> z2 = new List<double>();Random random = new Random();for (int i = 0; i < 1000000; i++){ x.Add(random.Next(1000) * random.NextDouble()); y.Add(random.Next(1000) * random.NextDouble());}DateTime a = DateTime.Now;for (int i = 0; i < x.Count; i++){ z1.Add(Math.Pow(x[i], y[i]));}DateTime b = DateTime.Now;Console.WriteLine((b - a).TotalMilliseconds);a = DateTime.Now;for (int i = 0; i < x.Count; i++){ z2.Add(Math.Pow(x[i], y[i]));}b = DateTime.Now;Console.WriteLine((b - a).TotalMilliseconds);a = DateTime.Now;TestClass tc1 = new TestClass();var z3 = tc1.TestFun((MWNumericArray)x.ToArray(), (MWNumericArray)y.ToArray()).ToArray();b = DateTime.Now;Console.WriteLine((b - a).TotalMilliseconds);a = DateTime.Now;TestClass tc2 = new TestClass();var z4 = tc2.TestFun((MWNumericArray)x.ToArray(), (MWNumericArray)y.ToArray()).ToArray();b = DateTime.Now;Console.WriteLine((b - a).TotalMilliseconds);Console.Read(); |
六(2)、这里我们选择TestMatlabNative.dll这个DLL
七(2)、输入如下代码
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
List<double> x = new List<double>();List<double> y = new List<double>();List<double> z1 = new List<double>();List<double> z2 = new List<double>();Random random = new Random();for (int i = 0; i < 1000000; i++){ x.Add(random.Next(1000) * random.NextDouble()); y.Add(random.Next(1000) * random.NextDouble());}DateTime a = DateTime.Now;for (int i = 0; i < x.Count; i++){ z1.Add(Math.Pow(x[i], y[i]));}DateTime b = DateTime.Now;Console.WriteLine((b - a).TotalMilliseconds);a = DateTime.Now;for (int i = 0; i < x.Count; i++){ z2.Add(Math.Pow(x[i], y[i]));}b = DateTime.Now;Console.WriteLine((b - a).TotalMilliseconds);a = DateTime.Now;TestClass tc1 = new TestClass();var z3 = tc1.TestFun(x.ToArray(), y.ToArray());b = DateTime.Now;Console.WriteLine((b - a).TotalMilliseconds);a = DateTime.Now;TestClass tc2 = new TestClass();var z4 = tc2.TestFun(x.ToArray(), y.ToArray());b = DateTime.Now;Console.WriteLine((b - a).TotalMilliseconds);Console.Read(); |
八、修改项目为x64的平台,如果您是x86的系统就不需要修改。

九、输出结果
(1)使用MWArray.dll

直接使用Math.Pow计算x的y次方时间是一致的93ms,
第一次加载Matlab并运算花费了7269ms,第二次使用Matlab运算仅花费62ms。
(2)使用Native.dll

直接使用Math.Pow计算x的y次方时间是一致的93ms,
第一次加载Matlab并运算花费了ms。
十、总结
Matlab的计算性能是毋庸置疑滴哇。同时使用Native.dll的性能比使用MWArray.dll的性能要高不少。
本测试中在使用Native.dll时性能大概是直接C#内部计算器的一倍。
PS:如果Matlab不能编译,请使用mbuild –setup 和 mex –setup 设置编译器为Visual Studio 。
C#中使用MATLAB的更多相关文章
- 如何在Python中调用Matlab
检查您的系统是否具有受支持的 Python 版本和 MATLAB R2014b 或更新版本.要检查您的系统上是否已安装 Python,请在操作系统提示符下运行 Python. 1)打开Prompt,输 ...
- VC中使用Matlab Engine出现"无法找到libeng.dll"的问题
VC中使用Matlab Engine出现"无法找到libeng.dll"的问题 本以为使这个原因 ,其实不是我2了 #include "engine.h" // ...
- Java中调用MatLab返回值
当在Java中使用MatLab函数时,由于语言语法的不同,Matlab返回多个数据时,想在Java中获取到并进行使用.查阅了网上资料,翻箱倒柜加上自己实战,得出方法如下: 如MatLab函数返回的是N ...
- [Python-MATLAB] 在Python中调用MATLAB的API
可以参考官方的说明文档: http://cn.mathworks.com/help/matlab/matlab_external/get-started-with-matlab-engine-for- ...
- Matlab与C++混合编程 2--在C++中使用Matlab固有命令
直接在Visual Studio中运行Matlab固有命令 #include <iostream> #include"engine.h" // 添加matlab引擎库的 ...
- Java中使用MATLAB作图 .
最近做一个项目,需要很多进行很多信号处理——小魏就是学软件的,对信号处理简直是个小白,最简单的实现就是傻瓜似的调用MATLAB的各种工具箱,达到目的就行. 同时,MATLAB是种解释性语言,执行效率比 ...
- 利用NVIDIA-NGC中的MATLAB容器加速语义分割
利用NVIDIA-NGC中的MATLAB容器加速语义分割 Speeding Up Semantic Segmentation Using MATLAB Container from NVIDIA NG ...
- 图像处理中的matlab使用
图像的矩阵表示 类和图像类型 虽然使用的是整数坐标, 但 MATLAB 中的像素值(亮度)并未限制为整数. 表 1-1 列出了 MATLAB 和图像处理工具箱为描述像素值而支持的各种类. 表中的前 8 ...
- centOS 6.7 中安装matlab R2014b
参考资料: [1] http://www.centoscn.com/image-text/config/2014/1222/4354.html 系统: centOS 6.7 2.6.32-573.el ...
- C#中调用Matlab人工神经网络算法实现手写数字识别
手写数字识别实现 设计技术参数:通过由数字构成的图像,自动实现几个不同数字的识别,设计识别方法,有较高的识别率 关键字:二值化 投影 矩阵 目标定位 Matlab 手写数字图像识别简介: 手写 ...
随机推荐
- UESTC_Eight Puzzle 2015 UESTC Training for Search Algorithm & String<Problem F>
F - Eight Puzzle Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) ...
- openssl CA 自签证书,阿里云配置tomcat https
<一,openssl CA自签发证书> 1,生成私钥 openssl genrsa 1024 > private.key;
- SqlServer 数据库日志无法收缩处理过程
今天按常用方法收缩一个测试用的数据库日志,发现没法收缩! dbcc sqlperf(logspace) USE [dbname] GO ALTER DATABASE [dbname] SET ...
- IOS 加载中提示框
LoadingView.h #import <Foundation/Foundation.h> @class MBProgressHUD; @interface LoadingView : ...
- ActionForward
一.只有登录才能显示的页面 这是一个很平常的问题,在访问某些网页的时候,只有登录才可以访问,以此保证安全. 实现原理也很简单,就是将一个属性设置在session中.在访问的时候进行判断即可. 例:re ...
- js面向对象编程:if中能够使用那些作为推断条件呢?
在全部编程语言中if是最长用的推断之中的一个.但在js中究竟哪些东西能够在if中式作为推断表达式呢? 比如怎样几行,仅仅是少了一个括号.真假就全然不同.究竟表示什么含义呢 var obj={}; ...
- RMAN数据库恢复之丢失数据文件的恢复
删除某一数据文件:SQL> HOST del D:\app\Administrator\oradata\orcl\USERS01.dbf 启动数据库,提示丢失数据文件4,此时数据库处理MOUNT ...
- Android多媒体开发-stagefright及AwesomePlayer相关知识梳理
android的多媒体框架中, stagefright其实是AwesomePlayer的代理,就是个皮包公司. status_t StagefrightPlayer::setDataSource( c ...
- CAShapeLayer + UIBezierPath
UIBezierPath: UIBezierPath是在 UIKit 中的一个类,继承于NSObject,可以创建基于矢量的路径.使用此类可以定义常见的圆形.多边形等形状 .我们使用直线.弧(arc) ...
- C语言undefined behaviour未定义行为
C语言中的未定义行为(Undefined Behavior)是指C语言标准未做规定的行为.同时,标准也从没要求编译器判断未定义行为,所以这些行为有编译器自行处理,在不同的编译器可能会产生不同的结果,又 ...