modelica - modelica无法申请的原因 'Modelica.Math.Nonlinear.solveOneNonlinearEquation'

标签 modelica dymola

我的 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 形式提供)将有三个零交叉:

Sinus from -5 to 5

寻找-55之间的根,因此有三个正确的解决方案,并且哪一个将是返回值并不明显。调用:
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/

相关文章:

modelica - 查找在 Modelica 模型中导致非线性误差的变量

modelica - 液压系统仿真

modelica - 如何消除 Dymola/Modelica 中的死代码

c - 从 Dymola 多次调用 dll

python - 如何在 Dymola 中通过 python Api 仿真后将结果保存为 sdf 文件格式

initialization - Dymola:使用非线性求解器初始化区域供热网络仿真模型

max - modelica:随时间计算连续变量的最小值/最大值

pid - 使用 Modelica 模型和 PID Controller 设计进行过程识别

evaluation - Modelica 评估顺序

modelica - 从平面 Modelica 代码中提取类型/类名