Main Content

Second-Order Integrator

输入信号的二阶积分

  • Second-Order Integrator block

库:
Simulink / Continuous

描述

Second-Order Integrator 模块和 Second-Order Integrator Limited 模块用来求解器二阶初始值问题:

d2xdt2=u,dxdt|t=0=dxo,x|t=0=xo,

其中 u 是系统的输入信号。因此,此模块是一个动态系统,它具有两个连续状态:x 和 dx/dt。

注意

这两个状态存在一种数学关系,即,dx/dt 是 x 的导数。为了在整个仿真过程中满足这种关系,Simulink 对模块的参数和行为进行了诸多限制。

Second-Order Integrator Limited 模块除了默认情况下基于指定的上限和下限值来限制状态外,它与 Second-Order Integrator 模块完全相同。有关详细信息,请参阅限制状态

Simulink® 软件可以使用若干不同的数值积分方法来计算模块的输出。每一种方法都有适用于特定情景的优点。使用“配置参数”对话框的求解器窗格可以选择最适合您的应用的方法。(有关详细信息,请参阅求解器选择标准。)所选求解器使用当前输入值计算 Second-Order Integrator 模块在当前时间步的状态。

使用模块参数对话框可以:

  • 指定每个状态初始条件的来源是内部还是外部

  • 为状态初始条件指定值

  • 为一个或两个状态定义上限和下限

  • 为每个状态指定绝对容差

  • 为两个状态指定名称

  • 选择外部重置条件

  • 启用过零检测

  • 当 x 达到饱和时重新初始化 dx/dt

  • 指定 Simulink 忽略状态限制和外部重置以进行线性化操作

定义初始条件

可以在模块对话框上将每个状态的初始条件逐个定义为参数,或者从外部信号输入一个或全部两个初始条件。

  • 要将状态 x 的初始条件定义为模块参数,请从 x 初始条件来源下拉菜单中选择内部,并在 x 初始条件字段中输入值。

  • 要从状态 x 的外部源提供初始条件,请将初始条件来源参数指定为外部。模块上出现一个额外的输入端口。

  • 要将状态 dx/dt 的初始条件定义为模块参数,请从 dx/dt 初始条件来源下拉菜单中选择内部,并在 dx/dt 初始条件字段中输入值。

  • 要从外部源为状态 dx/dt 提供初始条件,请将 dx/dt 初始条件来源指定为外部。模块上出现一个额外的输入端口。

如果您为两个状态初始条件都选择使用外部源,您的模块将如下所示。

注意

  • Simulink 不允许初始条件值为 infNaN

  • 如果您通过指定饱和界限来限制状态 x 或状态 dx/dt (请参阅限制状态),而一个或多个初始条件位于对应的范围外,则相应的状态将被初始化为最接近的有效值,并计算一组一致的初始条件。

限制状态

为二阶系统建模时,您可能需要限制模块的状态。例如,气缸内的活塞运动受牛顿第二定律制约,对活塞的位置 (x) 有所限制。使用 Second-Order Integrator 模块,您可以限制状态 x 和 dx/dt,使它们相互独立。您甚至可以在仿真过程中更改限制;但是,您不能改变状态是否受限制。一个重要的原则是,上限必须严格大于对应的下限。

当您限制了一个或两个状态时,模块的外观将发生变化。在这两种状态都受限制的情况下,模块显示如下。

对于每个状态,您可以使用模块参数对话框设置适当的饱和界限范围。

仅限制 x

如果您使用 Second-Order Integrator Limited 模块,默认情况下会限制两个状态。但是,您可以通过选择 x 限制并在相应的参数字段中输入范围,手动限制 Second-Order Integrator 模块上的状态 x。

这样,模块将按如下方式确定状态的值:

  • 当 x 小于或等于下限值时,x 的值保持在下限值,dx/dt 设置为零。

  • 当 x 介于下限值和上限值之间时,两个状态都按照二阶 ODE 给出的轨迹变化。

  • 当 x 大于或等于上限值时,x 的值保持在上限值,dx/dt 设置为零。

您可以选择在 x 达到饱和时将 dx/dt 重新初始化为新的值。请参阅当 x 达到饱和时重新初始化 dx/dt

仅限制 dx/dt

与状态 x 一样,状态 dx/dt 默认情况下在 Second-Order Integrator Limited 模块对话框的 dx/dt 窗格上设置为受限制。您可以在 Second-Order Integrator 模块上手动设置参数 dx/dt 限制。在任一情况下,都必须为 dx/dt 输入适当的限制。

如果您只限制状态 dx/dt,模块将按如下方式确定 dx/dt 的值:

  • 当 dx/dt 小于或等于下限值时,dx/dt 的值保持在下限值。

  • 当 dx/dt 介于下限值和上限值之间时,两个状态都按照二阶 ODE 给出的轨迹变化。

  • 当 dx/dt 大于或等于上限值时,dx/dt 的值保持在上限值。

当状态 dx/dt 保持在上限值或下限值时,x 的值受一阶初始值问题制约:

dxdt=L,x(tL)=xL,

其中 L 是 dx/dt 的限制值(上限或下限),tL 是 dx/dt 达到此限制值的时间,xL 是状态 x 在该时间的值。

限制两个状态

当您限制两个状态时,Simulink 将通过限制允许的 dx/dt 上限和下限值,使状态在数学意义上保持一致。这种限制对于满足以下约束很有必要:

  • 当 x 达到饱和界限值时,dx/dt 的值必须为零。

  • 要使 x 离开上限值,dx/dt 的值必须严格为负。

  • 要使 x 离开下限值,dx/dt 的值必须严格为正。

对于这些情况,dx/dt 的上限值必须严格为正,dx/dt 的下限值必须严格为负。

当两个状态都受限制时,模块将按如下方式确定状态:

  • 当 x 达到其限制值时,产生的行为与“仅限制 x”中描述的相同。

  • 当 dx/dt 达到其限制值之一时,产生的行为与“仅限制 dx/dt”中描述的相同 - 包括当 dx/dt 保持在其限制值时使用一阶 ODE 计算 x。在这种情况下,当 x 达到其限制值之一时,它会保持在该限制值并将 dx/dt 设置为零。

  • 当二者同时达到各自的限制值时,状态 x 的行为将覆盖 dx/dt 的行为,以保持状态的一致性。

如果您限制了两个状态,可以选择在状态 x 达到饱和时重新初始化 dx/dt。如果重新初始化后的值超出了 dx/dt 的指定范围,则将 dx/dt 重新初始化为最接近的有效值,并计算一组一致的初始条件。请参阅 当 x 达到饱和时重新初始化 dx/dt

重置状态

模块可以根据外部信号将其状态重置为指定的初始条件。要使模块重置其状态,请选择属性窗格上的外部重置选项之一。模块输入端口下方将显示一个触发端口,并指示触发类型。

  • 选择上升沿可在重置信号从零上升到正值、从负值上升到正值或从负值上升到零时重置状态。

  • 选择下降沿可在重置信号从正值下降到零、从正值下降到负值或从零下降到负值时重置状态。

  • 选择任一沿可在重置信号从零变为非零值或改变符号时重置状态。

重置端口具有直接馈通。如果模块输出直接或通过一系列带直接馈通的模块反馈到此端口中,则会产生代数环(请参阅代数环概念)。

启用过零检测

此参数控制是否为此模块启用过零检测。默认情况下,属性窗格上的启用过零检测参数处于选中状态。但是,仅当“配置参数”对话框的求解器窗格上的过零控制设置为使用局部设置时,此参数才起作用。有关详细信息,请参阅过零检测

当 x 达到饱和时重新初始化 dx/dt

对于某些建模应用程序,当状态 x 达到其限制值时,必须重新初始化 dx/dt,以使 x 立即退出饱和状态。您可以通过在属性窗格上选择当 x 达到饱和时重新初始化 dx/dt 来实现这一目的。

如果启用了此选项,当 x 达到饱和的那一刻,Simulink 将检查 dx/dt 初始条件(参数或信号)的当前值是否允许状态 x 立即退出饱和。如果允许,Simulink 将使用那一刻的初始条件(参数或信号)值重新初始化状态 dx/dt。如果不允许,Simulink 将在当前时刻忽略此参数,并将 dx/dt 设置为零,以使模块状态保持一致。

只有在 x 真正达到饱和界限的那一刻,此参数才适用。在那之后的任何时间,即在 x 保持饱和时,此参数并不适用。

有关详细信息,请参阅关于限制状态的各节内容。有关示例,请参阅弹球的仿真

忽略状态限制和外部重置以进行线性化

如果您希望通过线性化来简化模型,可以选中忽略状态限制和重置以便于线性化,以使 Simulink 忽略状态限制和外部重置。

指定模块输出的绝对容差

默认情况下,Simulink 软件会使用在“配置参数”对话框中指定的绝对容差值(请参阅Error Tolerances for Variable-Step Solvers)来计算 Integrator 模块的输出。如果此值不能提供足够的误差控制,请在参数对话框的 x 绝对容差字段中为状态 x 指定更合适的值,在 dx/dt 绝对容差字段中为状态 dx/dt 指定更合适的值。Simulink 将使用您指定的值来计算模块的状态值。

指定输出端口的显示

您可以使用 ShowOutput 参数控制是显示 x 还是 dx/dt 输出端口。您可以显示一个输出端口,也可以显示两个;但必须至少选择一个。

指定状态名称

您可以使用 StateNameXStateNameDXDT 参数指定 x 状态和 dx/dt 状态的名称。但是,您必须为这两个状态都指定名称,或者都不指定名称;不能只为 x 或者只为 dx/dt 指定名称。这两个状态名称必须具有完全相同的类型和长度。而且,状态数量必须能够被名称数量整除。

选择所有选项

如果选择所有选项,模块图标将如下所示。

端口

输入

全部展开

指向积分器系统的输入信号 u,指定为标量、向量或矩阵。

此端口没有直接馈通。

数据类型: double

外部信号,用于为积分器系统指定初始条件 x0。您可以将初始条件指定为标量、向量或矩阵。

此端口具有直接馈通。

依存关系

要启用此输入端口,请将 x 初始条件来源参数设置为外部

数据类型: double

外部信号,用于为积分器系统指定初始条件 dx0。您可以将初始条件 dx0 指定为标量、向量或矩阵。

此端口具有直接馈通。

依存关系

要启用此输入端口,请将 dx/dt 初始条件来源参数设置为外部

数据类型: double

外部重置信号是标量、向量或矩阵,用于将模块状态重置为初始条件。

此端口具有直接馈通。

依存关系

要启用此输入端口,请将外部重置参数设置为上升沿下降沿任一沿

数据类型: double

输出

全部展开

x 状态输出信号,以标量、向量或矩阵形式提供。

数据类型: double

dx 状态输出信号,指定为标量、向量或矩阵。

数据类型: double

参数

全部展开

x

指定状态 x 的初始条件的来源。

  • 内部 - 从 x 初始条件参数获取状态 x 的初始条件。

  • 外部 - 从连接到 X0 输入端口的外部模块获取状态 x 的初始条件。

限制

Simulink 软件不允许此模块的初始条件为 infNaN

依存关系

选择内部将启用 x 初始条件参数并删除 X0 输入端口。

选择外部将禁用 x 初始条件参数并启用 X0 输入端口。

编程用法

模块参数:ICSourceX
类型:字符向量、字符串
'internal' | 'external'
默认值'internal'

指定状态 x 的初始条件。

限制

Simulink 软件不允许此模块的初始条件为 infNaN

依存关系

要启用此参数,请将 x 初始条件来源设置为内部

x 初始条件来源设置为外部会禁用此参数并启用 X0 输入端口。

编程用法

模块参数:ICX
类型:字符向量、字符串
值:标量 | 向量 | 矩阵
默认值:'0.0'

将模块的状态 x 限制为介于 x 下限x 上限参数之间的值。Second-Order Integrator 模块的默认值为 offSecond-Order Integrator Limited 的默认值为 on

  • 要将状态 x 限制为介于 x 下限x 上限参数之间的值,请选中此复选框。

  • 要删除对状态 x 的范围限制,请清除此复选框。

依存关系

选中此复选框将启用 x 上限x 下限参数。

编程用法

模块参数:LimitX
类型:字符向量、字符串
值:'off' | 'on'
默认值:'off' (Second-Order Integrator) | 'on' (Second-Order Integrator Limited)

指定状态 x 的上限值。Second-Order Integrator 模块的默认值为 infSecond-Order Integrator Limited 模块的默认值为 1

提示

状态 x 的饱和上限必须严格大于饱和下限。

依存关系

要启用此参数,请选中 x 限制复选框。

编程用法

模块参数:UpperLimitX
类型:字符向量、字符串
值:'1' | 'inf' | 标量 | 向量 | 矩阵
默认值:'1' (Second-Order Integrator Limited) | 'inf' (Second-Order Integrator)

指定状态 x 的下限。Second-Order Integrator 模块的默认值为 -infSecond-Order Integrator Limited 模块的默认值为 0

提示

状态 x 的饱和下限必须严格小于饱和上限。

依存关系

要启用此参数,请选中 x 限制复选框。

编程用法

模块参数:LowerLimitX
类型:字符向量、字符串
值:'0' | '-inf' | 标量 | 向量 | 矩阵
默认值:'0' (Second-Order Integrator Limited) | '-inf' (Second-Order Integrator)

x 绕回上限值x 绕回下限值参数之间启用 x 绕回。启用 x 绕回可在对旋转和循环状态轨迹建模时消除对过零检测的需求,减少求解器重置,提高求解器性能和准确性,并增加仿真时间范围。

如果将 x 绕回上限值指定为 inf 并将 x 绕回下限值指定为 -inf,则永远不会发生绕回。

依存关系

选中此复选框将启用 x 绕回上限值x 绕回下限值

编程用法

模块参数:WrapX
类型:字符向量、字符串
值:'off' | 'on'
默认值:'off'

指定绕回 x 的上限值。

依存关系

要启用此参数,请选中绕回 x 复选框。

编程用法

模块参数:WrappedUpperValueX
类型:字符向量、字符串
值:标量 | 向量 | 矩阵
默认值:'pi'

指定绕回 x 的下限值。

依存关系

要启用此参数,请选中绕回 x 复选框。

编程用法

模块参数:WrappedLowerValueX
类型:字符向量、字符串
值:标量 | 向量 | 矩阵
默认值'-pi'

指定用于计算状态 x 的绝对容差。

  • 可以输入自动、-1、正实数标量或向量。

  • 如果输入自动或 -1,则 Simulink 会使用“配置参数”对话框中的绝对容差值(请参阅求解器窗格)来计算模块状态 x。

  • 如果输入实数标量值,则该值会覆盖“配置参数”对话框中的绝对容差且用于计算所有 x 状态。

  • 如果输入实数向量,则该向量的维度必须匹配状态 x 的维度。这些值将覆盖“配置参数”对话框中的绝对容差。

编程用法

模块参数: AbsoluteToleranceX
类型:字符向量、字符串
值:'auto' | '-1' | 任何正实数标量或向量
默认值:'auto'

为状态 x 分配唯一名称。

提示

  • 要为单个状态分配名称,请输入名称并用引号引起来,例如 ’position’。

  • 要为多个 x 状态分配名称,请输入以逗号分隔的列表并用花括号括起来,例如 {'a', 'b', 'c'}。每个名称都必须是唯一的。

  • 状态名称只会应用于所选模块。

  • 如果您为 x 指定状态名称,还必须为 dx/dt 指定状态名称。

  • x 和 dx/dt 的状态名称必须具有相同的类型和长度。

  • 状态数量必须能够被状态名称的数量整除。指定的名称数量可以少于 x 状态数量,但不能多于 x 状态数量。例如,可以在具有四个状态的系统中指定两个名称。第一个名称应用于前两个状态,第二个名称应用于后两个状态。但是,您必须保持一致,并对 dx/dt 的状态名称应用相同的方案。

  • 要在 MATLAB® 工作区中分配带变量的状态名称,请输入不带引号的变量。变量可以是字符向量、字符串或元胞数组。

编程用法

模块参数:StateNameX
类型:字符向量、字符串
值:' ' | 用户定义
默认值:' '

dx/dt

将状态 dx/dt 的初始条件来源指定为内部外部

限制

Simulink 软件不允许此模块的初始条件为 infNaN

依存关系

  • 选择内部启用 dx/dt 初始条件参数并删除 dx 0 输入端口。

  • 选择外部将禁用 dx/dt 初始条件参数并启用 dx 0 输入端口。

编程用法

模块参数ICSourceDXDT
类型:字符向量
'internal' | 'external'
默认值'internal'

指定状态 dx/dt 的初始条件。

限制

Simulink 软件不允许此模块的初始条件为 infNaN

依存关系

  • dx/dt 初始条件来源设置为内部将启用此参数。

  • dx/dt 初始条件来源设置为外部将禁用此参数。

编程用法

模块参数ICDXDT
类型:字符向量
值:标量 | 向量 | 矩阵
默认值:'0.0'

将模块的 dx/dt 状态限制为介于 dx/dt 下限dx/dt 上限参数之间的值。Second-Order Integrator 模块的默认值为 offSecond-Order Integrator Limited 的默认值为 on

提示

如果您为 x 设置了饱和界限值,则 dx/dt 上限dx/dt 下限定义的区间必须包含零。

依存关系

选中此复选框将启用 dx/dt 上限dx/dt 下限参数。

编程用法

参数:LimitDXDT
类型:字符向量
值:'off' | 'on'
默认值:'off' (Second-Order Integrator) | 'on' (Second-Order Integrator Limited)

指定状态 dx/dt 的上限。

依存关系

如果您限制 x,则此参数的值必须严格为正。

要启用此参数,请选中 dx/dt 限制复选框。

编程用法

模块参数UpperLimitDXDT
类型:字符向量
值:标量 | 向量 | 矩阵
默认值: 'inf'

指定状态 dx/dt 的下限。

依存关系

如果您限制 x,则此参数的值必须严格为负。

要启用此参数,请选中 dx/dt 限制复选框。

编程用法

模块参数LowerLimitDXDT
类型:字符向量
值:标量 | 向量 | 矩阵
默认值:'-inf'

指定用于计算状态 dx/dt 的绝对容差。

  • 您可以输入 auto–1、正实数标量或向量。

  • 如果输入 auto–1,则 Simulink 会使用“配置参数”对话框中的绝对容差值(请参阅求解器窗格)来计算模块的 dx/dt 输出。

  • 如果您输入一个数值,该值将覆盖“配置参数”对话框中的绝对容差。

编程用法

模块参数 AbsoluteToleranceDXDT
类型:字符向量、字符串、标量或向量
值:'auto' | '-1' | 任何正实数标量或向量
默认值:'auto'

为状态 dx/dt 分配唯一名称。

提示

  • 要为单个状态分配名称,请输入名称并用引号引起来,例如 ‘velocity’。

  • 要为多个 dx/dt 状态分配名称,请输入以逗号分隔的列表并用花括号括起来,例如 {'a', 'b', 'c'}。每个名称都必须是唯一的。

  • 状态名称只会应用于所选模块。

  • 如果您为 dx/dt 指定状态名称,也必须为 x 指定状态名称。

  • x 和 dx/dt 的状态名称必须具有相同的类型和长度。

  • 状态数量必须能够被状态名称的数量整除。指定的名称数量可以少于 dx/dt 状态数量,但不能多于 dx/dt 状态数量。例如,可以在具有四个状态的系统中指定两个名称。第一个名称应用于前两个状态,第二个名称应用于后两个状态。但是,您必须保持一致,并对 x 的状态名称应用相同的方案。

  • 要在 MATLAB 工作区中分配带变量的状态名称,请输入不带引号的变量。变量可以是字符向量、字符串或元胞数组。

编程用法

模块参数:StateNameDXDT
类型:字符向量、字符串
值:' ' | 用户定义
默认值:' '

属性

当重置信号中发生触发事件时,将状态重置为其初始条件。

  • - 不将状态重置为初始条件。

  • 上升沿 - 当重置信号从零上升到正值或从负值上升到正值时重置状态。

  • 下降沿 - 当重置信号从正值下降到零或从正值下降到负值时重置状态。

  • 任一沿 - 当重置信号从零变为非零值或改变符号时重置状态。

编程用法

模块参数:ExternalReset
类型:字符向量、字符串
'none' | 'rising' | 'falling' | 'either'
默认值:'none'

选择此项以启用过零检测。有关详细信息,请参阅过零检测

编程用法

参数:ZeroCross
类型:字符向量、字符串
值: 'on' | 'off'
默认值:'on'

在状态 x 达到饱和的瞬间,将 dx/dt 重置为其当前初始条件。

提示

dx/dt 初始条件的值必须能够让 x 立即变得不饱和。否则,Simulink 将忽略 dx/dt 的初始条件,以保持模块状态在数学意义上的一致性。

编程用法

模块参数: ReinitDXDTwhenXreachesSaturation
类型:字符向量、字符串
值:'off' | 'on'
默认值:'off'

为了进行线性化,让 Simulink 忽略指定的状态限制和外部重置。

编程用法

模块参数: IgnoreStateLimitsAndResetForLinearization
类型:字符向量、字符串
值:'off' | 'on'
默认值:'off'

指定模块上的输出端口。

  • 两者 - 同时显示 x 和 dx/dt 输出端口。

  • x - 只显示 x 输出端口。

  • dx/dt - 只显示 dx/dt 输出端口。

编程用法

模块参数:ShowOutput
类型:字符向量、字符串
'both' | 'x' | 'dxdt'
默认值'both'

模块特性

数据类型

double

直接馈通

a

多维信号

可变大小信号

过零检测

a 此模块的端口具有不同的直接馈通特性。

扩展功能

版本历史记录

在 R2010a 中推出