惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园 - 叶小钗
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Microsoft Security Blog
Microsoft Security Blog
罗磊的独立博客
大猫的无限游戏
大猫的无限游戏
美团技术团队
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
aimingoo的专栏
aimingoo的专栏
腾讯CDC
WordPress大学
WordPress大学
Apple Machine Learning Research
Apple Machine Learning Research
F
Fortinet All Blogs
G
Google Developers Blog
MongoDB | Blog
MongoDB | Blog
Microsoft Azure Blog
Microsoft Azure Blog
小众软件
小众软件
Engineering at Meta
Engineering at Meta
博客园_首页
B
Blog RSS Feed
D
Docker
M
MIT News - Artificial intelligence
爱范儿
爱范儿
I
InfoQ

博客园 - hnboy

查找相同的数据 管理sql2005出现“无法连接WMI……” word居中的一个小问题 造成Word文档体积大的四个主要原因【转】 页眉随着章节变 visio 打印乱码问题 - hnboy - 博客园 GridView中的超级链接 - hnboy - 博客园 C#中字符串操作函数(转载) php字符串处理函数讲解 【转】ghostxp修改方法 Visio虚线复制到word中变为实线问题的解决办法 访问IIS元数据库失败的解决 转自【挥剑斩浮云】破解 w3wp.exe的内存及CPU占用不能及时释放 文件属性变成灰色无法修改解除 解决使用ping命令PC喇叭响一声的问题 XP安全选项卡 关于 Asp 程序的 Server.CreateObject 错误解决方法 Windows 2003 服务器权限设置
C#与Matlab混合编程
hnboy · 2008-09-17 · via 博客园 - hnboy



(VS2005+Matlab7.5)制作dll步骤:star——matlab——Matlab Builder for .net——deployment tool——新建——Matlab Builder for .net——.Net component——右键add file——找目标M文件——编译

VS2005引用:引用编译的dll,同时保持*.ctf在同一文件夹下

Code

Code


MWNumericArray是MWArray和c#中数据的中间类,怎么用?怎样在C#与matlab间传递参数?
a.double型、int型等数值类型的变量传递
MWNumericArray i = null, result = mydouble;
i=4;
myClass myclass = new myClass(); //实例化
result = (MWNumericArray)myclass.myfunc(i);

b.字符串(需要用到MWCharArray和MWArray转换)
MWCharArray FileName = myString;
MWNumericArray sensitivity;
sensitivity = (MWNumericArray)myClass.myAlgorithm((MWArray)FileName);

c.多个输出参数组成的数组
MWNumericArray out_Arr = (MWNumericArray)out_Args[1]; //取出第一个参数返回的数组(matlab返回的数组下界是从1开始的)

取出数组中的一个元素值
mydouble=out_Arr[i].ToScalarDouble();

如上面例子ToScalarDouble一类的toXXXX等方法还有许多。

d.result.toArray可以把matlab返回的矩阵变成C#的n x m数组,eg:

double[,] csArray= (double[,])result.ToArray(MWArrayComponent.Real);

e.将数组传入Matlab(和传递单个数值的方法一样)
double[,] dbx = new double[2, 2] { { 1, 2 }, { 3, 4 } };
MWNumericArray x=dbx;
myclass.picture(x);


M文件如何接收和返回?

function x=test(h,d)   //接收两个参数,返回一个

function [x1,x2]=test(h,d)   //返回数组 


以上为.Net方式连接,以下为COM方式连接(编译速度而言.net的方式要快上很多,而且似乎比较稳定)

matlab编译工作
- mbuild -setup
- deploytool,Matlab Builder for .net,Generic COM Component
- 添加m函数文件(eg: myfunc.m),改类名(eg: myComClass),build

注册dll
regsvr32 myCom.dll
regsvr32 mwcomutil.dll

VS2005调用:
- Reference加Com控件
- 调用示例
double[,] arr = null;
object in_a, out_a;
in_a = 500;
out_a = arr1;
myCom.myComClass mc = new myCom.myComClass();
mc.myfunc(1, ref out_a, in_a);


小例子:(提取matlab返回的两个参数并转化为C#的矩阵)

Code

其中的M文件:

Code