一种可变步长求解器动态调整时间步长大小,使其当变量缓慢变化增加,并且当变量迅速变化减小。此行为导致求解器采取的不连续的附近许多小步骤,因为变量被迅速在该区域中发生变化。这提高了精度,但可能会导致过多的模拟时间。
万博1manbetx®使用一种被称为技术过零检测准确地定位的不连续性不诉诸过小时间步长。通常这种技术提高了模拟运行时间,但可以预期的完成时间之前导致一些模拟暂停。
万博1manbetxSimulink的使用两种算法用于此目的:非自适应和适应性。有关这些技术的信息,请参阅过零算法。
这个例子提供了三种模式,说明零交叉特性:example_bounce_two_integrators
,example_doublebounce
和example_bounce
。
该example_bounce_two_integrators
模型表明过度的过零点怎么能预期完成时间之前使模拟停止,除非你使用的自适应算法。
该example_bounce
机型采用了更好的模型设计,比example_bounce_two_integrators
。
该example_doublebounce
模型演示如何自适应算法成功地解决了与两个不同的过零要求一个复杂的系统。
考虑example_bounce_two_integrators
模型。它使用两个单积分来计算球的垂直速度和位置在模拟的时间。
通过运行打开模型open_system( 'example_bounce_two_integrators')
在命令行。
一旦框图出现时,设置的求解详细资料>过零选项>算法参数在求解示范的配置参数的窗格以非适应性
。设置模型的停止时间为20秒。您可以在Simulink工具条或更改此设置的万博1manbetx求解窗格模型配置参数。
模拟模型。
现在,您可以查看和分析模拟结果。
在模拟的最后部分的仔细观察,你会看到略高于零的是速度徘徊。
更改模拟停止时间25个S和模拟模型。模拟一个错误停止由于在比较为零,并定位街区过多连续零事件。
万博1manbetx的Simulink将停止的模型“example_bounce_two_integrators”的模拟,因为2过零信号(S)和20.357636989536076之间20.357636990631594下面鉴定1000个引起的连续零交叉事件在时间间隔。--------------------------------------------------------------------------------Number of consecutive zero-crossings : 1000 Zero-crossing signal name : RelopInput Block type : RelationalOperator Block path : 'example_bounce_two_integrators/Compare To Zero/Compare' -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- Number of consecutive zero-crossings : 500 Zero-crossing signal name : IntgLoLimit Block type : Integrator Block path : 'example_bounce_two_integrators/Position' --------------------------------------------------------------------------------
虽然可以通过调整增加该限制型号配置参数>求解>连续零个交叉数参数,做出这样的转变仍然不允许模拟去25秒。
更改求解详细资料>过零选项>算法参数在求解示范的配置参数的窗格以自适应
并再次模拟模型25秒。
在最后5秒的模拟放大,你可以看到,结果是更完整,更接近反弹球的动态预期的解析解。您所看到的喋喋不休的量是系统的状态接近零的结果和数值模拟的预期。
该example_bounce
模型采用二阶积分块的反弹球的动力学模型。这是对球的动力学求解器对性能的双重整合模式的首选方法。为了比较的求解器性能example_bounce_two_integrators
和example_bounce
,可以尝试这两种模式运行求解器探查。对于这两种mo0dels的详细比较,看一个弹跳球的模拟。
用于自适应和非自适应的过零检测算法的侧方比较,看双弹跳球:自适应零交叉位置的使用。
使用下表,以防止模型过大过零误差。
更改类型 | 更换步骤 | 优点 |
---|---|---|
增加允许的过零点的个数 |
增加的价值连续零个交叉数。该选项求解窗格中的配置参数对话框。 |
这可能给你的模型有足够的时间来解决零交叉。 |
放松信号门限 |
选择自适应来自算法下拉,增加的价值信号门限该选项求解窗格中的配置参数对话框。 |
求解器需要较少的时间来精确定位零点。这可以减少模拟时间,并消除连续过零误差的数量过多。然而,放宽信号门限准确性可能会降低。 |
使用自适应算法 |
选择自适应来自算法下拉上求解窗格中的配置参数对话框。 |
该算法动态地调整过零阈值,这改善了精度,并减少检测到的连续的过零点的数目。有了这个算法可以选择指定的选项,无论是时间公差和信号门限。 |
禁用过零检测针对特定块 |
|
本地禁用过零检测防止停止因为过度的连续的过零点的仿真的特定块。所有其它块继续受益于增加的准确度即过零检测提供。 |
禁用过零检测整个模型 |
选择 |
这可以防止从零感口岸在模型中检测到的任何地方。一个后果是,从提高精度的模型不再好处,过零检测提供。 |
如果使用 |
选择从一个值 |
欲了解更多信息,请参阅最大订单。 |
减小最大步长 |
输入的值 |
求解器采取措施足够小,以解决零交叉。然而,减小步长可以使用自适应算法时增加仿真时间,并且很少需要。 |
弹跳和双反弹车型,一个弹跳球的模拟和双弹跳球:自适应零交叉位置的使用显示有关的不连续性(抖动),该高频率波动会导致模拟过早停止。
也可以用于求解完全错过零个交叉,如果求解器误差公差过大。这是可能的,因为看过零检测技术检查是否有信号的值的主要时间步骤之后已经改变的迹象。符号改变表明发生过零点,以及用于精确交叉时间过零算法搜索。然而,如果一个时间步长内发生过零,但在开始时和步骤结束时的值不指示符号改变,过交叉的解算器的步骤而不检测它。
如下图所示跨越零的信号。在第一种情况下,由于符号没有时间步长之间变化积分步过该事件。在第二个中,解算器检测符号变化,因此检测所述过零事件。
考虑反弹模型的两个积分的实现。
最后0.5秒使用解算器探查示出了仿真的谱,该仿真检测在44的过零事件与0比较在的输出块和22个事件位置块。
增加的价值相对宽容参数1E-2
而不是默认的1E-3
。您可以更改这个参数求解详情的部分求解窗格中配置参数对话框或使用set_param
指定RELTOL
如'1E-2'
。
剖析最后0.5秒的模拟用的求解器显示新的相对宽容它检测到的只有24零事件与0比较在的输出块和12个事件位置块。
A嵌段可以注册一组零交叉的变量,其中的每一个是可以具有不连续的状态变量的函数。零交叉功能从正或负的值穿过零当相应的不连续性发生。注册过零变量在每个模拟步骤结束更新,并且已改变符号中的任何变量被识别为具有有一个过零事件。
如果检测到任何的过零点,每个变量的先前值和当前值之间的的Simulink软件进行万博1manbetx内插,改变了符号估计过零点,也就是说,不连续的次数。
过零检测算法可以括号的过零事件仅用于数据类型的信号双
。
该寄存器零个交叉和下表列出了块解释块如何使用过零点。
块 | 过零检测的次数 |
---|---|
一个,当所述输入信号在任一上升或下降方向越过零检测。 |
|
两个,一个当所述上阈值被接合,以检测,并且当所述下阈值被接合的一个来检测。 |
|
一个,当信号等于一个常数来检测。 |
|
一,当信号等于零检测。 |
|
当进入死区(输入信号减去下限值)两种,一种进行检测,并且当所述死区退出(输入信号减去的上限)一个来检测。 |
|
一个,如果使能端口是内部的子系统块的,它提供了用于检测零个交叉的能力。有关详细信息,使用支持子系统。 |
|
一个,以检测当所述输入信号具有无论是在上升或下降方向上的不连续 |
|
一个,以检测当所述输入信号具有无论是在上升或下降方向上的不连续 |
|
一个或两个。如果没有输出端口,仅存在一个零交叉检测在输入信号击中的阈值。如果有一个输出端口,所述第二过零点被用于从带1的输出回到0来创建的脉冲状输出。 |
|
一,当如果条件满足检测。 |
|
如果复位端口的存在,当发生复位检测。 如果输出被限制,有三个零交叉:在达到饱和上限,当一个检测到,一个用于检测在达到饱和下限的情况下,和饱和度被留下,当一个检测到。 |
|
之一,所述输出向量的每个元素,以检测当输入信号是新的最小值或最大值。 |
|
一,以检测当指定的关系也是如此。 |
|
一个,如果中继是关闭的,以检测接通点。如果继电器上,以检测所述切断点。 |
|
两个,一个用于检测何时达到或左的上限,并在达到或左侧下限,当一个检测到。 |
|
五,两到检测状态时,X达到上限或下限,二时的状态,以检测DX/DT达到上限或下限,和一个当一个状态的叶子饱和检测。 |
|
一个,当所述输入过零时检测。 |
|
一个,以检测当所述输入信号具有无论是在上升或下降方向上的不连续 |
|
其中,检测步骤的时间。 |
|
一个,当开关条件发生来检测。 |
|
一,当的情况下满足条件来检测。 |
|
一个,如果触发端口是内部的子系统块的,它提供了用于检测零个交叉的能力。有关详细信息,请参阅使用触发子系统。 |
|
二,一个用于启用端口,一个用于触发端口。有关详细信息,请参阅:使用启用并触发子系统 |
过零检测,也可用于Stateflow的®图表使用连续时间模式。看到配置一个Stateflow的连续时间模拟图(状态流)的更多信息。
该寄存器过零点的Simulink万博1manbetx模块的一个例子是饱和块。过零检测识别在饱和块这些状态的事件:
输入信号达到上限。
输入信号离开上限。
输入信号达到下限值。
输入信号离开下限。
万博1manbetx定义自己的状态事件Simulink模块都被认为具有内在的过零点。使用命中跨越块接收零事件的明确通知。看到块那注册过零点对于块的名单,纳入零个交叉。
的状态事件的检测依赖于内部过零信号的结构。该信号是没有被框图访问。对于饱和度块,被使用的信号,以检测过零点的上限为zcSignal = UpperLimit用户
-ü
,其中ü
是输入信号。
零交叉信号具有的方向属性,该属性可具有这些值:
升起- 当信号上升到或经过零,或当信号叶零,变为正时,发生零交叉。
落下- 当信号降到或通过零,或当信号叶零,变为负的时,发生零交叉。
或- 如果任一个上升或下降条件发生时,发生零交叉。
为了饱和框上限值,则过零点的方向是或。这使进入和离开饱和事件使用相同的过零信号来检测。