You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

同一步骤内Model Exchange FMU状态导数未更新问题咨询

Heun法求解ME类型FMU导数未更新问题排查

核心原因

该问题是调用流程不符合FMI2 Model Exchange规范导致的,FMU内部的时间、状态缓存未完成同步刷新,导数计算仍基于旧的运行上下文,因此返回的结果和预估步导数一致。

现有流程的问题

  • 完成Heun法修正状态计算后,未同步更新FMU时间:你在获取预估步导数后将时间重置回了t,设置完最终状态后未将时间更新到t + h,调用导数获取接口时,模型仍以t时刻的时间参数参与计算。
  • 缺失积分步完成通知调用:FMI2 ME规范明确要求,自定义求解器完成一个积分步的状态更新后,必须调用fmi2_import_completed_integrator_step()通知FMU积分完成,触发内部离散事件处理、状态缓存刷新逻辑,否则FMU不会主动更新导数计算依赖的内部变量。
  • 若模型存在随时间变化的外部输入,调用导数接口前未更新t + h时刻的输入值,也会导致导数计算结果异常。

修正方案

在你现有代码的最后一次fmi2_import_set_continuous_states调用后,补充以下流程即可:

// 1. 将FMU时间更新到当前积分步结束时刻
fmistatus = fmi2_import_set_time(fmu, t + h);
// 2. 若模型有外部输入,此处设置t+h时刻对应的输入值
// fmi2_import_set_real(fmu, input_vrs, input_count, input_values);
// 3. 通知FMU积分步完成,处理内部事件、刷新缓存
fmi2_boolean_t need_event_update;
fmistatus = fmi2_import_completed_integrator_step(fmu, fmi2_true, &need_event_update);
// 若返回需要处理事件,先完成事件迭代再继续后续操作
if (need_event_update) {
    // 按FMI2规范实现离散事件处理逻辑即可
}
// 此时调用fmi2_import_get_derivatives()即可获取到更新后的正确导数值

内容的提问来源于stack exchange,提问作者bruaug

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 11:51:02