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

在EES中通过子程序/模块生成积分表的技术问题咨询

解决EES中模块调用后积分表不生成多控制体结果的问题

首先咱们拆解下你遇到的核心问题:EES的$integraltable默认只追踪全局作用域下的变量,你原代码里模块内的x是局部变量,两次调用模块时会覆盖这个变量,再加上积分表只指定了x,最后自然只会保留最后一次调用的终点结果,没法记录多控制体的完整积分过程数据。

下面给你两种适配不同场景的可行解决方案:

方案1:明确追踪全局变量,区分每个控制体输出

修改模块让它接受全局变量作为输出参数,同时在$integraltable里明确列出所有需要追踪的控制体变量。

修改后的代码示例:

Module XY(x_0, x_out)
  dxdt = 1
  x_out = x_0 + integral(dxdt, t, 0, 5)
End

# 关键:在积分表中列出所有要追踪的全局变量(w和y)
$integraltable t: 0.01 w, y

w0 = 1
y0 = 2
Call XY(w0, w)
Call XY(y0, y)

为什么这样有效?

  • 把w和y作为全局变量传递给模块,彻底避免了局部变量被覆盖的问题
  • $integraltable明确指定要记录t、w和y,EES会在积分过程中同步记录这两个变量的每一步数值

方案2:用数组管理多控制体(适合大规模场景)

如果你的控制体数量较多,逐个命名变量会很繁琐,用数组来管理会更高效:

# 定义控制体数量
n_control_bodies = 2
# 初始化每个控制体的初始值数组
x0[1..n_control_bodies] = [1, 2]

Module XY(x_0, x_out)
  dxdt = 1
  x_out = x_0 + integral(dxdt, t, 0, 5)
End

# 积分表中列出数组的每个元素
$integraltable t: 0.01 x[1], x[2]

# 循环调用模块处理每个控制体
Do i = 1 to n_control_bodies
  Call XY(x0[i], x[i])
End

额外注意事项

  • EES的integral函数在模块中使用时,只要输出变量是全局的,积分过程就会和全局的$integraltable关联
  • 确保$integraltable指令放在变量定义和模块调用之前,这样EES会提前知晓要追踪哪些变量

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:16:47