modelica无法申请的原因'Modelica.Math.Nonlinear.solveOneNonlinearEquation'
Reasons for modelica not being able to apply 'Modelica.Math.Nonlinear.solveOneNonlinearEquation'
我的 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
的输出越过值零的点。这一点被称为函数的“根”。一个函数可以有 none,一个或多个根。根的数量可以取决于搜索间隔。
当函数在区间的两个边界处符号相同时,可能函数中没有根,这就是为什么return出错的原因。有可能有偶数个根,但这并不能保证。尽管如此,在边界处有相反的符号并不能保证只有一个根。
例如:将间隔设置为 [-5, 5] 时,正弦曲线(可用作 Modelica.Math.Nonlinear.Examples.UtilityFunctions.fun4
)将具有三个零交叉点:
寻找-5
和5
之间的根,因此有三个正确的解决方案,并且不清楚哪一个将是return值。呼叫:
Modelica.Math.Nonlinear.solveOneNonlinearEquation(function Modelica.Math.Nonlinear.Examples.UtilityFunctions.fun4(), -5,5);
将 return 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 模型的仿真一开始就中止了,原因如下:
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
的输出越过值零的点。这一点被称为函数的“根”。一个函数可以有 none,一个或多个根。根的数量可以取决于搜索间隔。
当函数在区间的两个边界处符号相同时,可能函数中没有根,这就是为什么return出错的原因。有可能有偶数个根,但这并不能保证。尽管如此,在边界处有相反的符号并不能保证只有一个根。
例如:将间隔设置为 [-5, 5] 时,正弦曲线(可用作 Modelica.Math.Nonlinear.Examples.UtilityFunctions.fun4
)将具有三个零交叉点:
寻找-5
和5
之间的根,因此有三个正确的解决方案,并且不清楚哪一个将是return值。呼叫:
Modelica.Math.Nonlinear.solveOneNonlinearEquation(function Modelica.Math.Nonlinear.Examples.UtilityFunctions.fun4(), -5,5);
将 return 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
为了不触发错误,您需要确保在您的模拟中的所有点,极限值都具有相反的符号。