如何限制模型中的解决方案域

How to limit solution domain in modelica

我在 OpenModelica 中有一个非常简单的模型。

model doubleSolution
   Real x ;
equation
   x^2 -4 = 0;
end doubleSolution;

这个问题x={-2,+2}有两个数学解。 Openmodelica Solver 将只提供一个结果。在这种情况下 +2.

如果我对其他解决方案感兴趣怎么办?

使用正确的起始值,例如Real x(Start=-7) 作为解决方法可能会有所帮助,但我不确定这是否始终是一个可靠的解决方案。我更愿意直接限制解决方案范围,例如通过 (x < 0)。这样的边界条件是否可能?

正如您已经注意到的,使用起始值是一种选择。这是否是一个可靠的解决方案取决于起始值的好坏。对于此示例,使用了 Newton-Raphson 方法,这在很大程度上取决于良好的起始值。

您可以使用 maxmin 为变量指定一个有效范围。 例如检查 4.8.1 Real Type of the Modelcia Language Specification 以查看类型 Real 具有哪些属性。

加上良好的起始值,这应该足够稳健,如果 x 变得比 0.0 大,至少会给您一个警告。

model doubleSolution
   Real x(max=0, start=-7);
equation
   x^2 -4 = 0;
end doubleSolution;

另一种选择是在等式中添加断言:

assert(value >= min and value <= max , "Variable value out of limit");

对于 minmax 属性,此断言是自动添加的。