Java如何調(diào)用Matlab程序_第1頁
Java如何調(diào)用Matlab程序_第2頁
Java如何調(diào)用Matlab程序_第3頁
Java如何調(diào)用Matlab程序_第4頁
Java如何調(diào)用Matlab程序_第5頁
已閱讀5頁,還剩2頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

第Java如何調(diào)用Matlab程序目錄Java如何調(diào)用Matlab程序1.檢查Matlab內(nèi)置的Java版本和系統(tǒng)安裝的Java版本是否一致?2.準(zhǔn)備一份要調(diào)用的Matlab代碼3.將Matlab代碼打包成Jar包4.新建Java項(xiàng)目,調(diào)用由Matlab得到的Jar包Java調(diào)用Matlab函數(shù)筆記1.在命令行中輸入deploytool2.點(diǎn)擊上圖中標(biāo)有紅框的部分3.選擇javapackage,依次填寫name,classname4.編寫java類,進(jìn)行測試5.調(diào)用有返回結(jié)果的函數(shù)

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

背景

Matlab可以輕易處理非常復(fù)雜的數(shù)學(xué)計(jì)算,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ò)定位。其包含多個(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);

forn=1:nGps

covMats(:,:,n)=gCov;

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

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

3.將Matlab代碼打包成Jar包

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

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

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

(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包,源碼如下:

packagecom.csrl.localization;

importcom.mathworks.toolbox.javabuilder.MWClassID;

importcom.mathworks.toolbox.javabuilder.MWException;

importcom.mathworks.toolbox.javabuilder.MWNumericArray;

importlocalization_matlab.MdsLocalization;

publicclassTestLocalization{

publicstaticvoidmain(String[]args){

try{

MdsLocalizationmatrixCompletion=newMdsLocalization();

doubleN=10;

doubledim=2;

doublespace=500;

doublesigma=2;

doublenGps=5;

doublenumMiss=0;

double[][]gCovArr={{1,0},{0,1}};

MWNumericArraygCov=newMWNumericArray(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);

MWNumericArraydata=(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(MWExceptione){

e.printStackTrace();

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

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

1.在命令行中輸入deploytool

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

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

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

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

importcom.mathworks.toolbox.javabuilder.MWException;

importcomputef.ComputeF;

publicclassmatlab2javaTest{

publicstaticvoidmain(Stringargs[])throwsMWException{

System.out.println(System.getProperty("java.library.path"));

ComputeFcl=newComputeF();

putef(0);

}

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

Exceptioninthread“main”java.lang.UnsatisfiedLinkError:Failedtofindthelibrarymclmcrrt7_14.dll,requiredbyMATLABBuilderJA,onjava.library.path.

ThislibraryistypicallyinstalledalongwithMATLABortheMCR,itsabsencemayindicateanissuewiththatinstallationorthecurrentpathconfiguration.

TheMCRversionthatthiscomponentistryingtouseis:7.14.

錯(cuò)誤原因可能是:path中沒有matlab的路徑,即找不到mclmcrrt7_14.dl

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論