Java如何调用Matlab程序

更新时间:2023-05-28 07:46:30 阅读: 评论:0

Java如何调⽤Matlab程序
⽬录
Java如何调⽤Matlab程序
1. 检查Matlab内置的Java版本和系统安装的Java版本是否⼀致?
2. 准备⼀份要调⽤的Matlab代码
3. 将Matlab代码打包成Jar包
4. 新建Java项⽬,调⽤由Matlab得到的Jar包
Java调⽤Matlab函数笔记
1.在命令⾏中输⼊deploytool恐怖电视剧
2.点击上图中标有红框的部分
4.编写java类,进⾏测试
5.调⽤有返回结果的函数
Java如何调⽤Matlab程序
背景朴树叶
Matlab可以轻易处理⾮常复杂的数学计算,Java具有多变的应⽤场景,如Web开发。本⽂讲述如何将两者优势结合起来,基本思路是将Matlab核⼼程序打包成Jar,供普通的Java程序调⽤。
具体步骤
1. 检查Matlab内置的Java版本和系统安装的Java版本是否⼀致?
检查MATLAB内置的Java版本
检查系统的Java版本
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⽂件列表如下图所⽰:
3. 将Matlab代码打包成Jar包
(1) 在Matlab命令⾏窗⼝输⼊deploytool指令,唤起打包部署⼯具
(2) 配置打包类型、包名、类名;选择待打包的M的⽂件
(3) 等待打包完成,应有3个对勾
(4) 打包⽣成的⼯程⽬录结构如下
4. 新建Java项⽬,调⽤由Matlab得到的Jar包
(1) Eclip新建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程序调⽤Matlab⽣成的Jar包,源码如下:
package com.csrl.localization;
import lbox.javabuilder.MWClassID;
import lbox.javabuilder.MWException;
import lbox.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[][]) DoubleArray();            // 将矩阵转化为⼆维数组
data = (MWNumericArray) result[1];        // 第⼆个输出参数
double[][] pMds = (double[][]) DoubleArray();                // 将矩阵转化为⼆维数组
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
2.点击上图中标有红框的部分
3.选择javapackage,依次填写name,classname自然之旅
在package的过程中可能会出现mcc错误的情况
4.编写java类,进⾏测试
import lbox.javabuilder.MWException;
import computef.ComputeF;
public class matlab2javaTest {
public static void main(String args[]) throws MWException {
System.out.println( Property("java.library.path"));
ComputeF cl = new ComputeF();
}
}
第⼀次运⾏时,会报如下错误
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 abnce may indicate an issue with that installation or the current path configuration.
南瓜饼的做法The MCR version that this component is trying to u 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);//第⼀个参数是返回结果的个数,第⼆个参数是实际参数
以上为个⼈经验,希望能给⼤家⼀个参考,也希望⼤家多多⽀持。

本文发布于:2023-05-28 07:46:30,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/82/798098.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:打包   参数   输出   版本   矩阵
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图