Main Content

本页的翻译已过时。点击此处可查看最新英文版本。

Second-Order Integrator

输入信号的二阶积分

  • 库:
  • Simulink / Continuous

  • Second-Order Integrator block

说明

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

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

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

  • 为状态初始条件指定值

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

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

  • 为两个状态指定名称

  • 选择外部重置条件

  • 启用过零检测

  • Reinitialize dx/dt when x reaches saturation

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

定义初始条件

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

  • 要将状态 x 的初始条件定义为模块参数,请从 Initial condition source x 下拉菜单中选择 “internal”,并在 Initial condition x 字段中输入值。

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

  • 要将状态 dx/dt 的初始条件定义为模块参数,请从 Initial condition source dx/dt 下拉菜单中选择 “internal”,并在 Initial condition dx/dt 字段中输入值。

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

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

注意

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

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

限制状态

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

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

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

仅限制 x

如果您使用 Second-Order Integrator Limited 模块,默认情况下会限制两个状态。但是,您可以通过选择 Limit 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 模块上手动设置参数 Limit 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

重置状态

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

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

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

  • 选择 “either” 可在重置信号从零变为非零值或改变符号时重置状态。

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

Enabling Zero-Crossing Detection

此参数控制是否为此模块启用过零检测。默认情况下,Attributes 窗格上的 Enable zero-crossing detection 参数处于选中状态。但是,仅当 Configuration Parameters 对话框的 Solver 窗格上的 Zero-crossing control 设置为 “Use local settings” 时,此参数才起作用。有关详细信息,请参阅过零检测

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

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

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

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

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

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

如果您希望通过线性化来简化模型,可以选中 Ignore state limits and the reset for linearization,以使 Simulink 忽略状态限制和外部重置。

指定模块输出的绝对容差

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

指定输出端口的显示

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

指定状态名称

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

选择所有选项

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

端口

输入

全部展开

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

数据类型: double

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

Dependencies

要启用此输入端口,请将 Initial condition source x 参数设置为 “external”。

数据类型: double

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

Dependencies

要启用此输入端口,请将 Initial condition source dx/dt 参数设置为 “external”。

数据类型: double

输出

全部展开

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

数据类型: double

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

数据类型: double

参数

全部展开

x

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

  • internal” - 从 Initial condition x 参数获取状态 x 的初始条件。

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

限制

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

Dependencies

选择 “internal” 将启用 Initial condition x 参数并删除 X0 输入端口。

选择 “external” 将禁用 Initial condition x 参数并启用 X0 输入端口。

编程用法

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

指定状态 x 的初始条件。

限制

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

Dependencies

要启用此参数,请将 Initial condition source x 设置为 “internal”。

Initial condition source x 设置为 “external” 会禁用此参数并启用 X0 输入端口。

编程用法

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

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

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

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

Dependencies

选中此复选框将启用 Upper limit xLower limit x 参数。

编程用法

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

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

提示

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

Dependencies

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

编程用法

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

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

提示

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

Dependencies

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

编程用法

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

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

如果将 Wrapped upper value x 指定为 inf 并将 Wrapped lower value x 指定为 -inf,则永远不会发生绕回。

Dependencies

选中此复选框将启用 Wrapped upper value xWrapped lower value x

编程用法

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

指定绕回 x 的上限值。

Dependencies

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

编程用法

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

指定绕回 x 的下限值。

Dependencies

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

编程用法

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

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

  • 可以输入 “auto”、-1、正实数标量或向量。

  • 如果输入 “auto” 或 -1,则 Simulink 会使用 Configuration Parameters 对话框中的绝对容差值(请参阅Solver 窗格)来计算模块状态 x。

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

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

编程用法

模块参数 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 的初始条件来源指定为 “internal” 或 “external”。

限制

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

Dependencies

  • 选择 “internal” 启用 Initial condition dx/dt 参数并删除 dx 0 输入端口。

  • 选择 “external” 将禁用 Initial condition dx/dt 参数并启用 dx 0 输入端口。

编程用法

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

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

限制

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

Dependencies

  • Initial condition source dx/dt 设置为 “internal” 将启用此参数。

  • Initial condition source dx/dt 设置为 “external” 将禁用此参数。

编程用法

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

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

提示

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

Dependencies

选中此复选框将启用 Upper limit dx/dtLower limit dx/dt 参数。

编程用法

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

指定状态 dx/dt 的上限。

依存关系

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

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

编程用法

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

指定状态 dx/dt 的下限。

Dependencies

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

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

编程用法

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

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

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

  • 如果输入 auto–1,则 Simulink 会使用 Configuration Parameters 对话框中的绝对容差值(请参阅Solver 窗格)来计算模块的 dx/dt 输出。

  • 如果您输入一个数值,该值将覆盖 Configuration Parameters 对话框中的绝对容差。

编程用法

模块参数 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
类型:字符向量、字符串
值:' ' | 用户定义
默认值:' '

Attributes

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

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

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

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

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

编程用法

模块参数: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'

指定模块上的输出端口。

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

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

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

编程用法

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

模块特性

数据类型

double

直接馈通

多维信号

可变大小信号

过零检测

扩展功能

在 R2010a 中推出