我的 Modelica 模型的模拟一开始就中止,原因如下:
The arguments u_min and u_max provided in the function call
solveOneNonlinearEquation(f,u_min,u_max)
do not bracket the root of the single non-linear equation 0=f(u)
fa and fb must have opposite sign which is not the case
仿真开始时计算的 fa 和 fb 值确实具有相同的符号。我查找了 Modelica 尝试调用的函数,但我不确定我是否理解 Modelica 引发此错误的原因。如果有人向我解释为什么这个函数 Modelica.Math.Nonlinear.solveOneNonlinearEquation 需要 fa 和 fb 相反的符号,以及什么可能导致 fa 和 fb 具有相同的符号,我会非常高兴。您将帮助我更深入地了解 Modelica 的工作原理。
预先感谢您的帮助, 保罗
最佳答案
要提供有关完全正确的评论的更多详细信息:
函数 Modelica.Math.Nonlinear.solveOneNonlinearEquation
查找函数 f
的输出与值零相交的点。该点称为函数的“根”。函数可以没有根,也可以有单个根或多个根。根的数量可以取决于搜索间隔。
当函数在区间的两个边界上具有相同的符号时,有可能函数中没有根,这就是返回错误的原因。根的数量可能是偶数,但这并不能保证。尽管如此,在边界处具有相反的符号并不能保证只有一个根。
举个例子:当将间隔设置为 [-5, 5] 时,正弦(以 Modelica.Math.Nonlinear.Examples.UtilityFunctions.fun4
形式提供)将有三个零交叉:
寻找-5
和5
之间的根,因此有三个正确的解决方案,并且哪一个将是返回值并不明显。调用:
Modelica.Math.Nonlinear.solveOneNonlinearEquation(function Modelica.Math.Nonlinear.Examples.UtilityFunctions.fun4(), -5,5);
将返回 0
,但值也可以是 +pi
或 -pi
。
对比查找具有不同限制[-5,-1]的根:
Modelica.Math.Nonlinear.solveOneNonlinearEquation(function Modelica.Math.Nonlinear.Examples.UtilityFunctions.fun4(), -5,-1);
将给出 -3.141592653589793
,这是给定限制的唯一解决方案。
最后,对 [-4,2] 执行相同的操作
Modelica.Math.Nonlinear.solveOneNonlinearEquation(function Modelica.Math.Nonlinear.Examples.UtilityFunctions.fun4(), -4, 2);
将触发您收到的错误:
The arguments u_min and u_max provided in the function call
solveOneNonlinearEquation(f,u_min,u_max)
do not bracket the root of the single non-linear equation 0=f(u):
u_min = -4
u_max = 2
fa = f(u_min) = 0.756802
fb = f(u_max) = 0.909297
fa and fb must have opposite sign which is not the case
为了不触发错误,您需要确保在模拟的所有点上,极限值具有相反的符号。
关于modelica - modelica无法申请的原因 'Modelica.Math.Nonlinear.solveOneNonlinearEquation',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72406353/