如何运行Matlab编译的Java函数?

时间:2017-03-10 19:12:49

标签: java matlab matlab-deployment matlab-compiler

我用Matlab编译器SDK编译了一个Matlab脚本到Java。 一切都很好。 Matlab生成了一个Jar.file,我把它包含在eclipse中的Java Project中。 现在我的问题是,matlab脚本包含一个复杂的算法函数。 现在可以在Java中调用此函数。 我需要读取10个csv文件,每个文件包含带有4列数据的10.000行,现在将相同的参数传递给我在matlab中的java函数。

我的csv文件的方式是:4列,10.000行。

a x y z
1 3 4 5
4 4 5 6
. . . .

首先在变量中的单独函数中读取数据。也得到a的长度。

[a,x,y,z] = readData(['csv\' files(1).name]);
sizeOfa=length(a);

在我用不同的列调用我的算法函数3次之后,也传递了a的大小。

   algorithm(a,x,sizeOfa);
   algorithm(a,y,sizeOfa);
   algorithm(a,z,sizeOfa);

在此之后我的算法的定义来了。

function y= algorithm(x,y,sizeofX)
   do some stuff...
   end

现在我的问题:

我从csv文件读取的值存储在Matlab中的10000 * 1矩阵中。 如果我想在Java中调用相同的函数。 我应该把什么传递给我的功能? 我可以在单独的数组中读取我的值a,x,y,z。 但是一个数组是1 * 10000。 我可以通过一个阵列吗? readfile函数没有编译成java,我刚编译了算法函数。

1 个答案:

答案 0 :(得分:1)

我为我的问题找到了两个解决方案。

MATLAB解决方案

我的Matlab函数使用10000 * 1数组。这是一个像这样的矩阵

1
2
3
4
..
10000

传递给已编译函数的Java数组会有所不同。看起来像这样

1 2 3 4 .. 10000

现在要解决的问题是,我转发传递给我的matlab函数的参数。

   function y = algorithm(a,z,sizeOfa)
    {
      a=a'; // transpose 
      z=z'; //transpose
       ...
         //your stuff

    }

现在,如果我将数组传递给我的java函数,那么数组将在内部转置为矩阵。

编辑: 发现更好的解决方案

Java解决方案

double[] t;  // your Double Array

int tSize= t.length; // get Size

MWNumericArray result;

result= MWNumericArray.newInstance(new int[]{tSize,1},t,MWClassID.DOUBLE);

将结果传递给您的函数,它将转换为n * 1数组,其中n是数组的大小。