关于matlab与c#混合编程的问题(4)

2025-06-28

一起使用,Matlab已经在内部将数据转换过程封装好了,直接使用即可。第一种方式就不演示了,直接演示如何用接口来计算乘法。

五、C#调用混编好的dll计算结果。在上一节中我们已经说明了几个dll的作用,下面将演示他们的用法,将DemoTestIMultiply.dll和TypeSafeDemoNative.dll一起复制到测试项目的C#项目中去(新建一个控制台测试项目),分别添加这几个dll的引用:MWAarray.dll和DemoTestIMultiply.dll以及TypeSafeDemoNative.dll。然后添加命名空间,具体核心代码如下所示:

1using System;

2using System.Collections.Generic; 3using System.Linq; 4using System.Text; 5

6using MathWorks.MATLAB.NET.Arrays; 7using MathWorks.MATLAB.NET.Utility; 8

9using TypeSaftDemo; 10

11namespace TypeSaftTest 12 {

13class Program 14 {

15staticvoid Main(string[] args) 16 {

17//混编接口类的实例化

18 DemoTestIMultiply di = new DemoTestIMultiply(); 19double[,] a = newdouble[2,2] {{1,2},{3,4} };

20double[,] b = newdouble[2, 2] { { 6, 7 }, {8, 9 } }; 21//分别演示接口的3种不同调用 22var t1 = di.multiply(3, 5);

23var t2 = di.multiply(newdouble[] { 1, 2, 3 }, 5); 24var t3 = di.multiply(a, b);

25 Console.WriteLine(\个数直接相乘:\+t1.ToString()); 26 Console.Write(\数组与单个数直接相乘:\);

27foreach (var item in t2 ) Console.Write(item.ToString()+\); 28 Console.WriteLine();

29 Console.Write(\矩阵乘法:\);

30foreach (var item in t3) Console.Write(item.ToString() + \); 31 Console.ReadKey (); 32 } 33 } 34 }

结果如下图所示:

上面就是Matlab和C#基于接口的混合编程的详细过程,混编是一个很有用的工具,但要用好,其实真的很难,接触混编这么长的时间以来,碰到过很多同学使用这个工具,绝大部分是误用,导致无故的工作量。要想混编成为自己工作和学习的得力助手,必须加强Matlab和.NET基础的学习,只有2者的基础掌握好了,足够熟悉这2个平台,你才可能更顺利的解决混编过程中遇到的问题。当混编出了问题的时候,需要很多经验才能度过难关,这一点很重要,不要指望学会这个过程,就可以解决所有问题。期待Mathworks公司对Matlab的混编编程支持越来越强大。

【原创】Matlab.NET混合编程技巧之直接调用Matlab内置函数

1.传统的Matlab.NET混合编程步骤

传统的Matlab.NET混合编程有2种方式:

1)Matlab编写好M函数,利用deploytool编译m函数生成dll,在C#项目中引用并调用;

2)基于接口的编写方式,也是利用deploytool工具,过程繁琐一点,对编程人员素质要求高一点,但不需要进行繁琐的数据类型转换。我的博客有一篇文章专门介绍了这个混合编程方式,也有例子,大家有兴趣的可以看看:

http://www.cnblogs.com/asxinyu/archive/2013/05/16/3082299.html 不管上面用哪种方式,Matlab和C#混编的基本步骤,大概都是下面的过程:

1) 编写M函数,并首先在Matlab中测试是正确可以调用的。注意命名规范,注释规范; 2) 使用命令打开 deploytool工具,设置项目名称,选择类型:.NET Assembly,然后新建一个类,并添加编写好的M函数

3) 编译,生成dll,并在C#项目中添加引用(还需要引用对应版本的MWArray),利用对象浏览器查看生成dll的方法结构,并根据Matlab和C#的类型转换规则,进行数据转换即可, 如果是接口的编程,这个过程相对要简单。

回到目录

2.深入解析传统混编所生成的代码

2.1 第一步:编写M函数,并测试可以使用

为了好我们今天的目的相匹配,特意封装一个简单的内置函数,plot,来画一个简单的图形,如下所示M函数

1 function PlotTest(n)

2 %编写一个简单的函数,对plot进行简单封装一下 3 plot(1:n,1:n);

4 %测试正确,才可以进行下一步工作

注意,混编必须是m函数function的形式才能被调用。上述函数简单测试一下,没有问题(复杂的函数一定要多测试,否则后续调试非常困难)。继续下一步。

2.2 第二步:在Matlab中使用deploytool建立混编项目

在Matlab工作区输入命令:deploytool,然后得到下面界面,输入混编项目的名称,选择存储位置,关键的是类型那里一定要选择\。如下图所示:

选择“OK”之后,下一步matlab界面右侧会出现项目解决方案,需要添加类名称和M文件。这个类名称,就是编译完成之后C#项目中的类对象名称,然后添加我们刚才上一步编写的“PlotTest.m”,然后编译即可,如下图所示:

到此为止,一个常规 简单的Matlab.NET混编已经完成了60%了。编译完成之后,打开“Package”选项卡,即可看到生成的dll文件,然后点击右键,打开文件夹即可,如下图所示:

2.3 查看混编生成的代码

这个过程很关键,其实包含很多信息,只不过95%以上的人都没有注意到其实混编生成的dll是有源文件的,通过查看源文件就应该知道混编的原理,只不过这是matlab自动生成 而已。那看看生成的源码吧。

打开Matlab混编项目的目录,可以看到有2个文件夹,\”,“src”2个文件夹。\文件夹就是上面图中生成的dll,注意有2个dll,1个是“项目名称.dll”,一个


关于matlab与c#混合编程的问题(4).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:《天作之合》中西合璧婚礼主持词

相关阅读
本类排行
× 游客快捷下载通道(下载后可以自由复制和排版)

下载本文档需要支付 7

支付方式:

开通VIP包月会员 特价:29元/月

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:xuecool-com QQ:370150219