Matlab7.5之后,支持生成.NET类型的组件,供C#等语言调用。
我现在使用matlab 2009b和VS2008,下面说下的具体操作
----------
1.设置好matlab2009b的编译器之后,把写的.m文件通过deploytool--。net assembly转成test.dll文件
2.在VS2008的c#里面,调用test.dll
2.1 添加引用--test.dll和matlab相关的dll
2.2 读取excel文件里的数据
3. 运行程序,计算,得到的结果不对,最终结果全是nan(C#里面是不是没有nan)
下面是具体的代码
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{ MWArray ma = 1;
MWArray mb = 2;
add.addd addd=new addd();//这里的add类,里面有个addd函数(最简单的加法计算,用来测试)
MWArray mr= addd.add(ma, mb);//计算1+2=3---通过
Workbook wba = Workbook.getWorkbook(@"C:\Documents and Settings\win\My Documents\MATLAB\jd\aa.xls");//读取excel表a
int row_a = wba.Sheets[0].Rows;
int col_a = wba.Sheets[0].Columns;
double[,] data_a = new double[row_a, col_a]; Workbook wbb= Workbook.getWorkbook(@"C:\Documents and Settings\win\My Documents\MATLAB\jd\b.xls")]; //读取excel表b int row_b = wbb.Sheets[0].Rows;
int col_b = wbb.Sheets[0].Columns;
double[,] data_b = new double[row_b, col_b; for (int irow = 0; irow < row_a; irow++)
{
for (int icol = 0; icol < col_a; icol++)
{
Cell cella = wba.Sheets[0].getCell(icol, irow);
data_a[irow, icol] = (double) cella.Value;
} }//把excel表a里的所有数据放在data_a二维数组里
MWNumericArray mw_a = data_a;
for (int irow = 0; irow < row_b; irow++)
{
for (int icol = 0; icol < col_b; icol++)
{
Cell cellb = wbb.Sheets[0].getCell(icol, irow);
data_b[irow, icol] = (double)cellb.Value;
}
}//把excel表b里的所有数据放在data_b二维数组里
MWNumericArray mw_b = data_b;
MWArray mwArray_a = mw_a;
MWArray mwArray_b = mw_b;//把二维数组的数据转换成matlab与c#之间接口要求的数据类型MWArray int[] a1 = mwArray_a.Dimensions;
int[] b1 = mwArray_b.Dimensions;
jdd.jdd2 jd2=new jdd2();//声明我在jdd类里的实例
//到这里所有的过程和结果还跟想的是一样的!
MWArray r= jd2.dlltest(mwArray_a, mwArray_b);//dltest是里面的一个函数,调用完返回值全是NaN,
//C#没有Nan吧,在matlab里面nan是说不是一个数值,或者无穷大。
//我想请问各位高手问题出哪里了?有没有办法单步执行去看看调用dlltest的过程?去看看问题出哪里了的??
//或者有什么好的建议来检查错误,谢谢
}
}
}
我现在使用matlab 2009b和VS2008,下面说下的具体操作
----------
1.设置好matlab2009b的编译器之后,把写的.m文件通过deploytool--。net assembly转成test.dll文件
2.在VS2008的c#里面,调用test.dll
2.1 添加引用--test.dll和matlab相关的dll
2.2 读取excel文件里的数据
3. 运行程序,计算,得到的结果不对,最终结果全是nan(C#里面是不是没有nan)
下面是具体的代码
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{ MWArray ma = 1;
MWArray mb = 2;
add.addd addd=new addd();//这里的add类,里面有个addd函数(最简单的加法计算,用来测试)
MWArray mr= addd.add(ma, mb);//计算1+2=3---通过
Workbook wba = Workbook.getWorkbook(@"C:\Documents and Settings\win\My Documents\MATLAB\jd\aa.xls");//读取excel表a
int row_a = wba.Sheets[0].Rows;
int col_a = wba.Sheets[0].Columns;
double[,] data_a = new double[row_a, col_a]; Workbook wbb= Workbook.getWorkbook(@"C:\Documents and Settings\win\My Documents\MATLAB\jd\b.xls")]; //读取excel表b int row_b = wbb.Sheets[0].Rows;
int col_b = wbb.Sheets[0].Columns;
double[,] data_b = new double[row_b, col_b; for (int irow = 0; irow < row_a; irow++)
{
for (int icol = 0; icol < col_a; icol++)
{
Cell cella = wba.Sheets[0].getCell(icol, irow);
data_a[irow, icol] = (double) cella.Value;
} }//把excel表a里的所有数据放在data_a二维数组里
MWNumericArray mw_a = data_a;
for (int irow = 0; irow < row_b; irow++)
{
for (int icol = 0; icol < col_b; icol++)
{
Cell cellb = wbb.Sheets[0].getCell(icol, irow);
data_b[irow, icol] = (double)cellb.Value;
}
}//把excel表b里的所有数据放在data_b二维数组里
MWNumericArray mw_b = data_b;
MWArray mwArray_a = mw_a;
MWArray mwArray_b = mw_b;//把二维数组的数据转换成matlab与c#之间接口要求的数据类型MWArray int[] a1 = mwArray_a.Dimensions;
int[] b1 = mwArray_b.Dimensions;
jdd.jdd2 jd2=new jdd2();//声明我在jdd类里的实例
//到这里所有的过程和结果还跟想的是一样的!
MWArray r= jd2.dlltest(mwArray_a, mwArray_b);//dltest是里面的一个函数,调用完返回值全是NaN,
//C#没有Nan吧,在matlab里面nan是说不是一个数值,或者无穷大。
//我想请问各位高手问题出哪里了?有没有办法单步执行去看看调用dlltest的过程?去看看问题出哪里了的??
//或者有什么好的建议来检查错误,谢谢
}
}
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货