Modelica——使用参数方程,编译后不失参数化能力
Modelica - Using parameter equations without losing the ability to parameterize after compilation
通常,我会使用依赖于其他参数的参数构建 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,我需要手动 maintain/update 参数 b。这是一个微不足道的例子,但可能在更真实的例子中,方程组和逻辑会更复杂以确定参数 b。
虽然上述行为完全合乎逻辑且符合预期,但我通常更喜欢的是第三种方法,它让我两全其美:根据参数 a 指定参数 b 的默认值,但保持能力编译后到 change/parameterize b。另外,在这里给出一些动机:我会说当参数之间没有严格的关系(在这种情况下为 a 和 b)时会出现此 situation/need,但存在 convenient/typical 默认关系.
例如,如果有如下的注解就好了:
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;
有什么已知的方法可以实现我所追求的目标吗?或任何其他 thoughts/suggestions?
我想像下面这样的模型可以满足您的要求。
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;
我添加了一个布尔参数 evaluateExpression
,它将影响 b
get 的计算或使用参数 bVal
。
在 OpenModelica (OMEdit) 中,您可以通过在仿真时将 evaluateExpression=false
和 bVal
更改为某个值来更改 b
的值。
通常,我会使用依赖于其他参数的参数构建 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,我需要手动 maintain/update 参数 b。这是一个微不足道的例子,但可能在更真实的例子中,方程组和逻辑会更复杂以确定参数 b。
虽然上述行为完全合乎逻辑且符合预期,但我通常更喜欢的是第三种方法,它让我两全其美:根据参数 a 指定参数 b 的默认值,但保持能力编译后到 change/parameterize b。另外,在这里给出一些动机:我会说当参数之间没有严格的关系(在这种情况下为 a 和 b)时会出现此 situation/need,但存在 convenient/typical 默认关系.
例如,如果有如下的注解就好了:
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;
有什么已知的方法可以实现我所追求的目标吗?或任何其他 thoughts/suggestions?
我想像下面这样的模型可以满足您的要求。
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;
我添加了一个布尔参数 evaluateExpression
,它将影响 b
get 的计算或使用参数 bVal
。
在 OpenModelica (OMEdit) 中,您可以通过在仿真时将 evaluateExpression=false
和 bVal
更改为某个值来更改 b
的值。