最近正在学习如何使用C#调用Matlab的代码,查阅了很多相关资料,踩了不少坑 ,不过终于解决了问题。
软件环境:
C#: Visual Studio 2013
MATLAB : MATLAB R2020b
(MATLAB 是使用学校邮箱注册的正版软件,Vs2013用的是破解版,之后也成功测试了Vs2017)。
需要安装 MATLAB Compiler
和 MATLAB Compiler SDK
两个工具包(),一种可行的方法是用安装程序安装;
另一种方法是:在命令行窗口输入: deploytool
,
MATLAB Compiler
和 MATLAB Compiler SDK
进入到 附加功能资源管理器 界面中,
这里安装的是 MATLAB Compiler SDK
,
因为安装 MATLAB Compiler SDK
,会连带安装MATLAB Compiler
;
编写一个简单的 函数(保存为addNum.m);
function result = addNum(a,b)
result = a + b;
end
(1) 在命令行窗口输入: deploytool
;
在弹出的 MATLAB Compiler 窗口中 选择 Library Compiler
;
或者也可以通过上方 编辑器 旁边的 APP
,右边的下拉按钮,
在 应用程序部署 中也可以找到 Library Compiler
,
(2) 在Library Compiler界面中,只需要执行下面三个步骤:
第一步:下拉 的滑动条,选择其中的 .NET Assembly
;
第二步:点击 的加号,
添加所写函数保存的.m文件的;
第三步:类的名字可以自己设置,这里保持默认的 Class1
;
最后点击 Package
。
路径可以选择和.m文件在同一文件夹下,然后等待打包完成。
至此 MATLAB 对.m文件内函数的封装已经完成。
第一步:打开Visual Studio 2013,新建项目,这里使用的是 ,给定名称、设置好路径后,点击 确定 ,创建项目。
第二步:在 解决方案资源管理器 中,右键 ,点击
点击 浏览 ,找到之前MATLAB封装后生成的文件夹,
打开文件名为 for_redistribution_files_only
下的 addNum.dll
,
进行添加,
然后还需添加一个 MWArray.dll
用于C#和MATLAB之间的数据传递,
路径是:MATLAB安装的文件夹/ toolbox / dotnetbuilder / bin / win64 / v4.0;
添加完成后可以看到 addNum
和 MWArry
已经在 引用 中;
第三步:右键 项目,点击 属性 ,(这一步也是最坑的,花费了大量时间才找到解决办法);
左边一栏中,选择 生成,将 目标平台,修改为 ;
这里用最简单的一个例子进行测试:
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);
}
}
}
点击启动,需要稍等一会,控制台上即可显示输出结果。
之后又尝试了C#调用Matlab的 功能,将原来写的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 Compiler
和 MATLAB Compiler SDK
;addNum.dll
和 MWArray.dll
;x64
。免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删