標籤:matlab main pos .so ber pre win style java
環境:
系統: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
至此配置完成,運行正常。
java調用matlab繪圖