【问题标题】:How to limit solution domain in modelica如何限制modelica中的解决方案域
【发布时间】:2021-10-23 16:00:49
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: openmodelica


    【解决方案1】:

    正如您已经注意到的,使用起始值是一种选择。如果这是一个稳健的解决方案,取决于起始值有多好。本例使用 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 属性,会自动添加此断言。

    【讨论】:

    • 亲爱的 AnHeuermann。谢谢你的提示。最小/最大限制似乎只是发出警告,而不是强制求解器限制求解空间。对于 start valuse,我担心在某些情况下,在模拟过程中可能会出现两种解决方案。这就是我对稳定性的担忧的来源。坦率地说,到目前为止,我在这里没有遇到任何问题。我只是想排除任何可能出错的事情。也许不需要这种额外的照顾。我仍然会使用最小/最大警告。所以如果出现问题,我可以更容易地找到原因。
    猜你喜欢
    • 1970-01-01
    • 2017-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-13
    • 1970-01-01
    • 2019-10-10
    • 2020-06-04
    相关资源
    最近更新 更多