1 C#调用matlab函数
参考师兄的代码时,发现无法调用自己电脑上的matlab,创建函数类时,报如下错误:
重新用matlab2021编写add函数,并配置C#调用matlab环境,成功执行。在matlab生成的工程文件中,可以看到配置环境要求:
- C#调用matlab操纵步骤
- 定义编写matlab函数
- 执行指令:deploytool
- 在matlab compiler中选择library compiler
- 选择.net assembly
- 添加第1步中编写的函数
- 定义类名,也可以默认,后续在C#中调用
- 点击生成工程文件,效果如下图。
打开生成的工程文件add_clover中的for_testing文件夹,效果如下,可以看到使用配置说明。
将生成的上述的两个.dll文件复制到C#工程的/bin/debug文件夹下,然后在开发环境中添加上述两个.dll引用:
2 C#调用多个matlab函数
- 测试方法1
上述一个.m文件对应一个函数,一个工程文件对应一个.m文件,如果C#需要调用多个matlab函数,就需要定义多个.m文件和生成多个工程文件,不是2202年该有的样子。最理想的情况是,直接将多个函数定义在一个.m文件中,函数内容如下:
按第一节中步骤生成对应的工程文件,在C#中配置后调用,发现找不到成员函数,如何改进此方法使之成功,欢迎大家批评指正!
另一方面,FuncPacks.m文件在matlab中可以方便实现多个函数的灵活调用,如下:
- 测试方法2
上述方法行不通,只好退而求其次,定义多个.m函数文件,将这些文件生成一个工程文件,最终测试成功。麻烦在于需要定义编写多个.m文件。欢迎大家批评指正!
%% add_clover.m
function res = add_clover(p,q)
res = p + q;
end
%% minus_clover.m
function res = minus_clover(p,q)
res = p - q;
end
%% multiply_clover.m
function res = multiply_clover(p,q)
res = p * q;
end
%% div_clover.m
function res = div_clover(p,q)
if(abs(q) > 1e-6) % 除数不为0
res = p / q;
else
res = 0;
end
end