Main Content

dlinmod

在工作点附近提取离散时间线性状态空间模型

说明

[A,B,C,D] = dlinmod(mdl,Ts) 通过逐个线性化模型中的每个模块,计算模型 mdl 中表示的离散时间系统的采样时间为 Ts 的线性状态空间模型。模型中的 InportOutport 模块表示系统输入和输出。您可以使用 dlinmod 函数来线性化离散系统、多速率系统以及同时包含离散和连续动态特性的混合系统。

逐模块解析算法对大多数模块使用预编程的解析模块雅可比矩阵。与扰动算法相比,这种方式生成的线性化通常更准确。Simulink® Control Design™ 文档包含具有预编程解析雅可比矩阵的模块列表,还按模块讨论了用来进行线性化的分析算法。

逐模块解析算法还允许对有问题的模块(例如 Transport Delay 模块和 Quantizer 模块)进行特殊处理。

注意

linmod 函数仅提供基本的线性化功能。要获得完整的线性化功能,请使用 Simulink Control Design 软件。有关详细信息,请参阅选择线性化工具 (Simulink Control Design)

[A,B,C,D] = dlinmod(mdl,Ts,x,u) 在由状态值 x 和输入值 u 定义的工作点处计算模型 mdl 中表示的离散时间系统的线性状态空间模型。

[A,B,C,D] = dlinmod(mdl,Ts,x,u,opts,-v5) 使用版本 5.3 及更早版本的完整模型扰动算法和选项 opts,计算模型 mdl 中表示的系统的离散线性状态空间模型。

[A,B,C,D] = dlinmod(mdl,Ts,x,u,opts,xpert,upert,-v5) 使用包含选项 opts、状态扰动值 xpert 和输入扰动值 upert 的完整模型扰动算法,计算模型 mdl 中表示的系统的离散线性状态空间模型。

[n,d] = dlinmod(___) 以传递函数形式返回离散线性模型。

sys = dlinmod(___) 返回一个结构体,其中包含离散线性模型、状态名称、输入和输出名称以及有关工作点的信息。

输入参数

全部折叠

要线性化的模型的名称,指定为字符串或字符向量。

数据类型: char | string

对模型进行线性化时所在的工作点的模型状态,指定为结构体或向量。将对模型进行线性化时所在的工作点指定为模型状态和输入值的组合。

要将模型的状态提取为结构体,请使用 Simulink.BlockDiagram.getInitialState 函数。您可以通过修改 signals 子结构体的 values 字段来编辑模型状态的值。例如,使用以下命令访问名为 mdl 的模型的状态值。

mdlState = Simulink.BlockDiagram.getInitialState("mdl");
stateVals = mdlState.signals.values;

在以下情况下,必须使用结构体格式指定工作点的状态:

  • 该模型是一个模型引用层次结构。

  • 该模型的状态具有不同的数据类型。

  • 该模型中有一些状态的数据类型不是 double

对模型进行线性化时所在的工作点的输入值,指定为向量。将对模型进行线性化时所在的工作点指定为模型状态和输入值的组合。

数据类型: double

离散时间线性化模型的采样时间,指定为以秒为单位的标量数值。如果满足以下所有条件,则线性化模型在采样时间为 Ts 时对常量输入值具有相同的频率和时间响应:

  • 要线性化的模型包含线性模块、多速率模块、离散模块和连续模块。

  • 离散时间线性化模型 Ts 的采样时间是您线性化的模型中所有采样时间的整数倍。

  • 要线性化的系统是稳定的。

当线性化模型的采样时间不是您线性化的模型中所有采样时间的整数倍时,线性化模型通常是不具有状态空间表示的时变系统。

系统在以下情况下是稳定的:

  • 离散时间线性化模型的采样时间大于 0 (Ts > 0),且线性化矩阵 A 的特征值在单位圆内。

  • 离散时间线性化模型的采样时间等于 0 (Ts = 0),且线性化矩阵 A 的特征值在左半平面内。

当系统不稳定并且采样时间 Ts 不是其他采样时间的整数倍时,线性化状态空间模型的矩阵 AB 可能为复矩阵。线性化矩阵 A 的特征值仍提供稳定性的良好指示。

线性化选项,指定为具有下表中所述的元素和值的向量。

元素默认值
opts(1)

用于扰动模型状态和输入的扰动增量值。

linmod 函数仅在使用 v5 扰动算法时使用您指定的值。使用默认逐模块线性化算法时,linmod 函数会忽略您指定的值,并始终使用默认值 1e-5

1e-5
opts(2)线性化过程中计算模块的非负时间。0
opts(3)

从没有直接馈通的模块中删除额外状态的选项。

  • 0 - 不从没有直接馈通的模块中删除额外状态。

  • 1 - 从没有直接馈通的模块中删除额外状态。

0

状态扰动值,指定为结构体或向量。在以下情况下,您必须使用结构体格式指定状态扰动值:

  • 该模型是一个模型引用层次结构。

  • 该模型的状态具有不同的数据类型。

  • 该模型中有一些状态的数据类型不是 double

要将模型状态提取为结构体,请使用 Simulink.BlockDiagram.getInitialState 函数。然后,您可以编辑结构体中的值,通过修改 signals 子结构体的 values 字段来指定每个状态的扰动值。例如,使用以下命令访问名为 mdl 的模型的状态。

mdlState = Simulink.BlockDiagram.getInitialState("mdl");
stateVals = mdlState.signals.values;

只有通过调用 linmodv5 函数或指定 -v5 输入选项,使用 5.3 版及更早版本中的扰动算法对模型进行线性化时,才能指定状态和输入扰动值。

默认情况下,使用 opts 输入向量的第一个元素中指定的增量值计算扰动值,如以下代码所示。

xpert = opts(1) + 1e-3*opts(1)*abs(x);

输入扰动值,指定为结构体或向量。

只有通过调用 linmodv5 函数或指定 -v5 输入选项,使用 5.3 版及更早版本中的扰动算法对模型进行线性化时,才能指定状态和输入扰动值。

默认情况下,使用 opts 输入向量的第一个元素中指定的增量值计算扰动值,如以下代码所示。

upert = opts(1) + 1e-3*opts(1)*abs(u);

输出参量

全部折叠

线性化模型的状态空间表示,以向量形式返回。

线性化模型的传递函数表示,以向量形式返回。

线性化模型,以包含状态名称、输入和输出名称以及工作点信息的结构体形式返回。

限制

  • linmod 函数仅提供基本的线性化功能。要获得完整的线性化功能,请使用 Simulink Control Design 软件。有关详细信息,请参阅选择线性化工具 (Simulink Control Design)

  • 在线性化模型引用层次结构时,将顶层模型和引用模型配置为在普通模式下进行仿真。对在加速模式下进行仿真的多速率引用模型进行线性化时存在多种限制。

  • 当您对包含配置为在加速模式下进行仿真的引用模型的模型引用层次结构进行线性化时,软件会使用默认算法对顶层模型进行线性化,并使用数值扰动算法对引用模型进行线性化。

  • 包含一个或多个配置为使用局部求解器的引用模型的模型不支持线性化。有关详细信息,请参阅Use Local Solvers in Referenced Models

提示

  • 您可以使用 dlinmod 函数将系统转换为不同的采样时间,包括将离散系统转换为连续系统,反之亦然。

  • 要查找离散或连续系统的频率响应,请使用 bode 函数。

  • 默认情况下,系统时间为零。对于依赖时间的系统,您可以使用 opts 输入参量的第二个元素来指定系统时间。

  • 在线性化中保留状态顺序,以使线性化模型中的状态顺序与非线性模型中的状态顺序匹配。通过将模型名称用作执行 sizes 阶段的编程接口,您可以获得有关模型中的状态以及与状态相关联的模块的信息。名为 blks 的返回参量是一个向量,它包含与状态相关联的每个模块的名称。有关详细信息,请参阅Use Model Name as Programmatic Interface

    [sys,x0,blks,st] = modelName([],[],[],'sizes');
  • 您可以使用以下函数将线性化单输入多输出系统的状态空间线性化表示转换为另一种形式:

    • ss2tf - 从状态空间转换为传递函数形式。

    • ss2zp (Signal Processing Toolbox) - 从状态空间转换为零极点形式。

  • 您可以使用 ss (Control System Toolbox) 函数从线性化模型创建状态空间模型对象。您可以使用状态空间模型对象来表示用于控制设计的线性时不变 (LTI) 系统。您还可以组合多个 LTI 状态空间模型来表示更复杂的系统。

  • 在创建状态空间模型对象后,您可以使用 tf (Control System Toolbox) 函数转换为传递函数形式,或使用 zpk (Control System Toolbox) 函数转换为零极点增益形式。

  • 在对包含 Transport DelayDerivative 模块的模型进行线性化时,推荐使用默认的逐模块算法。逐模块算法将 Transport DelayDerivative 模块替换为帕德逼近。使用 v5 扰动算法来对包含 Transport DelayDerivative 模块的模型进行线性化可能比较麻烦。有关详细信息,请参阅 线性化模型

  • 在使用 v5 扰动算法对包含 Transport DelayDerivative 模块的模型进行线性化之前,请将 Transport DelayDerivative 模块替换为 Simulink Extras 库内 Linearization 库中可用的专用模块。

版本历史记录

在 R2007a 中推出

另请参阅

| |