主要内容

讨论二阶导数过零检测

变步解算器动态调整时间步长,使其增加当一个变量变化缓慢,减少变量变化时迅速。这种行为使解算器采取许多小步骤不连续,因为附近的变量是本地区快速变化。这提高了准确性,但可以导致过度的仿真时间。

金宝app®使用一种技术,即讨论二阶导数过零检测精确定位一个不连续不必诉诸过小的时间步长。通常这种技术提高了仿真运行时间,但它可能会导致一些模拟停止之前预期的完成时间。

金宝app为此模型使用了两个算法:非适应和适应。关于这些技术的信息,请参阅零交点的算法

展示过多讨论二阶导数过零检测的影响

这个示例提供了三个模型,说明零交点行为:example_bounce_two_integrators,example_doublebounce,example_bounce

example_bounce_two_integrators模型演示了如何过度零交叉会导致仿真停止之前预期的完成时间,除非你使用自适应算法。

example_bounce模型使用一个更好的模型设计,实现使用双积分球的动力学,比example_bounce_two_integrators

example_doublebounce模型演示了如何自适应算法成功地解决了一个复杂的系统,有两个不同的零交点的要求。

考虑到example_bounce_two_integrators模型。它使用两个单集成商来计算球的垂直速度和位置的时间模拟。

  1. 通过运行打开模型open_system (“example_bounce_two_integrators”)在命令行中。

  2. 一旦出现框图,设置解决细节>零交点选项>算法参数解算器面板模型的配置参数非适应。模型的停止时间设置为20年代。您可以更改此设置仿真软件将来发布或金宝app解算器面板模型的配置参数。

  3. 模拟模型。

你现在可以查看和分析仿真结果。

在最近的一次检测的最后部分的模拟,你会发现速度徘徊在略高于零。

改变模拟停止时间25 s和模拟模型。连续仿真停止错误由于过度零交点事件的比较为零和位置。

金宝app仿真软件将停止仿真模型“example_bounce_two_integrators”,因为2 0交叉信号(s)确定连续低于1000年造成零交叉事件的时间间隔在20.357636989536076和20.357636990631594之间。- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -连续零交点数量:1000零点交叉信号名称:RelopInput块类型:RelationalOperator块路径:“example_bounce_two_integrators /比较零/比较”- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -连续零交点数量:500零点交叉信号名称:IntgLoLimit块类型:集成块路径:“example_bounce_two_integrators /位置”- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

虽然你可以通过调整增加这个极限解决模型配置参数> >连续数量的零交叉参数,使这种变化仍不允许仿真25 s。

改变解决细节>零交点选项>算法参数解算器面板模型的配置参数自适应25 s再次和模拟模型。

放大的最后5秒模拟,你可以看到,结果更完整和更接近预期的弹力球的动力学的解析解。喋喋不休的数量你看到是系统的状态接近零的结果,预计在数值模拟。

example_bounce模型使用二阶积分器块弹力球的动态模型。这是首选方法球的双积分模型的动力学解算器性能。比较解算器的性能example_bounce_two_integratorsexample_bounce,试着运行两个模型的解算器分析器。两种模型的详细比较,看到模拟弹力球

并排比较的自适应和非适应讨论二阶导数过零检测算法,明白了双重弹力球:使用自适应零交点位置

防止过度的零交叉

使用下面的表格来防止过度的零交点模型中的错误。

变化类型 变化的过程 好处

增加的数量允许零交叉

增加的价值连续的零交叉。选择在解算器面板的配置参数对话框。

这可能给您的模型足够的时间解决零交叉。

放松信号阈值

选择自适应算法下拉和增加的价值信号阈值选择在解算器面板的配置参数对话框。

解算器需要更少的时间来精确定位零交叉。这可以减少仿真时间和连续消除过多的零交点错误。然而,放松信号阈值可能会降低精度。

使用自适应算法

选择自适应算法下拉的解算器面板的配置参数对话框。

该算法动态调整零点交叉阈值,从而提高了精度和减少的数量连续零交叉检测到。这个算法可以选择指定的时间的宽容信号阈值

禁用零交点检测为一个特定的块

  1. 清除使讨论二阶导数过零检测复选框块的参数对话框。

  2. 选择使用本地设置讨论二阶导数过零控制下拉的解算器面板的配置参数对话框。

禁用本地零交点检测防止特定的块连续停止仿真,因为过度的零交叉。所有其他块继续受益于零交点检测提供增加的准确性。

禁用零交点检测整个模型

选择禁用所有讨论二阶导数过零控制下拉的解算器面板的配置参数对话框。

这可以防止零交叉检测到任何地方在您的模型中。结果是,你的模型不再讨论二阶导数过零检测提供受益于增加的准确性。

如果使用ode15s解算器,考虑调整数值微分公式的顺序

选择一个值最大的订单下拉的解算器面板的配置参数对话框。

有关更多信息,请参见最大的订单

减少最大的步长

输入一个值马克斯步长选择在解算器面板的配置参数对话框。

足够小的解算器需要步骤解决零交叉。然而,减少步长可以增加仿真时间,很少有必要在使用自适应算法。

模拟器可以零交点小姐事件如何

弹跳和double-bounce模型,模拟弹力球双重弹力球:使用自适应零交点位置表明,高频波动对不连续(唠叨)会导致模拟过早地停止。

也有可能为解决完全零交叉小姐如果解决错误公差太大。这是可能的,因为零交点检测技术检查的价值信号改变了大时间步后签署。迹象表明,零交叉发生变化,和零交点的算法搜索精确穿越时间。然而,如果出现零交叉在一个时间步,但步骤的开始和结束的值不显示信号变化,穿越没有检测它的求解步骤。

下面的图显示了一个信号,过零。在第一种情况下,积分器的步骤在事件因为信号之间没有改变时间的步骤。第二,解算器检测到信号变化,因此检测零交点事件。

考虑的two-integrator实现反弹模型。

分析的最后0.5秒的模拟解决使用分析器显示模拟检测44零交点的事件比较为零块和22日活动的输出位置块。

增加的价值相对宽容参数1)依照而不是默认的1 e - 3。你可以改变这个参数解算器的细节部分的解算器窗格中配置参数对话框或使用set_param指定RelTol作为“1飞行”

分析仿真的最后0.5秒的新的相对宽容的求解表明,它只检测24零交点的事件比较为零块和12的输出事件位置块。

讨论二阶导数过零检测模块

一块可以注册一套零交点变量,每一个都是一个状态变量的函数,可以不连续。零交点函数通过零从正面或负面价值对应的中断发生时。注册零点交叉变量是每个仿真步长更新结束时,任何变量,改变了标志被认为是有一个零交点的事件。

如果检测到任何零交叉,之间的模型软件篡改之前和现在的每个变量的值改变信号估计零交金宝app叉的时代,也就是说,不连续。

请注意

讨论二阶导数过零检测算法可以架零交点事件只有信号的数据类型

块零交叉注册

下表登记列表块零交叉,解释了块使用零交叉。

数量的零交叉检测

腹肌

人,来检测,当输入信号过零上升或下降的方向。

强烈反对

两个,一个检测上阈值时,和一个检测时更低的阈值。

比较恒定的

时,检测信号等于一个常数。

比较为零

= 0时,检测信号。

死区

两个,一个检测时死区输入(输入信号减去下限),和一个检测死区退出时(输入信号减去上限)。

启用

,如果一个启用端口是在一个子系统,它提供的功能检测零交叉。的细节,使用启用子系统

从文件

人,来检测,当输入信号有不连续的上升或下降的方向

从工作空间

人,来检测,当输入信号有不连续的上升或下降的方向

打穿越

一个或两个。如果没有输出端口,只有一个零交叉检测,当输入信号阈值。如果有一个输出端口,第二个零交叉是用于将输出重新从1创建一个impulse-like输出为0。

如果

1、如果条件满足时检测。

积分器

如果存在复位端口,检测时发生复位。

如果输出是有限的,有三个零交叉:一检测,达到饱和上限,一个检测达到更低的饱和限制时,和一个检测当饱和了。

极大极小

,为每个元素的输出向量,来检测当一个输入信号是新的最小值或最大值。

关系操作符

人,来检测,当指定的关系是正确的。

继电器

1,如果继电器,检测接通。如果继电器,检测关闸。

饱和

两个,一个检测达到上限或离开时,和一个检测当达到下限或离开。

二阶积分器

5、两个检测时的状态x达到上限或下限,两个检测时的状态dx/dt达到上限或下限,来检测当叶子饱和状态。

标志

人,来检测,当输入经过零。

信号编辑器

人,来检测,当输入信号有不连续的上升或下降的方向

一步

1、检测步骤。

开关

1、检测开关条件发生时。

开关情况

人,来检测,当条件满足。

触发

里面,如果触发端口是一个子系统,它提供的功能检测零交叉。有关详细信息,请参见使用触发子系统

启用并触发子系统

两个,一个用于启用端口,一个用于触发端口。更多细节,请参阅:使用启用并触发子系统

从电子表格

人,来检测,当输入信号有不连续的上升或下降的方向。

请注意

讨论二阶导数过零检测Stateflow也是可用的®图表,使用连续时间模式。看到为连续时间模拟配置Stateflow图(Stateflow)为更多的信息。

实现示例:饱和

仿真软件块寄存器零交叉的一个例子金宝app是饱和。讨论二阶导数过零检测识别这些饱和状态事件块:

  • 输入信号到达上限。

  • 输入信号的叶子的上限。

  • 输入信号到达下限。

  • 输入信号的叶子下限。

金宝app仿真软件模块,定义自己的国家事件被认为是内在的零交叉使用了交叉块接收零交点的显式通知事件。看到块零交叉注册将零交叉的块列表。

国家事件的检测取决于内部讨论二阶导数过零信号的建设。这个信号是无法访问的框图。饱和的块,用于检测的信号零交叉的上限zcSignal = UpperLimit- - - - - -u,在那里u是输入信号。

讨论二阶导数过零信号方向有一个属性,它可以有这些值:

  • 不断上升的——零交叉发生在信号上升或通过零,或者当一个信号叶零,变得积极。

  • 下降——零交叉时落在一个信号或通过零,或者当一个信号叶零,变得消极。

  • 要么——出现零交叉如果出现上升或下降状态。

饱和块上限,零交叉的方向要么。这使得进出饱和度事件检测信号使用相同的零交点。

相关的话题