最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

背景

Matlab可以輕易處理非常復(fù)雜的數(shù)學(xué)計算,Java具有多變的應(yīng)用場景,如Web開發(fā)。本文講述如何將兩者優(yōu)勢結(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代碼

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

在這里插入圖片描述

3. 將Matlab代碼打包成Jar包

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

在這里插入圖片描述

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

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


在這里插入圖片描述

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

在這里插入圖片描述

4. 新建Java項目,調(diào)用由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


在這里插入圖片描述

(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)化為矩陣

			// 第一個參數(shù)“2”代表原Matlab函數(shù)輸出參數(shù)的個數(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];					// 第一個輸出參數(shù)
            double[][] nodeLoc = (double[][]) data.toDoubleArray();	            // 將矩陣轉(zhuǎn)化為二維數(shù)組

            data = (MWNumericArray) result[1];									// 第二個輸出參數(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ù)組索引輸出矩陣中某個元素
            System.out.println(pMds[0][0]);

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

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

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

1.在命令行中輸入deploytool

這里寫圖片描述

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

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

這里寫圖片描述

在package的過程中可能會出現(xiàn)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.調(diào)用有返回結(jié)果的函數(shù)

m文件內(nèi)容:

function [f,c]=computef(key) 

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

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

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

相關(guān)文章

  • 關(guān)于Springboot+gateway整合依賴并處理依賴沖突問題

    關(guān)于Springboot+gateway整合依賴并處理依賴沖突問題

    這篇文章主要介紹了Springboot+gateway整合依賴并處理依賴沖突問題,給大家提到了spring boot版本和spring cloud版本,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-01-01
  • 啟用Spring事務(wù)管理@EnableTransactionManagement示例解析

    啟用Spring事務(wù)管理@EnableTransactionManagement示例解析

    這篇文章主要為大家介紹了啟用Spring事務(wù)管理@EnableTransactionManagement示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-09-09
  • mybatis-plus中更新null值的問題解決

    mybatis-plus中更新null值的問題解決

    本文主要介紹 mybatis-plus 中常使用的 update 相關(guān)方法的區(qū)別,以及更新 null 的方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-04-04
  • 解決Java & Idea啟動tomcat的中文亂碼問題

    解決Java & Idea啟動tomcat的中文亂碼問題

    這篇文章主要介紹了Java & Idea啟動tomcat的中文亂碼問題,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-07-07
  • 使用Java實現(xiàn)接口攔截器來監(jiān)控接口的執(zhí)行情況

    使用Java實現(xiàn)接口攔截器來監(jiān)控接口的執(zhí)行情況

    在排查問題的時候,由于沒有對接口的執(zhí)行情況,以及入?yún)⑦M行監(jiān)控,所以排查起問題就特別費勁,今天我們就一起來寫一個接口的攔截器來監(jiān)控接口的執(zhí)行情況吧
    2024-01-01
  • 一文詳解RabbitMQ如何保證消息可靠性

    一文詳解RabbitMQ如何保證消息可靠性

    這篇文章將詳細介紹RabbitMQ的消息可靠性機制,如消息丟失,消息重復(fù)性消費,消息積壓等問題,具有一定的參考價值,需要的朋友可以參考下
    2023-07-07
  • SpringBoot整合FTP使用示例教程

    SpringBoot整合FTP使用示例教程

    這篇文章主要介紹了SpringBoot整合FTP使用示例教程,本文通過示例代碼給大家介紹的非常詳細,感興趣的朋友跟隨小編一起看看吧
    2024-08-08
  • 如何使用Java統(tǒng)計gitlab代碼行數(shù)

    如何使用Java統(tǒng)計gitlab代碼行數(shù)

    這篇文章主要介紹了如何使用Java統(tǒng)計gitlab代碼行數(shù),實現(xiàn)方式通過git腳本將所有的項目拉下來并然后通過進行代碼行數(shù)的統(tǒng)計,需要的朋友可以參考下
    2023-10-10
  • Jenkins自動部署Net Core過程圖解

    Jenkins自動部署Net Core過程圖解

    這篇文章主要介紹了Jenkins自動部署Net Core過程圖解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-12-12
  • Java split()方法中的特殊符號舉例詳解

    Java split()方法中的特殊符號舉例詳解

    Java中的split方法可以將一個字符串按照指定的分隔符進行分割,返回一個字符串?dāng)?shù)組,這篇文章主要給大家介紹了關(guān)于Java split()方法中的特殊符號的相關(guān)資料,需要的朋友可以參考下
    2023-07-07

最新評論

延津县| 栾城县| 上虞市| 如皋市| 永胜县| 通化市| 长兴县| 奉化市| 鄢陵县| 陵水| 噶尔县| 呈贡县| 田东县| 龙山县| 绥化市| 清涧县| 旌德县| 女性| 韶山市| 昂仁县| 宝清县| 阳东县| 买车| 繁峙县| 达尔| 宜兴市| 万载县| 沾益县| 城口县| 名山县| 西和县| 黔西| 平利县| 红原县| 万安县| 噶尔县| 鄯善县| 德州市| 邵东县| 德化县| 积石山|