目录
说明
用Matlab COM 接口对象 来对.m文件进行调用,电脑上必须安装MATLAB软件,
MLAppClass中的 Execute() 方法通过 字符串 来与Matlab进行交互;
软件环境:
C#: Visual Studio 2022
MATLAB : MATLAB R2021b
一、Visual Studio 程序
1. Vs 新建项目
第一步:打开Visual Studio 2022,新建项目,这里使用的是 控制台应用程序,给定名称、设置好路径后,点击 确定 ,创建项目。
第二步:在 解决方案资源管理器 中,右键 引用,点击 添加引用
在引用管理器中,点击左侧的 COM 选项,在搜索框中输入Matlab,添加Matlab Application的引用
添加完成后可以看到 MLApp
已经在 引用 中;
2. 编写 C# 程序
第一步:引入命名空间 MLApp
,创建 MLAppClass
对象,但是此时可能会遇到 无法嵌入互操作类型“MLAppClass”,如图:
解决办法是:在项目 引用 中的 MLApp
上右键 属性
将 嵌入互操作类型 修改为 False,此时编译器不再报错
第二步:通过 MLAppClass
的 Execute() 方法对Matlab进行操作,使用的C#代码如下:
using MLApp;
namespace ConsoleApp1
{
internal class Program
{
static void Main(string[] args)
{
MLAppClass matlab = new MLAppClass();
matlab.Execute(@"cd P:\MFile");//指定.m文件所在路径
matlab.Execute("Test()");//运行函数
}
}
}
使用的Matlab代码如下:
function Test()
x = -5:0.1:5;
y = sin(x);
plot(x,y);
end
添加断点,点击运行,可以看到弹出MATLAB Command Window和输出的Figure图像,
二、matlab.Execute()
1. MATLAB函数的输入输出
使用如下的Matlab代码进行测试:
function res = Add(a,b)
res = a + b;
end
使用的C#代码如下:输入量和输出量使用Array类型,且是二维矩阵
using MLApp;
namespace ConsoleApp1
{
internal class Program
{
static void Main(string[] args)
{
MLAppClass matlab = new MLAppClass();
matlab.Execute(@"cd P:\MFile");
double[,] Ar = { { 3 } }; double[,] Ai = { { 0 } };
double[,] Br = { { 6 } }; double[,] Bi = { { 0 } };
//对函数输入量进行赋值
matlab.PutFullMatrix("a", "base", Ar, Ai);
matlab.PutFullMatrix("b", "base", Br, Bi);
//函数运行
matlab.Execute("res = Add(a,b)");
//获取输出数据
Array res_r = new double[1, 1];
Array res_i = new double[1, 1];
matlab.GetFullMatrix("res", "base", ref res_r, ref res_i);
Console.WriteLine($"a+b={res_r.GetValue(0,0)}");
}
}
}
运行结果如下图:
2. MATLAB Command Window
对于打开的 MATLAB Command Window 也可以进行交互,可以获取当前 工作区 中数据的值