91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java怎么調用Matlab程序

發布時間:2021-09-06 13:43:21 來源:億速云 閱讀:150 作者:小新 欄目:開發技術

這篇文章主要為大家展示了“Java怎么調用Matlab程序”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“Java怎么調用Matlab程序”這篇文章吧。

Java如何調用Matlab程序

背景

Matlab可以輕易處理非常復雜的數學計算,Java具有多變的應用場景,如Web開發。本文講述如何將兩者優勢結合起來,基本思路是將Matlab核心程序打包成Jar,供普通的Java程序調用。

具體步驟

1. 檢查Matlab內置的Java版本和系統安裝的Java版本是否一致?

檢查MATLAB內置的Java版本

Java怎么調用Matlab程序

檢查系統的Java版本

Java怎么調用Matlab程序

2. 準備一份要調用的Matlab代碼

為了測試各種數據類型(如Matlab的矩陣數據類型)的使用,本文采用稍稍復雜的Matlab測試程序:基于測距的網絡定位。其包含多個M文件,其中主函數代碼如下。輸入參數7個:gCov是矩陣,其他為標量。輸出參數2個,都是矩陣。

function [ nodeLoc, pMds ] = main_localization( N,  dim, space, nGps, gCov, sigma, numMiss )
    nodeLoc = diag(ones(dim,1)*space)*(rand(dim,N)-0.5);
    dltSec  = zeros(N,1);
    
    achrIdx = 1:nGps;
    covMats = zeros(dim,dim,nGps);
    for n = 1:nGps
        covMats(:,:,n) = gCov;
    end
    
    [CT,CR] = round_robin(nodeLoc,dltSec,sigma);
    [A,~,y] = gen_Ay(CT,CR,ones(N));
    
    connMat = gen_connMat(N,numMiss);
    
    dltEst = est_dlt_ls(A,y,connMat);
    distVec = y-A*dltEst;
    
    distMat = diag_vec2mat(distVec);
    edm = distMat.^2;
    
    pGps = mvnrnd(nodeLoc(:,achrIdx)',gCov)';
    
    pMds = classic_mds(edm, dim);
    pMds = orthogonal_procrustes(pMds, pGps, achrIdx);
end

其他多個M文件列表如下圖所示:

Java怎么調用Matlab程序

3. 將Matlab代碼打包成Jar包

(1) 在Matlab命令行窗口輸入deploytool指令,喚起打包部署工具

Java怎么調用Matlab程序

(2) 配置打包類型、包名、類名;選擇待打包的M的文件

Java怎么調用Matlab程序

(3) 等待打包完成,應有3個對勾


Java怎么調用Matlab程序

(4) 打包生成的工程目錄結構如下

Java怎么調用Matlab程序

4. 新建Java項目,調用由Matlab得到的Jar包

(1) Eclipse新建Java項目(不贅述)

(2) 添加兩個Jar包到Java項目中

Matlab安裝目錄下的Jar包:...\MATLAB\R2017a\toolbox\javabuilder\jar\javabuilder.jar前面M文件生成的Jar包:...\localization_matlab\for_redistribution_files_only\localization_matlab.jar


Java怎么調用Matlab程序

(3) 寫Java程序調用Matlab生成的Jar包,源碼如下:

package com.csrl.localization;
import com.mathworks.toolbox.javabuilder.MWClassID;
import com.mathworks.toolbox.javabuilder.MWException;
import com.mathworks.toolbox.javabuilder.MWNumericArray;
import localization_matlab.MdsLocalization;
public class TestLocalization {

    public static void main(String[] args) {
        try {
            MdsLocalization matrixCompletion = new MdsLocalization();

            double N = 10;
            double dim = 2;
            double space = 500;
            double sigma = 2;
            double nGps = 5;
            double numMiss = 0;
            double[][] gCovArr = {{1,0},{0,1}};
            MWNumericArray gCov = new MWNumericArray(gCovArr,MWClassID.DOUBLE);	 // 將二維數組轉化為矩陣

			// 第一個參數“2”代表原Matlab函數輸出參數的個數,后面的都是原Mat了吧函數輸入參數;輸出參數用Object數組保存
            Object[] result = matrixCompletion.main_localization(2, N,  dim, space, nGps, gCov, sigma, numMiss);

            MWNumericArray data = (MWNumericArray) result[0];					// 第一個輸出參數
            double[][] nodeLoc = (double[][]) data.toDoubleArray();	            // 將矩陣轉化為二維數組

            data = (MWNumericArray) result[1];									// 第二個輸出參數
            double[][] pMds = (double[][]) data.toDoubleArray();                // 將矩陣轉化為二維數組

            System.out.println(result[0]);										// 同Matlab輸出格式,輸出矩陣
            System.out.println(result[1]);

            System.out.println(nodeLoc[0][0]);									// 通過二維數組索引輸出矩陣中某個元素
            System.out.println(pMds[0][0]);

        } catch (MWException e) {
            e.printStackTrace();
        }
    }
}

Java調用Matlab函數筆記

筆記是記錄通過java如何調用matlab函數:

1.在命令行中輸入deploytool

Java怎么調用Matlab程序

2.點擊上圖中標有紅框的部分

3.選擇javapackage,依次填寫name,classname

Java怎么調用Matlab程序

在package的過程中可能會出現mcc錯誤的情況

4.編寫java類,進行測試

import com.mathworks.toolbox.javabuilder.MWException;
import computef.ComputeF;
public class matlab2javaTest {
    public static void main(String args[]) throws MWException {
        System.out.println( System.getProperty("java.library.path"));
        ComputeF cl = new ComputeF();
        cl.computef(0);
    }
}

第一次運行時,會報如下錯誤

Exception in thread “main” java.lang.UnsatisfiedLinkError: Failed to find the library mclmcrrt7_14.dll, required by MATLAB Builder JA, on java.library.path.
This library is typically installed along with MATLAB or the MCR, its absence may indicate an issue with that installation or the current path configuration.
The MCR version that this component is trying to use is: 7.14.

錯誤原因可能是:path中沒有matlab的路徑,即找不到mclmcrrt7_14.dll這個文件,添加matlab路徑到path中就可以了

5.調用有返回結果的函數

m文件內容:

function [f,c]=computef(key)

調用computerf函數時

Object[] result = null;
result = cl.computef(2,0);//第一個參數是返回結果的個數,第二個參數是實際參數

以上是“Java怎么調用Matlab程序”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

镇宁| 定边县| 明水县| 鹰潭市| 康马县| 屏东县| 镇巴县| 隆安县| 株洲市| 安义县| 石嘴山市| 兰溪市| 青浦区| 南华县| 安远县| 沙坪坝区| 铁力市| 甘谷县| 中卫市| 霍林郭勒市| 寿宁县| 绥宁县| 武宣县| 合作市| 彭山县| 梁平县| 嵩明县| 会东县| 梧州市| 颍上县| 伊春市| 阳泉市| 旬阳县| 遂溪县| 松原市| 新源县| 思南县| 利辛县| 余庆县| 满洲里市| 错那县|