嘗試在Java中調用MATLAB!
1)實驗環境
機器中裝有Eclipse和Matlab,並配置好環境變量。
小魏裝的是Eclipse 3.7.1 和Matlab7.11.0 (R2010b)。當然要裝有JDK,Eclipse的配置不多說了,網上有許多,至於Matlab,最好在classpath中添加:
%matlabInstallRoot%\R2010b\toolbox\javabuilder\jar\javabuilder.jar
這里說“最好”,是因為不添加,只在項目中引用,貌似也是可行的。
P.S. 如果是VC++中調用MATLAB,一定要在path中添加:
%matlabInstallRoot%\R2010b\bin\win32
2)將Matlab的m文件包裝成java類
這里我們使用Matlab自帶的例子,在路徑
%matlabInstallRoot%\R2010b\toolbox\javabuilder\Examples\PlotExample
下,此處是m文件:
function drawplot(x, y)
plot(x, y); %%使用matlab函數plot()作圖
function drawplot(x, y)
plot(x, y); %%使用matlab函數plot()作圖
在MATLAB中Command窗口中輸入deploytool調出部署工具DeploymentTool。新建一個工程,輸入工程名plotdemo.prj,選擇路徑,並選擇Target為 Java Package。
在MATLAB右側會出現我們新建的工程。
將剛剛編寫的m文件直接拖拽進去,並重命名類名為plotter,點擊Build編譯:
完成之后(過程有點長~)就會在我們選擇的路徑下看到 plotdemo的文件夾。
3)在java工程中調用matlab生成的類
新建工程TryMatlabPlot,並右鍵在Build Path中引用相關的包
%matlabInstallRoot%\R2010b\toolbox\javabuilder\jar\jarbuilder.jar
以及剛剛生成的plotdemo\distrib\plotdemo.jar
Java類文件的代碼為:
package lwei.test.matlab;
import com.mathworks.toolbox.javabuilder.*;
import plotdemo.*;
/***
* 通過調用matlab中的函數在窗口中作圖
* @Author: lwei
*/
class createplot
{
public static void main(String[] args)
{
MWNumericArray x = null; //存放x值的數組
MWNumericArray y = null; //存放y值的數組
plotter thePlot = null; //plotter類的實例
int n = 20; //作圖點數
try
{
//分配x、y的值
int[] dims = {1, n};
x = MWNumericArray.newInstance(dims,
MWClassID.DOUBLE, MWComplexity.REAL);
y = MWNumericArray.newInstance(dims,
MWClassID.DOUBLE, MWComplexity.REAL);
//定義 y = x^2
for (int i = 1; i <= n; i++)
{
x.set(i, i);
y.set(i, i*i);
}
//初始化plotter的對象
thePlot = new plotter();
//作圖
thePlot.drawplot(x, y);
thePlot.waitForFigures();
}
catch (Exception e)
{
System.out.println("Exception: " + e.toString());
}
finally
{
//釋放本地資源
MWArray.disposeArray(x);
MWArray.disposeArray(y);
if (thePlot != null)
thePlot.dispose();
}
}
}
package lwei.test.matlab;
import com.mathworks.toolbox.javabuilder.*;
import plotdemo.*;
/***
* 通過調用matlab中的函數在窗口中作圖
* @Author: lwei
*/
class createplot
{
public static void main(String[] args)
{
MWNumericArray x = null; //存放x值的數組
MWNumericArray y = null; //存放y值的數組
plotter thePlot = null; //plotter類的實例
int n = 20; //作圖點數
try
{
//分配x、y的值
int[] dims = {1, n};
x = MWNumericArray.newInstance(dims,
MWClassID.DOUBLE, MWComplexity.REAL);
y = MWNumericArray.newInstance(dims,
MWClassID.DOUBLE, MWComplexity.REAL);
//定義 y = x^2
for (int i = 1; i <= n; i++)
{
x.set(i, i);
y.set(i, i*i);
}
//初始化plotter的對象
thePlot = new plotter();
//作圖
thePlot.drawplot(x, y);
thePlot.waitForFigures();
}
catch (Exception e)
{
System.out.println("Exception: " + e.toString());
}
finally
{
//釋放本地資源
MWArray.disposeArray(x);
MWArray.disposeArray(y);
if (thePlot != null)
thePlot.dispose();
}
}
}
運行程序,結果如圖: