Modelica by example 第 2 章中 "Chattering" 示例的问题

Issues with the "Chattering" example in Chapter 2 of Modelica by example

这里是模型的link:https://mbe.modelica.university/behavior/discrete/decay/#chattering 以下结果在 Dymola 2021 中的模拟结果为:

模型 WithChatter(stopTime=1.001s)

模型 WithChatter(stopTime=1.5s)

正如我们所看到的,noEvent 运算符确实减少了 CPUTime,但它也会导致系统僵硬,如果更多地解释为什么 noEvent 会导致系统僵硬,将更容易理解。

根据模型WithChatter的事件记录,仿真过程实际上使用了最小时间步长,因为der(x)不是连续函数。但为什么这种方法不适合 WithNoEvents 模型?(https://mbe.modelica.university/behavior/discrete/decay/#speed-vs-accuracy)

如果noEvent算子是直接使用积分器,可能要求方程组中的函数必须是连续的?那么这是否意味着 Chattering 示例 (https://mbe.modelica.university/behavior/discrete/decay/#chattering) 中使用的模型不合适,因为该模型中的函数不是连续的?

chattering 示例中使用的模型不合适,因为它不是连续的,dassl 的错误消息只是一条 boiler-plate 消息,因此该模型并不僵硬,但正如您所发现的那样是不连续的.

Markus A 在相关问题 中有一个很好的观点,即使用 noEvent 来避免抖动通常不是一个好主意,通常应该尝试重写模型而不是添加 noEvent。

这个特定模型有点类似于摩擦模型

der(v)=(if v>=0 then -1 else 1)+f_other/m;

摩擦的解决方案不是引入noEvent,而是像Modelica.Mechanics.Rotational.Components.BearingFriction那样添加卡死模式。