gpt4 book ai didi

Modelica——使用参数方程,编译后不失参数化能力

转载 作者:行者123 更新时间:2023-12-05 04:33:03 25 4
gpt4 key购买 nike

通常,我会使用依赖于其他参数的参数构建 Modelica 模型:

model ParameterTest
parameter Real a = 5;
parameter Real b = a/2;
end ParameterTest;

在这里,参数 b 不再可用于在编译模型中进行参数化,我已锁定 b=a/2 关系。

或者,我可以执行以下操作:

model ParameterTest
parameter Real a = 5;
parameter Real b = 5/2;
end ParameterTest;

在这里,我失去了参数 b 默认值的一些可追溯性和逻辑,如果我将来要更改参数 a,我需要手动维护/更新参数 b。这是一个微不足道的例子,但可能在更真实的例子中,方程组和逻辑会更复杂以确定参数 b。

虽然上述行为完全合乎逻辑且符合预期,但我通常更喜欢第三种方法,它让我两全其美:根据参数 a 指定参数 b 的默认值,但保持更改的能力/编译后参数化b。另外,在这里给出一些动机:我会说当参数(在这种情况下为 a 和 b)之间没有严格的关系时会出现这种情况/需要,但存在方便/典型的默认关系。

例如,如果存在像下面这样的注解,那就太好了:

model ParameterTest
parameter Real a = 5;
parameter Real b = a/2 annotation(EvaluateExpression=true); // this would effectively replace "a/2" with "2.5" prior to compilation
end ParameterTest;

有什么已知的方法可以实现我所追求的目标吗?或任何其他想法/建议?

最佳答案

我想像下面这样的模型可以满足您的需求。

model ParameterTest
parameter Real a = 5;
parameter Real bVal = 0;
parameter Real b = if evaluateExpression then a/2 else bVal;
parameter Boolean evaluateExpression = true;
end ParameterTest;

我添加了一个 bool 参数 evaluateExpression,它将影响 b get 的计算或使用参数 bVal。在 OpenModelica (OMEdit) 中,您可以通过在仿真时将 evaluateExpression=falsebVal 更改为某个值来更改 b 的值。

OMEdit diagram view of a and b

关于Modelica——使用参数方程,编译后不失参数化能力,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71500517/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com