環境:
系統:kali linux 2017
java: 1.8
matlab:R2016b
idea:2016
1.編寫matlab腳本:
drawplot.m
%畫圖 自定義函數drawplot 參數 x y function drawplot(x, y) plot(x, y); %%使用matlab函數plot()作圖 grid on %網格顯示 xlabel('X軸值') ylabel('Y軸值') title('Java調用MatLab作圖例子')
腳本保存到指定文件夾
在matlab命令窗口:
>> deploytool
選擇Liberary Compiler
TYPE:java package
EXPORTED:選擇drawplot.m
修改類名為:Plotter
點擊package
文件夾下面會多出剛才的工程,里面有我們要要用的jar(xxx.jar)
在idea下新建工程:javaMatlab
libs文件夾下有兩個依賴包:
---xxx.jar
---javabuilder,jar (在matlab安裝目錄\toolbox\javabuilder\jar\jarbuilder.jar)
package com.xh.matlab4java; import com.mathworks.toolbox.javabuilder.MWArray; import com.mathworks.toolbox.javabuilder.MWClassID; import com.mathworks.toolbox.javabuilder.MWComplexity; import com.mathworks.toolbox.javabuilder.MWNumericArray; import plotdemon.Plotter; /** * Created by root on 8/25/17. */ public class PlotTest { public static void main(String[] args) { // TODO Auto-generated method stub MWNumericArray x = null; // 存放x值的數組 MWNumericArray y = null; // 存放y值的數組 Plotter thePlot = null; // plotter類的實例(在MatLab編譯時,新建的類) 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(); } } }
注意:
選擇 Edit Configurations
添加運行環境參數
LD_LIBRARY_PATH=/opt/Matlab/runtime/glnxa64
否則會報錯:不能鏈接到 libmwmclmcrrt.so.9.1
至此配置完成,運行正常。