在项目中处理矩阵等复杂数据结构的时候,可以用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、业务层或者控制层依赖注入
@Autowired
private 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软件实战分享完成,后面继续更新更高级的内容,敬请期待!