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为例
echo $SHELL 查看shell类型
bash:echo “export JAVA_HOME=
“ >> ~/.bash_profile source ~/.bash_profile
zsh: echo “export JAVA_HOME=
“ >> ~/.zprofile source ~/.zprofile
设置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
- 重启
- command+R 进入recovery mode
- 在recovery mode 打开terminal
- command line: csrutil disable 关闭SIP
设置matlab运行时依赖
以macos为例
export DYLD_LIBRARY_PATH=”${DYLD_LIBRARY_PATH:+${DYLD_LIBRARY_PATH}:}
参考这里
以Eclipse为例工程华开发的配置
/toolbox/…/javabuilder.jar 拷贝到classpath matlab编译打包的 jar 拷贝到classpath
测试代码
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"); } }
配置JVM启动参数,此步不是必须
配置环境变量,此步必须
直接运行查看控制台console结果输出