关于Java调用Matlab程序
一、基本步骤
- 编写M文件
- 生成Java调用包
在Matlab命令中输入deploytool,新建一个Java Package工程,在其中可以新建类,在类中添加M文件,点击bulid,生成供Java调用的Jar包。添加到类中的M函数成为该类的成员函数。
注:需要在操作系统环境变量path中添加javac的位置。
尽量避免将工程放在中文目录下,否则build容易出现错误。
- 编写Java调用程序
调用类的函数时,第一个输入参数是返回值的个数,然后是原来的参数列表。返回值为Object[]类型。具体可参照第二步骤生成的文档。
二、注意事项:
Java调用与在Matlab命令窗口调用m函数结果有所不同。
三、示例:
Matlab程序:
function output = plotXY(x,y)
%UNTITLED Summary of this function goes here
% Detailed explanation goes here
plot(x,y);
output=x+y;
end
Java程序:
import java.util.Scanner;
import PlotXY.*;
import com.mathworks.toolbox.javabuilder.*;
public class DrawPlot {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Plot xy=null;
Object[] result;
MWNumericArray resultX;
MWNumericArray x = null; /* Array of x values */
MWNumericArray y = null; /* Array of y values */
int n = 5;
Scanner sc = new Scanner(System.in);
try {
/* Allocate arrays for x and y values */
int[] dims = { 1, n };
x = MWNumericArray.newInstance(dims, MWClassID.DOUBLE,
MWComplexity.REAL);
y = MWNumericArray.newInstance(dims, MWClassID.DOUBLE,
MWComplexity.REAL);
System.out.println("Please Input X-Y: ");
/* Set values */
for (int i = 1; i <= n; i++) {
System.out.println("Input X-Y " + i + ": ");
x.set(i, sc.nextDouble());
y.set(i, sc.nextDouble());
}
xy = new Plot();
result = xy.plotXY(1 ,x , y);
resultX=(MWNumericArray)result[0];
System.out.println(result[0]);
for (int i = 1; i <= n; i++) {
System.out.println(resultX.getFloat(i));
}
xy.waitForFigures();
xy.dispose();
} catch (Exception e) {
e.printStackTrace();
} finally {
/* Free native resources */
MWArray.disposeArray(x);
MWArray.disposeArray(y);
if (xy != null)
xy.dispose();
}
}
}