C#中调用MATLAB函数

来源:互联网 发布:女士衬衫品牌 知乎 编辑:程序博客网 时间:2024/05/10 19:01

软件:Windows 7 x64,Microsoft Visual Studio Ultimate 2013,Matlab R2012a

一、首先装好Matlab R2012a。

二、编写Matlab测试程序

编写需要实现的主函数,函数名需要与 C#声明的函数名相同。如果需要使用到子函数,一并编写子函数,此处使用子函数,将矩阵乘以 1。 由于本文只是一个示例,所以具体的变量保护的措施,建议最好在 C#调用 Matlab 之前就做好,结合本例,如两个矩阵不一样大小等等。 注意主函数中的“ double”,如果希望主 C#调用的结果是 double 型的,此处需要强制转换成 double 型,其它类型则以希望输出的变量类型设置。文章第 11 有详细讲解。 

function dstmat=MatrixMultiply(srcmat1,srcmat2)%示例代码,实现两个矩阵相乘,并且带哦用子函数dstmat=srcmat1*srcmat2;dstmat=double(SubFun(dstmat));end

funciton dstmat=SubFun(srcmat)%此函数只为示范调用子函数%将矩阵乘以1dstmat=srcmat*1;end

三、新建一个Matlab工程,File->New->Deployment Project  Type一定要选择.Net Assembly


四、Matlab主界面右侧出现.NET Assmbly窗口。

选择 Add class,根据自己习惯,以方便识别为原则,添加 Matlab 的类名,这里使用 Class1, 一并将主函数拖动到此处。如果需要使用到子函数,将子函数拖动到 Shared Resources 。如下图所示 

        添加后变成这样  

五、点击编译


六、c#程序添加引用matlab生成的dll动态链接库

这时项目文件夹会下会生成distrib和src文件夹,生成的文件中一般只要用到一个一个文件 的distrib下的MatlabMultiply.dll,直接引用到项目中,另外再添加引用MWArray.dll,此文件是matlab原有的中间变量类型库文件,位置在 MATLAB\R2012a\toolbox\dotnetbuilder\bin\win64\v2.0

代码中添加引用

using MathWorks.MATLAB.NET.Arrays;using Multiply;


七、修改项目目标平台

修改平台配置,如果使用的项目是 x86 的,就生成 x86,否则就 x64。一定不能 AnyCPU。并
且 
x86 的平台只能使用 x86 的 Matlab 来生成, x64 的必须使用 x64 的 Matlab 生成。  


八、c#测试代码程序

static void Main(string[] args)        {            double[,] srcMat1 = new double[3, 3] { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } };            double[,] srcMat2 = new double[3, 3] { { 9, 8, 7 }, { 6, 5, 4 }, { 3, 2, 1 } };            Class1 multiTest = new Class1();            double[,] dstMat = (double[,])multiTest.MatrixMultiply((MWNumericArray)srcMat1, (MWNumericArray)srcMat2).ToArray();            Console.ReadKey();        }

九、输出结果


0 0