概述
C# Matlab 混合编程实验
工程中有些测试需要对数据进行处理,并输出图表计算。而Matlab在数据处理和图形输出上有优势,相比而言C#等编程实现图表较困难。
Matlab中已经提供封装成库供其它语言调用的功能。由于Matlab内变量定义类型与其它语言不一致,Matlab提供了相关参数的转换类和函数。供C#转换的基类的MWArray,继承的有MWNumericArray、MWCellArray等,包含在MWArray.dll中。
实现过程
1.Matlab中创建供C#调用的类,添加函数,并生成dll;
2.创建使用的C#工程;
3.复制需要使用的Matlab库和生成的库至C#工程执行目录,并引用Matlab新生成的Dll;
4.C#工程中调用Matlab的Dll。
具体实现举例
本示例实现C#调用Matlab中的库,实现弹出提示信息。
Matlab版本:R2012a 64位
VS版本:2010
1.Matlab中创建供C#调用的类,添加函数,并生成dll
如下图,打开Matlab,File–New–Deployment Project…。
弹出创建工程窗体,本例定义工程名称为“MCTForNet.prj”,Type选择“.Net Assembly”,如下图:
之后,Matlab界面会新增“.Net Assembly”的项目页,如下图:
点击“Add Class”创建类,本例重命名类为“MCTForNetMain”;点击“Add files”,添加需要调用的Matlab函数文件。本例中”ShowFigTest.m”简单实现读取传入的文件名数组,并弹出文件数组个数。代码如下:
function ShowFigTest( rawFiles )
fileCount=length(rawFiles);
msgbox(num2str(fileCount), '关于', 'help');
End
点击“Build”按键,生成dll,目录为:…MCTForNetMCTForNetdistrib
2.创建使用的C#工程
VS下,创建项目“MatLabTest1”,项目类型为”Windows Forms Application”。
由于Matlab生成的dll为x64,故项目平台需要设置为x64位。
3.复制需要使用的Matlab库和生成的库至C#工程执行目录,并引用Matlab新生成的Dll
复制C#中需要使用的Matlab库MWArray.dll至C#工程执行目录下。
路径在Matlab安装目录下:…MATLABR2012atoolboxdotnetbuilderbinwin64v2.0
复制在步骤1中生成的dll至C#工程执行目录下。
4.C#工程中调用Matlab的Dll
C#工程中,引用MWArray.dll和生成的MCTForNet.dll;
添加调用函数。本例用涉及把字符串数组作为参数传递给Matlab函数,使用MWCellArray类,见函数SArrayToMWCellArray:
public void ShowFig()
{
string[] files = System.IO.Directory.GetFiles(@"D:DownLoad");
MWCellArray mwA = SArrayToMWCellArray(files);
MCTForNetMain mctForNetM = new MCTForNetMain();
mctForNetM.ShowFigTest(mwA);
}
private MWCellArray SArrayToMWCellArray(string[] sArray)
{
MWCellArray mwA = new MWCellArray(1, sArray.Length);
for (int i = 0; i < sArray.Length; i++)
{
mwA[1, i + 1] = sArray[i];
}
return mwA;
}
数值数组赋值举例:
MWNumericArray mwRange = new int[] {1, 16, 169, 192};
调用ShowFig()函数,生成弹出窗体:
Matlab的类调用较耗时。
最后
以上就是怕孤独硬币为你收集整理的C# Matlab 混合编程学习C# Matlab 混合编程实验的全部内容,希望文章能够帮你解决C# Matlab 混合编程学习C# Matlab 混合编程实验所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复