MATLAB+JAVA的混合开发

这篇具有很好参考价值的文章主要介绍了MATLAB+JAVA的混合开发。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

近期项目中需要使用matlab跟java做混合开发。主要记录一下,此次开发遇到的问题点。

环境:使用的matlab版本是   R2018b。

当前状况:MATLAB代码已经编写好,且运行成功。需要打成jar包才可以被java调用。

步骤一:

按照教程安装好matlab后,打开matlab,查看当前matlab依赖的jdk版本号:

MATLAB+JAVA的混合开发

找到对应的java版本,安装到本机,并配置对应的环境变量。

然后开始打包:

MATLAB+JAVA的混合开发

MATLAB+JAVA的混合开发

MATLAB+JAVA的混合开发

 点击package后勾选需要保存打包好的文件路径

MATLAB+JAVA的混合开发

点击保存后开始打包,                                          打包成功后界面

MATLAB+JAVA的混合开发MATLAB+JAVA的混合开发

 打开输出文件夹,会出现4个文件夹

MATLAB+JAVA的混合开发

MATLAB+JAVA的混合开发 可以看到最后的jar包名称与上文中输入的一致。这就是我们需要在java中调用的jar。

将该jar包引入到java项目中,榆次同时还需要将MATLAB中的另一个jar也引入java项目,否则调用不成功。在本机的MATLAB阿德安装目录中找到javabuilder.jar一同引入。

MATLAB+JAVA的混合开发

至此,MATLAB工程就可以被java程序调用了。

步骤二:

在java项目中引入MATLAB编译好的jar包

MATLAB+JAVA的混合开发

 在java项目中编写对应代码调用jar,由于我的MATLAB程序输出的是两个参数,因此需要将两个数据分别获取到 ,然后合并到同一个文件中,保存下来后,与在MATLAB中执行后对比,确认运行成功。

import com.mathworks.toolbox.javabuilder.*;
import testhalo.TestHalo;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;

public class halotest {
    public static void main(String[] args) {
        MWNumericArray input = null;
        Object[] result = null;
        TestHalo test = null;
        try {
            input = new MWNumericArray(Double.valueOf(15),MWClassID.DOUBLE);
            test = new TestHalo();
//这里注意  第一个参数  是MATLAB程序会输出几个返回值    从第二个参数向后 才是真正调用MATLAB的jar的入参
            result = test.testhalo(2,2023d,6d,15d,19d,10d,0d,1d,8000d,60d);
            saveArrayToFile("E:\\1\\2\\1.txt",result);
        } catch (MWException e) {
            e.printStackTrace();
        } finally {
            MWArray.disposeArray(input);
            MWArray.disposeArray(result);
            test.dispose();
        }
    }

// 保存数值数组到文件
    private static void saveArrayToFile(String filename, Object[] response) {
        try {
            BufferedWriter writer = new BufferedWriter(new FileWriter(filename));
            MWNumericArray T = (MWNumericArray) response[0];	// 第一个输出参数   
            MWNumericArray Halo = (MWNumericArray) response[1];				// 第二个输出参数 
            int[] haloDimensions = Halo.getDimensions();
            int[] TDimensions = T.getDimensions();
            if (haloDimensions.length != TDimensions.length || haloDimensions[0] != TDimensions[0])
                return;
            int numRows = haloDimensions[0];  //行数
            int haloCols = haloDimensions[1];  //列数
            int tCols = TDimensions[1];

            for (int i = 1; i <= numRows; i++) {
                for (int j = 1; j <= haloCols; j++) {
                    int[] index = {i,j};
                    double valueHalo = Halo.getDouble(index);
                    writer.write( Double.toString(valueHalo));
                    if (j <= haloCols) {
                        writer.write("\t");
                    }
                }
                for (int k = 1; k <= tCols; k++) {
                    int[] index = {i,k};
                    double valueT = T.getDouble(index);
                    writer.write( Double.toString(valueT));
                    if (k <= haloCols) {
                        writer.write("\t");
                    }
                }
                writer.newLine();
            }
            writer.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}

遇到的问题总结: 

 1.只能接受具有单个入口点的MATLAB函数和MEX文件作为导出函数MATLAB+JAVA的混合开发

当勾选完需要作为主程序入口的文件时会弹窗报错。这是因为勾选的文件有多个程序入口,需要将这些调用方法都拆分到其他文件中,保证这个文件中只有一个主程序调用入口。

2.调用入参传递问题

MATLAB+JAVA的混合开发

这行代码是调用MATLAB的jar的入口。可以看到引入的jar包,然后实例化后调用我们在上文中指定的修改后的主程序方法名(根据你自己定义的方法名修改),然后后面的入参,有一点要注意:第一个入参,不是真正的入参,是定义MATLAB的jar的实际返回的数据有几个。从第二个参数开始,才是真正的调用testhalo()的入参。

 3.导入java程序后调用报错

MATLAB+JAVA的混合开发

这是因为MATLAB中程序被编译成jar包后,涉及到数据格式转换。在java中编写程序调用MATLAB的jar时,需要使用double类型的入参。否则就会报错,参数类型不匹配!!!

 文章来源地址https://www.toymoban.com/news/detail-496008.html

 

 

到了这里,关于MATLAB+JAVA的混合开发的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【混合时变参数系统参数估计算法】使用范数总和正则化和期望最大化的混合时变参数系统参数估计算法(Matlab代码实现)

     💥💥💞💞 欢迎来到本博客 ❤️❤️💥💥 🏆博主优势: 🌞🌞🌞 博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️ 座右铭: 行百里者,半于九十。 📋📋📋 本文目录如下: 🎁🎁🎁 目录 💥1 概述 📚2 运行结果 🎉3 参考文献 🌈4 Matlab代码实现 文献来

    2024年02月10日
    浏览(33)
  • 【reactNative混合安卓开发~使用问题持续更】

    用reactNative(VsCode编译器)开发移动端界面,Android开发后端接口(Android Studio编译器)。 RN官网(搭建环境于API手册) :https://reactnative.cn/docs/environment-setup 背景: reactNative提供组件,或者使用第三方库提供的组件,数据(包含规则校验)由 yup、formik提供,除启动界面:login,re

    2024年02月13日
    浏览(27)
  • 使用MATLAB生成任何需要的伪随机码(PN码)

    目录 一. 引言 二. 用matlab生成伪随机序列                 伪随机码(PN码),只包含0和1,是一种人为随机创造的随机序列。应用范围广,通信中经常使用到,比如伪码测距等。为了验证所给的生成函数是否正确,经常需要使用matlab仿真查看所生成的随机序列。         下

    2024年02月11日
    浏览(39)
  • 2023年最新IDEA中 Java程序 | Java+Kotlin混合开发的程序如何打包成jar包和exe文件(gradle版本)

    一. JAVA | JAVA和Kotlin混开开发的程序打包成jar方法 1.1 方法一 :IDEA中手动打包 1.2 方法二 :build.gradle中配置后编译时打包 二. JAVA | JAVA和Kotlin混合开发的程序打包成exe的方法 纯JAVA | 纯Kotlin | JAVA和Kotlin混合开发打包其实都一样的,因为jar包中主要还是class文件,而kotlin在编译后

    2024年02月12日
    浏览(45)
  • WPF混合开发之WebView2(二) WebView2的简单使用

    在上一篇文章中,我们介绍了WebView2的环境搭建,点此前往,在这一章节,我们将使用WebView2简单搭建一个WPF程序,在程序中加载百度搜索页面,废话不多说,直接上流程。 建立WPF工程 建立WPF工程步骤很简单,在此不再截图,直接上步骤: 打开Visual Stido 2022(博主使用的是vs

    2024年02月05日
    浏览(61)
  • 数学建模中所需要使用到的Matlab(从零开始介绍)

    注意事项 :只有将Matlab的工作目录切换到当前文件夹中,才能运行当前程序。

    2024年02月13日
    浏览(80)
  • Java:企业级java后端开发,需要掌握哪些内容

    一、什么是后端开发 后端开发是指开发基于服务器端的软件应用程序,也称为系统的后台或服务器端编程。 后端程序员负责处理网站或应用程序后台的逻辑和功能,包括数据库管理、服务器端脚本编写、API设计、数据安全性、网站性能优化等。 后端开发技术通常包括网络协

    2024年01月24日
    浏览(41)
  • 中文编程开发语言工具编程实际案例:台球棋牌混合计时计费软件使用的编程构件说明

    台球棋牌混合计时计费软件使用的编程构件说明 上图说明:该软件可以用于桌球和棋牌同时计时计费,在没有开台的时候,图片是处于等待状态,这使用编程工具中的固定图像构件,在正在计时的时候,图片自动变换为 进行中的状态,在编程中可以动态读取图片。 上图说明

    2024年02月08日
    浏览(38)
  • qt matlab 混合编程

    matlab 2021a qt 5.12.10 qt creator 4.13.1 opencv 4.3.0 eigen-3.4.0/eigen-3.4.0 以 aberr_analy1 的导出 dill 举例 命令行中输入:deploytool 2. 选择LIbrarycompiler 3type 选择c++ 4,选择相应的 5. 点击package  选择保存的路径即可 6.导出后: 只需要 下面这个文件里面的dll .h 和。Lib 文件 1.opencv +eigen-3.4.0+matlab

    2024年02月07日
    浏览(32)
  • 【Matlab】混合整数规划

    链接 f、x、intcon、lb、beq、Ib和ub是向量,A和Aeq是矩阵 min ⁡ x f T x  subject to  { x (  intcon  )  are integers  A ⋅ x ≤ b  Aeq  x = b e q l b ≤ x ≤ u b min _{x} f^{T} x text { subject to }left{begin{array}{l} x(text { intcon }) text { are integers } \\\\ A cdot x leq b \\\\ text { Aeq } x=b e q \\\\ l b leq x leq u

    2024年02月04日
    浏览(23)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包