C# Matlab 相互调用

C# Matlab 相互调用

测试环境

VisualStudio2013 / .net4.0
Matlab2015b

高版本的matlab对外接其它语言做得很方便了,并不需要一堆的配置。
其它语言与matlab的交互操作也类似。

C#调用Matlab

基本思路:将matlab函数打包成DLL文件,联合matlab数据支持DLL(MWArray.dll),交付给其它语言程序使用。

1、Matlab端的操作

编写matlab函数:
function [result,m,n] = GetSelfMultiplyResult(list)
% 计算 矩阵与其转置矩阵的乘积
% 测试返回多个结果
result = list*list';
[m,n] = size(result);
end
function result = GetSelfSquareResult(list)
% 计算 矩阵各元素平方后的结果
result = list.^2;
end
打包函数:
  1. 找到库编译器(LibraryCompiler)
    Matlab库编译器

  2. 打包函数
    如下图所示,
    1)选择目标类型(TYPE);
    2)添加需要打包的函数文件;
    3)重命名库名称。
    打包DLL库

  3. 重命名类名称,或者添加类,分配函数所属类。完成打包操作。
    打包类

导出DLL

在生成的文件中,找到“for_redistribution_files_only”文件夹,里面有
CalcMatResult.dll CalcMatResultNative.dll 两个dll文件,均可使用。
另外,MWArray.dll 在matlab安装目录中,参考路径:

X:\Program Files\MATLAB\R2015b\toolbox\dotnetbuilder\bin\win64\v2.0\

也可以直接使用Everything等软件直接搜索。

2、C#端的操作

C#端用到的就是 MWArray.dll 和 CalcMatResultNative.dll 这两个DLL文件。

  1. 添加DLL引用
    添加DLL引用

  2. 演示代码

using System;
using CalcMatResultNative; //添加引用
using MathWorks.MATLAB.NET.Arrays; //添加引用

namespace CsharpMatlabDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            int[,] list ={{1},{2},{3},{4}}; //列向量

            MWArray array = new MWNumericArray(list);

            CalcMatResultNative.Multiply multi = new Multiply();
            object resultObj = multi.GetSelfMultiplyResult(3, array);// 3 表示返回的结果数量,要小于等于matlab对应函数实际的返回值数量
            object[] resultObjs = (object[]) resultObj;

            double[,] calcResult = (double[,])resultObjs[0];
            double[,] sizem = (double[,])resultObjs[1];
            double[,] sizen = (double[,])resultObjs[2];

            Console.ReadKey();
        }
    }
}

Matlab调用C#

matlab调用C#更加简单,先将C#代码编译成dll库,matlab中直接引用即可调用。

如果失败,注意检查使用的.net版本是否过高,平台(x64/86)是否匹配等问题。
注意选择Release版本的DLL(C#的Bebug版本也可以引用,但C++的不行)。

1、C#端操作

代码

namespace MatlabInterface
{
    public class Dialog
    {
        public static bool ShowSelectMsg(string msg, string title)
        {
            DialogResult r = MessageBox.Show(msg, title, MessageBoxButtons.YesNo, MessageBoxIcon.Question);
            return r == DialogResult.Yes;
        }

        public string Msg { get; set; }

        public void ShowMsg()
        {
            MessageBox.Show(Msg, "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }

    }
}

2、Matlab操作

% 调用C# dll

% 引用绝对路径
NET.addAssembly('R:\Users\GrassPhy\Desktop\MatlabCsharpDemo\MatlabInterface.dll');

% 静态方法调用
select = MatlabInterface.Dialog.ShowSelectMsg('请选择...','提示');
if select
    disp('yes');
else
    disp('no');
end

% 成员方法调用
dialog = MatlabInterface.Dialog();
dialog.Msg = '提示信息';
dialog.ShowMsg();

参考:
C#中使用MATLAB

  • 8
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
C#调用Matlab函数可以通过以下两种方式实现: ### 1. 使用Matlab Engine API Matlab Engine API提供了一组接口,可以在C#中加载和执行Matlab函数。具体步骤如下: 1. 安装Matlab Engine API。Matlab Engine API需要和Matlab一起安装,安装时需要选择Matlab Engine API选项。 2. 在C#项目中添加对Matlab Engine API的引用。在Visual Studio中,右键项目,选择“引用”,然后选择“添加引用”,在COM选项卡中选择“Matlab Application”。 3. 在C#代码中加载和执行Matlab函数。示例代码如下: ```csharp // 创建Matlab Engine对象 var matlab = new Matlab(); // 执行Matlab函数 matlab.Execute("addpath('C:\\path\\to\\matlab\\function\\folder')"); matlab.Execute("result = myfunction(arg1, arg2)"); // 获取Matlab函数的返回值 double[] result = matlab.GetVariable("result", "base") as double[]; // 释放Matlab Engine对象 matlab.Quit(); ``` ### 2. 使用Matlab Compiler SDK Matlab Compiler SDK可以将Matlab函数编译成.NET组件,然后在C#调用。具体步骤如下: 1. 安装Matlab Compiler SDK。Matlab Compiler SDK需要和Matlab一起安装,安装时需要选择Matlab Compiler SDK选项。 2. 在Matlab中编译函数。在Matlab命令行中输入以下命令: ```matlab mcc -W "dotnet:MyComponent,MyNamespace,1.0" -T link:lib myfunction.m ``` 其中,MyComponent是.NET组件的名称,MyNamespace是.NET命名空间的名称,1.0是.NET组件的版本号,myfunction.m是需要编译的Matlab函数。 3. 在C#项目中添加对.NET组件的引用。在Visual Studio中,右键项目,选择“引用”,然后选择“添加引用”,选择“浏览”,找到编译出来的.NET组件,添加引用。 4. 在C#代码中调用.NET组件。示例代码如下: ```csharp // 创建.NET组件对象 var component = new MyComponent(); // 调用Matlab函数 double[] result = component.myfunction(arg1, arg2); // 释放.NET组件对象 component.Dispose(); ``` 需要注意的是,使用Matlab Compiler SDK编译的.NET组件需要在部署时安装Matlab Runtime,以保证能够正确运行。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值