sai*_*ddy 3 simulation performance modelica
为什么 Modelica 的非线性求解器Modelica.Math.Nonlinear.solveOneNonlinearEquation比传统的定点迭代 (FPI) 方案花费更多的时间来求解非线性方程?等式
y= arctan(1-x/1+x)-x
Run Code Online (Sandbox Code Playgroud)
求解solveOneNonlinearEquation器(基本上使用布伦特方法)求解上述方程需要 6 次迭代,而传统的迭代方法需要 111 次迭代。但是,迭代方案所用的 CPU 时间少于solveOneNonlinearEquation求解器所用的 CPU 时间(见图)。
为什么是这样?可能是由于迭代方案的计算效率,即迭代方案中较少的事件生成?

不同的寻根方法具有不同的属性。收敛速度只有一个,可以用迭代次数来计算,也可以用CPU时间来计算。两者都将在很大程度上取决于函数的起始值、曲率和单调性、边界、评估函数的成本、解析导数的可用性等。其他有趣的特性可能是收敛的保证,或者是否需要导数。
维基百科关于寻根算法的文章很好地概述了不同方法的优缺点:
如果一种方法在您的特殊情况下比其他方法效果更好,您应该实施并使用它!进行基准测试时要小心,很容易找到每种方法可以发挥作用的示例。出于这个原因,您应该在各种函数上测试每种算法,可能有 10 个不同的函数,并且每个函数都有不同的间隔。对于相同的函数但更大的开始间隔,二分将表现更差。Brent 是一种很好且经过验证的方法,这就是它在 MSL 中使用的原因。您甚至可以考虑向 MSL 发送拉取请求并添加替代方案。