主要内容

minreal

最小实现或零极点相消

说明

msys = minreal(sys) 消除状态空间模型中不可控或无法观测的状态,或者使传递函数或零极点增益模型中的零极点对相消。输出 msys 具有最小阶数,并且与原始模型 sys 具有相同的响应特征。

示例

msys = minreal(sys,tol) 指定用于状态消除或零极点相消的容差。默认值为 tol = sqrt(eps),增大此容差会强制执行更多相消。

[msys,U] = minreal(___) 也为状态空间模型 sys 返回正交矩阵 U,使得 (UAUT,UB,CUT) 是 (A,B,C) 的卡尔曼分解。

示例

示例

全部折叠

此示例说明如何计算零极点增益模型的最小实现。

对于此示例,请考虑使用以下命令,这些命令会生成一个非最小零极点增益模型 cloop

g = zpk([],1,1);
h = tf([2 1],[1 0]);
cloop = inv(1+g*h) * g
cloop =
 
        s (s-1)
  -------------------
  (s-1) (s^2 + s + 1)
 
Continuous-time zero/pole/gain model.
Model Properties

要使在 s=1 处的零极点对相消,请使用 minreal 函数。

cloopmin = minreal(cloop)
cloopmin =
 
        s
  -------------
  (s^2 + s + 1)
 
Continuous-time zero/pole/gain model.
Model Properties

此示例说明如何计算状态空间模型的最小实现。

对于此示例,假设有一个 25 状态 SISO 模型。加载该模型。

load('reduce.mat','gasf35unst');
size(gasf35unst)
State-space model with 1 outputs, 1 inputs, and 25 states.

要计算最小实现,请使用 minreal 函数。

[msys,U] = minreal(gasf35unst);
11 states removed.

使用此语法会返回一个状态空间模型 msys,以及一个用于计算卡尔曼分解的正交矩阵 U。该分解决定了原始状态空间模型的不可控和不可观测状态。然后,为了计算最小实现,minreal 消除了这些不可控或不可观测状态。默认情况下,该函数会删除此模型的 11 个状态。要强制消除接近不可控或不可观测的其他状态,您可以增加容差。

将容差增加到默认值的 100 倍。

tol = sqrt(eps)*100;
[msys2,U2] = minreal(gasf35unst,tol);
16 states removed.

该函数现在会删除另外五个状态。

输入参数

全部折叠

要简化的动态系统模型,指定为以下项之一:

  • 连续时间或离散时间数值模型,如 sstfzpk 模型。

  • 广义或不确定状态空间模型,如 genssuss (Robust Control Toolbox) 模型。(使用不确定模型需要 Robust Control Toolbox™ 软件。)

    对于此类模型,该软件会计算模型数值部分的最小实现。有关这些模型的分解的详细信息,请参阅 getLFTModelInternal Structure of Generalized Models

  • 辨识的状态空间 idss (System Identification Toolbox) 模型。(使用辨识模型需要 System Identification Toolbox™ 软件。)

  • 由动态系统模型组成的数组。

零极点相消或状态消除的容差,指定为正实数标量值。

输出参量

全部折叠

简化的模型,以与 sys 相同类型的模型形式返回。

正交矩阵,以矩阵形式返回。当 sys 是状态空间模型时,U 一个 Nx×Nx 矩阵,其中 Nxsys 中的状态数量。对于传递函数和零极点增益模型,该函数以空矩阵 [] 形式返回 U

算法

零极点相消是直接在零极点中搜素位于容差范围内的匹配项的方法。传递函数首先转换为零极点增益形式。

替代功能

命令行

reducespec

实时编辑器任务

Reduce Model Order

版本历史记录

在 R2006a 之前推出