matlab的fsim,从 Java 运行 Simulink 仿真

该博客介绍了如何通过Java代码启动MATLAB引擎,加载Simulink模型vdp,异步运行仿真,并获取仿真结果。在MATLAB工作区中,它获取了仿真输出的数据和时间向量,绘制了结果图表并将其导出为JPEG。最后,将仿真结果和时间向量以double数组的形式返回到Java。整个过程涉及到了MATLAB引擎API的使用和Java与MATLAB之间的数据交互。
摘要由CSDN通过智能技术生成

运行仿真的 Java 代码

以下 Java 代码运行 Simulink vdp 模型仿真,并将结果返回到 Java。该实现执行以下操作:

创建一个 MATLAB 引擎对象,并启动一个 MATLAB 会话。

调用 MATLAB load_system 命令以启动 Simulink 并以异步方式加载 vdp 模型。轮询任务,直到 Future 返回。

调用 MATLAB sim 命令以设置仿真参数并运行仿真。轮询任务,直到 Future 返回。

捕获仿真结果。sim 函数的输出是在 MATLAB 基础工作区中创建的 MATLAB Simulink.SimulationOuput(Simulink) 对象。

引擎 API 不支持这种类型的对象。因此,此示例使用对象的 get 方法访问 MATLAB 工作区中的仿真数据。

创建仿真数据的图,并将此图导出为 JPEG 文件。

将仿真结果和时间向量作为 double 数组返回到 Java。

import com.mathworks.engine.*;

import java.util.concurrent.Future;

import java.util.Arrays;

public class RunSimulation {

public static void main(String[] args) throws Exception {

MatlabEngine eng = MatlabEngine.startMatlab();

Future fLoad = eng.evalAsync("load_system('vdp')");

while (!fLoad.isDone()){

System.out.println("Loading Simulink model...");

Thread.sleep(10000);

}

Future fSim = eng.evalAsync("simOut = sim('vdp','SaveOutput'," +

"'on','OutputSaveName','yOut'," +

"'SaveTime','on','TimeSaveName','tOut');");

while (!fSim.isDone()) {

System.out.println("Running Simulation...");

Thread.sleep(10000);

}

// Get simulation data

eng.eval("y = simOut.get('yOut');");

eng.eval("t = simOut.get('tOut');");

// Graph results and create image file

eng.eval("plot(t,y)");

eng.eval("print('vdpPlot','-djpeg')");

// Return results to Java

double[][] y = eng.getVariable("y");

double[] t = eng.getVariable("t");

// Display results

System.out.println("Simulation result " + Arrays.deepToString(y));

System.out.println("Time vector " + Arrays.toString(t));

eng.close();

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值