C# 调用Matlab代码/函数

说明
最近正在学习如何使用C#调用Matlab的代码,查阅了很多相关资料,踩了不少坑 ,不过终于解决了问题。

软件环境:
C#: Visual Studio 2013 MATLAB : MATLAB R2020b

(MATLAB 是使用学校邮箱注册的正版软件,Vs2013用的是破解版,之后也成功测试了Vs2017)。

一、MATLAB 配置和封装
1. MATLAB 工具包安装
需要安装 MATLAB Compiler 和 MATLAB Compiler SDK 两个工具包(缺一不可),一种可行的方法是用安装程序安装;

另一种方法是:在命令行窗口输入: deploytool,
点击 MATLAB Compiler 和 MATLAB Compiler SDK 进入到 附加功能资源管理器 界面中,

这里安装的是 MATLAB Compiler SDK,

因为安装 MATLAB Compiler SDK,会连带安装MATLAB Compiler;


2. 编写 MATLAB 程序
编写一个简单的 加法 函数(保存为addNum.m);

function result = addNum(a,b)
    result = a + b;  
end    


3. 封装为dll
(1) 在命令行窗口输入: deploytool;


在弹出的 MATLAB Compiler 窗口中 选择 Library Compiler;

或者也可以通过上方 编辑器 旁边的 APP,右边的下拉按钮,

在 应用程序部署 中也可以找到 Library Compiler,


(2) 在Library Compiler界面中,只需要执行下面三个步骤:


第一步:下拉 TYPE 的滑动条,选择其中的 .NET Assembly;

第二步:点击 EXPORTED FUNCTIONS 的加号,

添加所写函数保存的.m文件的路径;


第三步:类的名字可以自己设置,这里保持默认的 Class1 ;
最后点击 Package。

路径可以选择和.m文件在同一文件夹下,然后等待打包完成。

至此 MATLAB 对.m文件内函数的封装已经完成。

二、Visual Studio 配置及编程
1. Vs 配置
第一步:打开Visual Studio 2013,新建项目,这里使用的是 控制台应用程序,给定名称、设置好路径后,点击 确定 ,创建项目。

第二步:在 解决方案资源管理器 中,右键 引用,点击 添加引用

点击 浏览 ,找到之前MATLAB封装后生成的文件夹,

打开文件名为 for_redistribution_files_only下的 addNum.dll,


进行添加,

然后还需添加一个 MWArray.dll 用于C#和MATLAB之间的数据传递,
路径是:MATLAB安装的文件夹/ toolbox / dotnetbuilder / bin / win64 / v4.0;


添加完成后可以看到 addNum 和 MWArry 已经在 引用 中;

第三步:右键 项目,点击 属性 ,(这一步也是最坑的,花费了大量时间才找到解决办法);

左边一栏中,选择 生成,将 目标平台,修改为 x64;


2. 编写 C# 程序
这里用最简单的一个例子进行测试:

using System;
using addNum;
using MathWorks.MATLAB.NET.Arrays;

namespace UseMatlab
{
    class Program
    {
        static void Main()
        {
            Class1 demo = new Class1();
            MWArray a = 1, b = 2, c;
            c = demo.addNum(a, b);
            Console.WriteLine("a:{0},b:{1}", a, b);
            Console.WriteLine("c:{0}",c);
        }
    }
}

点击启动,需要稍等一会,控制台上即可显示输出结果。


3. 额外测试
之后又尝试了C#调用Matlab的 plot 功能,将原来写的addNum函数进行修改:

function result = addNum(a,b)
    result = a + b; 
     
    x = -5:0.1:5;
    y = sin(x);
    plot(x,y);   
end    


代码修改后,双击 addNum.prj 工程文件,点击 Package,对函数重新进行打包;

此时Vs端 不需要 重新添加引用,直接点击 启动,即可运行代码,

控制台窗口 显示数字后,弹出Matlab plot函数运行后的 Figure 窗口。
至此,完成C#对Matlab函数的调用。

三、总结
MATLAB 需要安装两个工具包 :MATLAB Compiler 和 MATLAB Compiler SDK ;
MATLAB封装的 步骤 和 路径 要清楚;
VS端 需要 添加 两个引用:addNum.dll 和 MWArray.dll;
VS端 生成的 目标平台 一定要改为 x64。

[C#] 调用MATLAB(.Net类库) (一)调用Matlab代码/函数_athworks.matlab.net库-CSDN博客

  • 20
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
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,以保证能够正确运行。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值