在 Dymola 中使用牛顿求解器进行仿真时出错,但以成功结束

Error during simulation using Newton solver in Dymola but end with success

我遇到了在Dymola中用牛顿求解器求解非线性方程的错误,但是模拟成功,就像另一个问题,
我的问题是:
在求解器列表中,没有牛顿求解器,为什么Dymola会使用牛顿求解器? Dymola 是否只在 newton 求解器不起作用时才选择 dassal 求解器?

隐式求解器需要迭代以找到解决方案,因为它们使用未知变量来估计结果。首先估计这些变量,然后使用残差方程进行验证。此迭代需要在每个求解器步骤中完成,并且通常使用牛顿迭代来完成,因为这保证了良好的性能(一些 slide-deck on this, and the full lecture)。牛顿迭代的一个缺点是,它可能会在给定强非线性或次优猜测值的情况下失败。这就是错误消息指出应该提供更好的 "start values" 的原因。

求解器可以做的是从性能良好但并不总是稳定的牛顿迭代切换到速度较慢但更稳健的二分法。在 Dymola 中,这会给您一个警告(不幸的是记录为 ERROR),但模拟会继续。所以你的模型很难处理,但求解器仍然可以通过一些额外的工作来完成。

在您的情况下,提供更好的起始值似乎很困难,因为这发生在模拟期间而不是开始时(尽管在您显示的消息之前有相同类型的消息,第一个消息提供了更多信息)。因此,求解器本身似乎估计了一个很远的值,或者当时发生了一个事件,中断并重新启动了求解器。可能值得测试提供的选项 .

如果您想摆脱牛顿迭代,您需要选择一个显式求解器(例如 Dymola 中的 Euler、Rkfix、Dopri)。但您可能需要非常小的步骤才能成功模拟模型 - 使模拟变慢。