Main Content

本页翻译不是最新的。点击此处可查看最新英文版本。

dlinmod

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

语法

argout = dlinmod('sys',Ts)
argout = dlinmod('sys',Ts,x,u)
argout = dlinmod('sys',Ts,x,u,para, 'v5')
argout = dlinmod('sys',Ts,x,u,para,xpert,upert,'v5')

参数

sys

从中提取线性模型的 Simulink® 系统的名称。

x, u

状态 (x) 和输入 (u) 向量。如果指定,它们会设置提取线性模型的工作点。当模型具有使用 Model 模块的模型引用时,您必须使用 Simulink 结构体格式来指定 x。要从模型中提取 x 结构体,请使用以下命令:

x = Simulink.BlockDiagram.getInitialState('sys');

然后,您可以通过编辑 x.signals.values 更改此结构体中的工作点值。

如果状态包含不同的数据类型(例如,'double''uint8'),则您不能使用向量指定此状态。必须改为使用结构体。此外,如果状态数据类型为 'double',则只能以向量形式指定状态。

Ts

离散时间线性化模型的采样时间

'v5'

可选参数,用于调用在 MATLAB® 5.3 版之前创建的扰动算法。调用此可选参数等效于调用 linmodv5

para

可选参数的三元素向量:

  • para(1) - 扰动增量值,用于对模型的状态和输入执行扰动。此参数对使用 'v5' 标志的线性化有效。默认值为 1e-05。

  • para(2) - 线性化时间。对于作为时间函数的模块,您可以将此参数设置为非负值,以指定线性化模型时 Simulink 计算模块的时间 (t)。默认值为 0。

  • para(3) - 设置为 para(3)=1,可删除在输入与输出之间没有路径的模块所关联的多余状态。默认值为 0。

xpert, upert

扰动值用于对模型的所有状态和输入执行扰动。默认值为

xpert = para(1) + 1e-3*para(1)*abs(x)
upert = para(1) + 1e-3*para(1)*abs(u)

当模型具有使用 Model 模块的模型引用时,您必须使用 Simulink 结构体格式来指定 xpert。要提取 xpert 结构体,请使用以下命令:

xpert = Simulink.BlockDiagram.getInitialState('sys');

然后,您可以通过编辑 xpert.signals.values 来更改此结构体中的扰动值。

仅当通过调用 linmodv5 或为 linmod 指定 'v5' 输入参数来调用在 MATLAB 5.3 版之前创建的扰动算法时,扰动输入参数才可用。

argout

如果您指定如下的等式输出(左侧)端,linmoddlinmodlinmod2 将返回状态空间表示:

  • [A,B,C,D] = linmod('sys', x, u) 根据指定的状态变量 x 和输入 u 围绕某个工作点获取 sys 的线性化模型。如果您省略 xu,则默认值为零。

linmoddlinmod 还会返回线性化系统的传递函数和 MATLAB 数据结构体表示,具体取决于您如何指定该方程的输出(左侧)端。使用 linmod 作为示例:

  • [num, den] = linmod('sys', x, u) 以传递函数形式返回线性化模型。

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

说明

注意

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

dlinmod 通过对模型中的每个模块分别进行线性化来计算离散时间系统的线性状态空间模型。

linmod 从以 Simulink 模型描述的常微分方程组中获取线性模型。使用 Inport 和 Outport 模块在 Simulink 模块图中表示输入和输出。

默认算法对大多数模块使用预编程的分析模块雅可比矩阵,这样生成的线性化应该比通过对模块输入和状态进行数值扰动更准确。Simulink Control Design 文档中提供了具有预编程分析雅可比矩阵的模块列表,还按模块讨论了用来进行线性化的分析算法。

默认算法还允许对有问题的模块(如 Transport DelayQuantizer)进行特殊处理。有关这些模块的详细信息和选项,请参阅这些模块的封装对话框。

离散时间系统线性化

函数 dlinmod 可以在任何给定的采样时间对离散系统、多速率系统、混合连续系统和离散系统进行线性化。对 dlinmod 使用与对 linmod 相同的调用语法,但要插入执行线性化时的采样时间作为第二个参数。例如,

[Ad,Bd,Cd,Dd] = dlinmod('sys', Ts, x, u);

根据采样时间 Ts 以及状态向量 x 和输入向量 u 指定的工作点生成离散状态空间模型。要获取离散系统的连续模型近似值,请将 Ts 设置为 0

对于由线性、多速率、离散和连续模块组成的系统,dlinmod 会在转换后的采样时间 Ts 生成具有相同频率和时间响应(适用于常量输入)的线性模型,前提是

  • Ts 是系统中所有采样时间的整数倍数。

  • 系统处于稳定状态。

对于不满足第一个条件的系统,通常线性化为一个时变系统,该系统不能使用 dlinmod 返回的 [A,B,C,D] 状态空间模型表示。

计算线性化矩阵 Ad 的特征值可获得系统稳定性的指示。如果 Ts>0 并且特征值在单位圆内(如以下语句所确定),则系统处于稳定状态:

all(abs(eig(Ad))) < 1 

同样,如果 Ts = 0 并且特征值在左半平面内(如以下语句所确定),则系统也处于稳定状态:

all(real(eig(Ad))) < 0 

如果系统不稳定且采样时间不是其他采样时间的整数倍数,则 dlinmod 生成 AdBd 矩阵,它们可以是复矩阵。不过,在这种情况下,Ad 矩阵的特征值仍提供了稳定性的良好指示。

您可以使用 dlinmod 将系统的采样时间转换为其他值,或将线性离散系统转换为连续系统,反之亦然。

您可以通过使用 bode 命令查找连续或离散系统的频率响应。

附注

默认情况下,系统时间设置为零。对于依赖于时间的系统,您可以将变量 para 设置为二元素向量,其中第二个元素用于设置要获取线性模型的 t 值。

从非线性模型到线性模型的状态顺序保持不变。对于 Simulink 系统,可以使用以下等式获取包含每个状态关联的模块名称的字符向量变量:

[sizes,x0,xstring] = sys

其中 xstring 是字符串向量,它的第 i 行是与第 i 个状态关联的模块名称。图中的输入和输出按顺序编号。

对于单输入多输出系统,您可以使用例程 ss2tf 将它们转换为传递函数形式,或者使用 ss2zp 转换为零极点形式。您也可以使用 ss 将线性化模型转换为 LTI 对象。此函数生成状态空间形式的 LTI 对象,然后可以使用 tfzpk 将该对象进一步转换为传递函数或零极点增益形式。

linmoddlinmod 中的默认算法通过将模块的线性化替换为 Pade 逼近来处理 Transport Delay 模块。对于 'v5' 算法而言,将包含 Derivative 或 Transport Delay 模块的模型线性化可能比较麻烦。有关详细信息,请参阅 线性化模型

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

版本历史记录

在 R2007a 中推出

另请参阅

| |