OpenMDAO中有没有办法使用符号变量获取表达式?

问题描述 投票:0回答:2

我想使用用 OpenMDAO 编写的代码块来提取输出表达式作为几个变量的函数(需要声明为符号)。在这种情况下,问题的结构不是高度嵌套的,所以也许我会浪费更少的时间直接手动完成它,但我想知道是否存在任何类似的功能来执行此操作。

在这种情况下,结构如下:仅计算作为马赫数 (M) 和升力系数 (CL) 函数的阻力系数 CD:

每个贡献(CD0 和 e)都是由多个组件(在本例中为 ExplicitComponents)组成的组,并进一步依赖于 M 和 CL。

python symbolic-math openmdao
2个回答
0
投票

您正在寻找

ExecComp
,它可以让您只需在初始化参数中键入一个方程。

文档位于此处

从这些文档复制的简单示例:

import openmdao.api as om

prob = om.Problem()
model = prob.model

model.add_subsystem('comp', om.ExecComp('y=x+1.'))

model.set_input_defaults('comp.x', 2.0)

prob.setup()

prob.run_model()

print(prob.get_val('comp.y'))

0
投票

如果您想编写一些复杂的表达式并通过它们自动获取导数,那么您可能需要考虑 Jax 甚至与 Julia 交互。如果您正在考虑使用自己的符号引擎(如 sympy)与代码进行交互,可以通过多种方法将生成的导数表达式转换为可执行的 Python 代码,但根据我的经验,这不是一个无缝的过程。

与 Jax 交互需要一些样板功能,但此处记录了一些示例:https://openmdao.org/newdocs/versions/latest/features/building_blocks/jax_subpackage/jax_subpackage.html

© www.soinside.com 2019 - 2024. All rights reserved.