简简单单,一目了然C#与Matlab

    Matlab的计算能力大家有目共睹,但是它的局限就是在于表现力上。如果在Winform的GUI上联合Matlab,的确是一个不错想法。虽然网上的有不少Matlab与C#混合编程的实例,但是笔者还是再写一个成熟的实例。

  • 开发环境:Visual studio 2005; Matlab R2009a

闲话不说,看实例步骤:

  • 打开Matlab,新建一个*.M文件,本实例中新建GetEigMethod.M文件

        image

  • 保存*.M文件。
  • 在Matlab Command Window 中 输入 deploytool 命令,显示出Deployment Tool 工具

        image 

  • 在Deployment Tool窗口中, 工具点击“新建”

        image

  • 弹出New Deployment Project窗口,选择“Matlab for NE”

        image

  • 在Name文本框中输入这个Project的名字,此处输入DllMatlabCSharp,点击OK

        image

  • 对ClassName 改为CalcMethod后,右键选择刚才新建的*.M文件
  • 完成以上步骤后,点击生成按钮image
  • 直到编译完成。这样就生成了Dll文件。
  • 打开工程的所在路径,选择distrib文件夹,查看该文件夹下有两个DLL文件,其中一个是DllMatlabCSharp.dll文件和DllMatlabCSharpNative.dll。我们在C#中用到的前者。
  • 打开Visual Studio 2005 新建一个winform 工程
  • 在引用中添加我们在Matlab中生成的DllMatlabCSharp.dll文件

       image

  • 查看引用,已经显示添加的引用

       image

  • 然后,在using中,添加引用,using DllMatlabCSharp;

       image

  • 当然这样的话还不可以,我们要添加如下引用后,using MathWorks.MATLAB.NET.Arrays; using MathWorks.MATLAB.NET.Utility;

       image

  • 下面开始怎么用C#和Matlab混合编程了。

           CalcMethods myMethods = new CalcMethods();//这是我们在生成Dll文件时,命名的类

           double[,] a1 = new double[3, 3] { { 1, 2,3 }, { 4, 5,6 }, { 7, 8,9 } };//二维数组变量
           MWNumericArray a2 = new MWNumericArray(a1);//把二维数组a1转换成矩阵a2

           MWArray[] max = myMethods.GetEigMethod(2,a2);//调用我们封装的*.M文件(即函数),第一个参数"2"表示这个函数有2个返回值;第二个参数a2

                                                                                     //表示需要传的矩阵参数。MWArry类型的数组Max表示该函数的返回值。

          MWNumericArray x1 = (MWNumericArray)max[0];//得到第一个返回值矩阵
          MWNumericArray x2 = (MWNumericArray)max[1];//得到第二个返回值矩阵

          double[,] location1 = (double[,])x1.ToArray(MWArrayComponent.Real);//将第一个矩阵转换为二维数组
          double[,] location2 = (double[,])x2.ToArray(MWArrayComponent.Real);//将第二个矩阵转换为二维数组

  • 这样我们就可以实现了。
  • 注:可能在编译过程中在CalcMethods myMethods = new CalcMethods();这句报错,我的解决办法是把Debug文件夹删除,重新生成。
  • 我的讲解完毕,希望大家关注我的博客。
原文地址:https://www.cnblogs.com/kang/p/2060504.html