欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java如何調(diào)用Matlab程序

 更新時(shí)間:2021年09月06日 11:52:30   作者:Macrocell  
這篇文章主要介紹了Java如何調(diào)用Matlab程序的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

Java如何調(diào)用Matlab程序

背景

Matlab可以輕易處理非常復(fù)雜的數(shù)學(xué)計(jì)算,Java具有多變的應(yīng)用場(chǎng)景,如Web開發(fā)。本文講述如何將兩者優(yōu)勢(shì)結(jié)合起來,基本思路是將Matlab核心程序打包成Jar,供普通的Java程序調(diào)用。

具體步驟

1. 檢查Matlab內(nèi)置的Java版本和系統(tǒng)安裝的Java版本是否一致?

檢查MATLAB內(nèi)置的Java版本

在這里插入圖片描述

檢查系統(tǒng)的Java版本

在這里插入圖片描述

2. 準(zhǔn)備一份要調(diào)用的Matlab代碼

為了測(cè)試各種數(shù)據(jù)類型(如Matlab的矩陣數(shù)據(jù)類型)的使用,本文采用稍稍復(fù)雜的Matlab測(cè)試程序:基于測(cè)距的網(wǎng)絡(luò)定位。其包含多個(gè)M文件,其中主函數(shù)代碼如下。輸入?yún)?shù)7個(gè):gCov是矩陣,其他為標(biāo)量。輸出參數(shù)2個(gè),都是矩陣。

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

其他多個(gè)M文件列表如下圖所示:

在這里插入圖片描述

3. 將Matlab代碼打包成Jar包

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

在這里插入圖片描述

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

(3) 等待打包完成,應(yīng)有3個(gè)對(duì)勾


在這里插入圖片描述

(4) 打包生成的工程目錄結(jié)構(gòu)如下

在這里插入圖片描述

4. 新建Java項(xiàng)目,調(diào)用由Matlab得到的Jar包

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

(2) 添加兩個(gè)Jar包到Java項(xiàng)目中

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


在這里插入圖片描述

(3) 寫Java程序調(diào)用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);	 // 將二維數(shù)組轉(zhuǎn)化為矩陣

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

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

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

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

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

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

Java調(diào)用Matlab函數(shù)筆記

筆記是記錄通過java如何調(diào)用matlab函數(shù):

1.在命令行中輸入deploytool

這里寫圖片描述

2.點(diǎn)擊上圖中標(biāo)有紅框的部分

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

這里寫圖片描述

在package的過程中可能會(huì)出現(xiàn)mcc錯(cuò)誤的情況

4.編寫java類,進(jìn)行測(cè)試

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);
    }
}

第一次運(yùn)行時(shí),會(huì)報(bào)如下錯(cuò)誤

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.

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

5.調(diào)用有返回結(jié)果的函數(shù)

m文件內(nèi)容:

function [f,c]=computef(key) 

調(diào)用computerf函數(shù)時(shí)

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

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • SpringMVC 傳日期參數(shù)到后臺(tái)的實(shí)例講解

    SpringMVC 傳日期參數(shù)到后臺(tái)的實(shí)例講解

    下面小編就為大家分享一篇SpringMVC 傳日期參數(shù)到后臺(tái)的實(shí)例講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2017-12-12
  • Java使用Kaptcha實(shí)現(xiàn)簡單的驗(yàn)證碼生成器

    Java使用Kaptcha實(shí)現(xiàn)簡單的驗(yàn)證碼生成器

    這篇文章主要為大家詳細(xì)介紹了Java如何使用Kaptcha實(shí)現(xiàn)簡單的驗(yàn)證碼生成器,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,有需要的小伙伴可以參考下
    2024-02-02
  • 常見的排序算法,一篇就夠了

    常見的排序算法,一篇就夠了

    這篇文章主要介紹了一些常用排序算法整理,插入排序算法、直接插入排序、希爾排序、選擇排序、冒泡排序等排序,需要的朋友可以參考下
    2021-07-07
  • maven下mybatis-plus和pagehelp沖突問題的解決方法

    maven下mybatis-plus和pagehelp沖突問題的解決方法

    這篇文章主要介紹了maven下mybatis-plus和pagehelp沖突的解決方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-08-08
  • Java?輪詢鎖使用時(shí)遇到問題解決方案

    Java?輪詢鎖使用時(shí)遇到問題解決方案

    這篇文章主要介紹了Java?輪詢鎖使用時(shí)遇到問題解決方案,當(dāng)我們遇到死鎖之后,除了可以手動(dòng)重啟程序解決之外,還可以考慮使用順序鎖和輪詢鎖,但是過程也會(huì)遇到一些問題,接下來我們一起進(jìn)入下面文章了解解決方案,需要的小伙伴可以參考一下
    2022-05-05
  • Mapstruct對(duì)象插入數(shù)據(jù)庫某個(gè)字段總是為空的bug詳解

    Mapstruct對(duì)象插入數(shù)據(jù)庫某個(gè)字段總是為空的bug詳解

    這篇文章主要為大家介紹了在一次需求開發(fā)Mapstruct中對(duì)象插入數(shù)據(jù)庫某個(gè)字段總是為空的bug問題詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • SpringBoot獲取配置文件的簡單實(shí)現(xiàn)方法

    SpringBoot獲取配置文件的簡單實(shí)現(xiàn)方法

    這篇文章主要給大家介紹了關(guān)于SpringBoot如何獲取配置文件的簡單實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Spring Boot具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • java環(huán)境變量配置和adb的配置教程詳解

    java環(huán)境變量配置和adb的配置教程詳解

    這篇文章主要介紹了java環(huán)境變量配置和adb的配置教程,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-05-05
  • Java的HashTable源碼解讀

    Java的HashTable源碼解讀

    這篇文章主要介紹了Java的HashTable源碼解讀,HashTable繼承了Dictionary類,提供了一些字典相關(guān)的基本功能如添加、刪除、判空、獲取元素?cái)?shù)量等,需要的朋友可以參考下
    2023-12-12
  • Java設(shè)計(jì)模式以虹貓藍(lán)兔的故事講解橋接模式

    Java設(shè)計(jì)模式以虹貓藍(lán)兔的故事講解橋接模式

    橋接是用于把抽象化與實(shí)現(xiàn)化解耦,使二者可以獨(dú)立變化。這種類型的設(shè)計(jì)模式屬于結(jié)構(gòu)型模式,它通過提供抽象化和實(shí)現(xiàn)化之間的橋接結(jié)構(gòu),來實(shí)現(xiàn)二者的解耦。這種模式涉及到一個(gè)作為橋接的接口,使得實(shí)體類的功能獨(dú)立于接口實(shí)現(xiàn)類。這兩種類型的類可被結(jié)構(gòu)化改變而互不影響
    2022-04-04

最新評(píng)論