如何限制模型中的解决方案域
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 方法,这在很大程度上取决于良好的起始值。
您可以使用 max
和 min
为变量指定一个有效范围。
例如检查 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");
对于 min
和 max
属性,此断言是自动添加的。
我在 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 方法,这在很大程度上取决于良好的起始值。
您可以使用 max
和 min
为变量指定一个有效范围。
例如检查 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");
对于 min
和 max
属性,此断言是自动添加的。