我的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是如何工作的。
提前谢谢你的帮助,保罗
发布于 2022-05-30 06:29:21
为了给出一些关于完全正确的评论的更多细节:
函数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为了不触发错误,您需要确保在模拟的所有点上,极限处的值都有相反的标志。
https://stackoverflow.com/questions/72406353
复制相似问题