Main Content

linmod

使用逐模块线性化算法在工作点附近提取连续时间线性状态空间模型

说明

示例

[A,B,C,D] = linmod(mdl) 通过逐个线性化每个模块来计算模型 mdl 中表示的常微分方程组的线性状态空间模型。模型中的 InportOutport 模块表示系统输入和输出。

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

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

注意

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

[A,B,C,D] = linmod(mdl,x,u) 计算由状态值 x 和输入值 u 定义的工作点周围的线性状态空间模型。

[A,B,C,D] = linmod(mdl,x,u,opts) 使用选项 opts 计算指定工作点周围的线性状态空间模型。

[A,B,C,D] = linmod(mdl,x,u,-v5) 使用 5.3 版及更早版本中提供的扰动算法,计算在指定为状态 x 和输入 u 的工作点处的模型 mdl 中表示的常微分方程组的线性状态空间模型。使用扰动算法等效于使用 linmodv5 函数。

[A,B,C,D] = linmod(mdl,x,u,opts,-v5) 使用带选项 opts 的扰动算法计算线性状态空间模型。

[A,B,C,D] = linmod(mdl,x,u,opts,xpert,upert,-v5) 使用带选项 opts 的扰动算法并使用状态扰动 xpert 及输入扰动 upert 来计算线性状态空间模型。

[n,d] = linmod(___) 返回线性化模型的传递函数表示。

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

示例

全部折叠

您可以使用 linmod 函数从模型引用层次结构中提取线性模型。

打开模型 mdlref_f14 和模型 mdlref_dynamics,后者由模型 mdlref_f14 中名为 Aircraft Dynamics Model 的 Model 模块引用。

topmdl = "mdlref_f14";
refmdl = "mdlref_dynamics";

open_system(topmdl)
open_system(refmdl)

为了在对模型引用层次结构进行线性化时获得最佳结果,请将顶层模型和所有引用模型配置为在普通模式下进行仿真。线性化对于多速率引用模型有限制,linmod 函数使用不同算法来线性化在加速模式下进行仿真的引用模型。

将顶层模型和 Model 模块的仿真模式设置为 Normal

set_param(topmdl,SimulationMode="Normal")
mdlblk = topmdl + "/Aircraft Dynamics Model";
set_param(mdlblk,SimulationMode="Normal")

使用 linmod 函数线性化 mdlref_f14 模型。

[A,B,C,D] = linmod(topmdl);

linmod 函数返回的状态空间模型对应于完整模型,包括引用模型。

输入参数

全部折叠

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

数据类型: char | string

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

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

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

在以下情况下,必须使用结构体格式指定对模型进行线性化时所处的状态:

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

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

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

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

数据类型: double

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

元素默认值
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

提示

  • 默认情况下,系统时间为零。对于依赖时间的系统,您可以使用 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 中推出

另请参阅

函数

App

主题