在项目中处理矩阵等复杂数据结构的时候,可以用Matlab程序来运行,其优点是很多的。
专用工具箱和强大的矩阵运算能力:MATLAB 拥有强大的数学工具箱和优化工具箱,适合处理大规模矩阵运算以及水文模型的率定。MATLAB 的 Optimization Toolbox 可以方便地执行模型率定中的参数优化过程。
内置可视化和数据处理能力:MATLAB 提供内置的绘图和数据处理工具,可以方便地对率定和验证结果进行可视化分析。
广泛应用于科研:MATLAB 广泛应用于学术界,特别是在水文学、环境工程等领域中,有许多经典的水文模型(如 HBV、SWAT)都有 MATLAB 实现版本。
下面直接开始实战集成使用。
1、pom文件引入
<dependency><groupId>org.n52.matlab</groupId><artifactId>matlab-control</artifactId><version>5.0.0</version></dependency>
2、代码配置启动
import org.n52.matlab.control.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class MatlabConfiguration {//matlab单例启动一次@Bean(name = "matlab")public MatlabProxy createFactory() throws MatlabConnectionException, MatlabInvocationException {// 手动设置 MATLAB 安装路径,一般情况下不需要设置,除非此服务器上安装了多个matlab程序// System.setProperty("java.library.path", "/path/to/specific/matlab/version/bin");// 配置 MATLAB Proxy 工厂/* MatlabProxyFactoryOptions options = new MatlabProxyFactoryOptions.Builder().setUsePreviouslyControlledSession(true) // 重用 MATLAB 会话.setHidden(true) // MATLAB 不显示界面.build();MatlabProxyFactory factory = new MatlabProxyFactory(options);*/MatlabProxyFactory factory = new MatlabProxyFactory();//造成频繁启动显示页面MatlabProxy proxy = factory.getProxy();// 调用 MATLAB 函数proxy.eval("disp('Using specified MATLAB version!')");System.out.println("启动matlab完成");return proxy;}
}
3、业务层或者控制层依赖注入
@Autowiredprivate MatlabProxy matlabProxy;
4、测试代码执行matlab命令
String matlabCommand = "result = sum([0,1, 2, 3, 4, 5])";matlabProxy.eval(matlabCommand); // 让 MATLAB 执行命令// 获取 MATLAB 的计算结果Object result = matlabProxy.getVariable("result");double[] r=(double[]) result;System.out.print("f:");for (int i = 0; i < r.length; i++) {System.out.print(r[i]);}
5、测试代码执行Matlab函数
Object[] result1 = matlabProxy.returningFeval("yd_demo", 5,2);// double[] key=(double[]) result1[0];for (int j = 0; j < result1.length; j++) {double[] key=(double[]) result1[j];for (int i = 0; i < key.length; i++) {System.out.println(key[i]);}}
对应的Matlab函数yd_demo.m 文件内容
function [output1, output2, output3, output4, output5] = test(input)% This function takes one input and returns 5 outputs% Example: if input = 2, output1 =% input*1, output2 = input*2, etc.% 加载 data.mat 文件loadedData = load('data.mat'); % 加载文件中的所有变量data = loadedData.data; % 提取 data 变量in.dat = data{1};output1 = input * 1;output2 = input * 2;output3 = input * 3;output4 = input * 4;output5 = input * 5;disp(output5)
end
页面展示
注意:需要把使用到的*.m、*.mat等函数文件放到根目录下,即项目的pom.xml文件放在同一个文件夹下!图中也可以看到。这里JDK是1.8版本。
6、matlab安装参考
2024版本安装
到此、SpringBoot集成Matlab软件实战分享完成,后面继续更新更高级的内容,敬请期待!