在Java的工程实现中使用Matlab计算能力

Matlab丰富的模型资源、优化的算法能力以及对计算加速的硬件支持,使得其在计算核心的算法设计中成为主流开发方法,在传统实现中复杂的算法借助Matlab核心计算能力可以简单快速实现。
但是在工程化的实现过程中,实现Matlab能力集成踩坑众多,本文记录了一次在java中实现电网海量运行数据自定义模型计算引入matlab的踩坑及搞定方法

在算法运行设备安装完整的Matlab或者Matlab Compiler Runtime环境

[去这里]https://ww2.mathworks.cn/products/compiler/matlab-runtime.html

注意:版本选择很重要

安装对应的jdk版本

在matlab算法实现的console window,运行 version -java,查看内嵌的jdk版本,一定要选择相应的jdk版本独立安装

设置jdk环境变量

以macos为例

  1. echo $SHELL 查看shell类型

  2. bash:echo “export JAVA_HOME=“ >> ~/.bash_profile

     source ~/.bash_profile
  3. zsh: echo “export JAVA_HOME=“ >> ~/.zprofile

     source ~/.zprofile
  4. 设置DYLD_LIBRARY_PATH
    bash:echo “export DYLD_LIBRARY_PATH=$DYLD_LIBRARY_PATH:/bin” >> ~/.profile

     source ~/.profile

    zsh :echo “export DYLD_LIBRARY_PATH=$DYLD_LIBRARY_PATH:/bin” >> ~/.zshrc

     source ~/.zshrc

    参考这里

重启MacOS,并关闭SIP

  1. 重启
  2. command+R 进入recovery mode
  3. 在recovery mode 打开terminal
  4. command line: csrutil disable 关闭SIP

设置matlab运行时依赖

以macos为例
export DYLD_LIBRARY_PATH=”${DYLD_LIBRARY_PATH:+${DYLD_LIBRARY_PATH}:}
/runtime/maci64:
/bin/maci64:
/sys/os/maci64:
/extern/bin/maci64”
参考这里

以Eclipse为例工程华开发的配置

  1. /toolbox/…/javabuilder.jar 拷贝到classpath

  2. matlab编译打包的 jar 拷贝到classpath

  3. 测试代码

    import com.mathworks.toolbox.javabuilder.MWClassID;
    import com.mathworks.toolbox.javabuilder.MWComplexity;
    import com.mathworks.toolbox.javabuilder.MWNumericArray;
    import com.mathworks.toolbox.javabuilder.internal.MWMCR;
    import startpff.runpf;
    import test_function.adder;
    import startpff.StartpffMCRFactory;
    public class today {
     static {
         try {
             System.out.println(System.getProperty("java.library.path"));
         } catch(Exception e) {
             e.printStackTrace();
         }
     }
     public static void main(String[] args) throws Exception {
         //MWMCR c = StartpffMCRFactory.newInstance();
         int[] dims = {1, 2};
         MWNumericArray i = MWNumericArray.newInstance(dims, MWClassID.DOUBLE, MWComplexity.REAL);
         adder add = new adder();
         Object[] arr = add.test_function(1, 1, 1, 1);
         for(Object x : arr) {
             System.out.println("x======" + x);
         }
         System.out.println("hello matlab");
     }
    }
  4. 配置JVM启动参数,此步不是必须
    JVM启动项配置

  5. 配置环境变量,此步必须
    JVM环境配置

  6. 直接运行查看控制台console结果输出


   转载规则


《在Java的工程实现中使用Matlab计算能力》 catiga 采用 知识共享署名 4.0 国际许可协议 进行许可。
 上一篇
NFT & Web3 Toolkits Collection NFT & Web3 Toolkits Collection
综合平台 NFTGO(新项目 + 趋势 + 逐个数据 + 巨鲸) NFT ranking, best and top NFT collections | NFTGo Nansen(付费,巨鲸 + 趋势 + 稀有度) nansen.ai D
2022-05-11
下一篇 
取模与取余的区别 取模与取余的区别
模数和余数的计算方法计 $ { (x, y) | (x, y) \in 实数 } $, $ m = \frac{x}{y} $,m计为除数,则有取模和取余的计算方法为$$v = x - m*y$$ 区别在于除数m的计数方法: 取余:除数m
  目录