openmodelica - 如何限制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
andmin
给变量一个有效的范围。例如,查看Modelcia 语言规范的 4.8.1 Real Type以查看类型具有哪些属性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
andmax
属性,此断言是自动添加的。
推荐阅读
- java - 如何使用旧的休眠标准进行批处理?
- c# - 当 CopyTo 非静态方法的目标和源是同一个数组时,如何可能发生重叠?
- regex - 如何使用正则表达式评估 URL 中的动态值?
- laravel - 当 2 列相等时,where 子句中的语法问题?
- c - 如果孩子没有状态变化,如何取消waitpid?
- r - 存储在列表中的输入变量进入R中的循环
- algorithm - 是否有一种算法可以扩展图中的最短路径,直到它无法进一步扩展?
- php - Woocommerce - 在多供应商设置中按作者/用户对购物车中的产品进行排序
- python - 如何在 LAT/LON NMEA 坐标中获得 6 位小数
- node.js - Firebase 身份验证:如果我隐藏了我的 Firebase 凭据,“写入”和“读取”是否为真?