若要在c#中生成矩阵值到MATLAB中运算并返回c#,必然不能缺少中间类,MWArray类型是Matlab中的数据类型,MWNumericArray类型是Matlab和C#的中间类型。我们在C#中一般转换为MWNumericArray类型,这个类型可以隐式的转换至MWArray格式,也转换至int,double,float格式。
1. C#数据类型到M类型,此方向转换十分简单。
一切C#都要转换成MWArray类型才能作为参数调用MATLAB语言函数。
下表列出了常用的将.NET数据类型转换为MATLAB类型的数据类型映射规则,来源点击查看:
.NET Type | MWArray Type | MATLAB Type |
---|---|---|
System.Double | MWNumericArray | double |
System.Float | MWNumericArray | single |
System.Byte | MWNumericArray | int8 |
System.Short | MWNumericArray | int16 |
System.Int32 | MWNumericArray | int32 |
System.Int64 | MWNumericArray | Int64 |
System.Char | MWCharArray | Char |
System.String | MWCharArray | Char |
System.Boolean | MWLogicalArray | logical |
如果C#不是数组到M类型:
如果C#是数组到M类型:
直接赋值给MWNumericArray变量;
赋值给MWArray变量,则在前面加上类型转换如:(MWNumericArray)进行强制转换。
MWArray是总类型,其它的以MW开头,以Array结尾的变量类型都可以直接对它进行赋值或取值
注意这里可能会出现的问题:
解决方法是是将项目的属性中的平台目标你自己电脑的位数(我是改成x64).
MWNumericArray vsg = new int[] { 1, 2, 3 };
2.M类型到C#数据类型
先将输出参数强制转化为MWNumericArray类型,再调用各种转化函数。
public Array ToArray(MWArrayComponent component)M类型转换成C#的Array类型,然后可以直接转换成其它类型的数组。
public Array ToVector(MWArrayComponent component)将M类型转换成C#的Array类型,然后可以直接转换成其它类型的数组。
public byte ToScalarByte() ; 将M类型转换成c#的字节类型
public double ToScalarDouble(); 将M类型转换成c#的双精度类型
public float ToScalarFloat(); 将M类型转换成c#的单精度类型
public override string ToString();将M类型转换为字符串类型
double[,] Temp1 = new double[1,3];
Temp1 = (double[,])((MWNumericArray)mwArgout[1]).ToArray(MWArrayComponent.Real);
double[] S1 = new double[2];
S1 = (double[])((MWNumericArray)mwArgout[1]).ToVector(MWArrayComponent.Real);
double temp = ((MWNumericArray)(mwArgout[0])).ToScalarDouble();
string arror = mwArgout[2].ToString()
思考:调用MATLAB中的函数如果输出2个数组,C#该如何解决?参考案例如下:
MWArray[] agrsOut = new MWArray[2];//两个输出参数,一定要写数量
airPLS_Class airplas = new airPLS_Class();//这个airPLS_Class是我自己的,大家的肯定不一样
agrsOut= airplas.airPLS(2, x_input, lambda, order, wep, p, itermax);//输入2表示有两个输出矩阵,根据原先m文件的定义
MWNumericArray real_spectrumMW = agrsOut[0] as MWNumericArray;
MWNumericArray base_line_arrayMW = agrsOut[1] as MWNumericArray;
Array c = real_spectrumMW.ToArray();
double[,] real_spectrum = (double[,])c;
//你也可以直接写成double[,] real_spectrum = (double[,])real_spectrumMW.ToArray();
Array d = base_line_arrayMW.ToArray();
double[,] base_line_array = (double[,])d;
2.将matlab文件夹下的函数文件 fitcurve.dll,FWHM.dll(这些是你在MATLAB中的函数)和D:\Program Files\MATLAB\R2013a\toolbox\dotnetbuilder\bin\win64\v2.0(前边为matlab的安装路径)文件夹下的MWArray.dll拷贝到VS工程(CallMatlabDllApp)下的\bin\Debug文件夹下
MATLAB的打包
c#要使用fitcurve.dll和Fwhm.dll文件,要先经过matlab打包
1.建立一个fitcurve.m函数,在命令行输入 deploytool
选择第三个Library Compiler .
最后点击Package 打包完成后选择fitcure.dll文件
matlab函数转成c#
MWNumericArray Constructor
从C#向Matlab的数据类型转化
BitConverter