zoukankan      html  css  js  c++  java
  • 简简单单,一目了然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文件夹删除,重新生成。
    • 我的讲解完毕,希望大家关注我的博客。
  • 相关阅读:
    【转】C#使用PrintDocument打印 多页 打印预览
    【转】线程间操作无效: 从不是创建控件“textBox2” 的线程访问它。
    C# 定时执行方法: System.Timers.Timer用法示例
    SQL查找数据库中所有没有主键的数据表脚本
    linux之shell编程基本语法
    Linux之shell编程条件判断-if,while,for,case
    Linux之shell编程函数使用
    2.sparkSQL--DataFrames与RDDs的相互转换
    Spark2.1集群安装(standalone模式)
    storm1.0节点间消息传递过久分析及调优
  • 原文地址:https://www.cnblogs.com/kang/p/2060504.html
Copyright © 2011-2022 走看看