《Modelica》第2章“颤振”示例的问题举例说明

《Modelica》第2章“颤振”示例的问题举例说明,modelica,dymola,Modelica,Dymola,以下是模型的链接: Dymola 2021中以下结果的模拟结果为: 颤振停止时间=1.001s的模型 ChatterstopTime=1.5s的模型 正如我们所看到的,noEvent操作符确实减少了CPUTime,但它也会导致系统僵硬,通过对noEvent导致系统僵硬的原因进行更多解释,将更容易理解 基于Chatter模型的事件记录,仿真过程实际上使用了最小时间步长,因为derx不是一个连续函数。但是为什么这种方法不适合没有事件的模型呢 如果noEvent运算符意味着直接使用积分器,它可能要

以下是模型的链接: Dymola 2021中以下结果的模拟结果为:

颤振停止时间=1.001s的模型

ChatterstopTime=1.5s的模型

正如我们所看到的,noEvent操作符确实减少了CPUTime,但它也会导致系统僵硬,通过对noEvent导致系统僵硬的原因进行更多解释,将更容易理解

基于Chatter模型的事件记录,仿真过程实际上使用了最小时间步长,因为derx不是一个连续函数。但是为什么这种方法不适合没有事件的模型呢


如果noEvent运算符意味着直接使用积分器,它可能要求方程组中的函数必须是连续的?因此,这是否意味着在抖动示例中使用的模型不合适,因为该模型中的函数不是连续的?

在抖动示例中使用的模型不合适,因为它不是连续的,并且来自dassl的错误消息只是一条锅炉板消息,因此,模型不是僵硬的,而是不连续的

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

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

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

摩擦的解决方案不是引入noEvent,而是添加一个卡滞模式,如Modelica.Mechanical.Rotational.Components.Bearing摩擦力。

抖动示例中使用的模型不合适,因为它不是连续的,来自dassl的错误消息只是一个锅炉板消息,因此,模型不是僵硬的,而是不连续的

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

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

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

摩擦的解决方案不是引入noEvent,而是添加一个卡滞模式,如Modelica.Mechanical.Rotational.Components.Bearing摩擦力。

这里有更多的抖振示例:这里有更多的抖振示例: