主要内容

pole

动态系统的极点

说明

P = pole(sys) 返回 SISO 或 MIMO 动态系统模型 sys 的极点。输出表示为在 sys.TimeUnit 中指定的时间单位的倒数。动态系统的极点决定系统的稳定性和响应特性。

开环线性时不变系统稳定的条件如下:

  • 连续时间系统:传递函数的所有极点均具有负实部。如果在复 s 平面上可视化极点,所有极点必须位于左半平面 (LHP),才能保证系统稳定。

  • 离散时间系统:所有极点的幅值必须严格小于 1,即所有极点必须位于单位圆内部。

对于稀疏状态空间模型,该语法最多计算幅值最小的前 1000 个极点。 (自 R2025a 起)

示例

P = pole(sys,J1,...,JN) 返回模型数组 sys 中,下标为 (J1,...,JN) 的条目的极点 P

示例

P = pole(___,Name=Value) 基于一个或多个指定的名称-值参量,计算稀疏模型 sys 的极点的子集。如果您不指定任何名称-值参量,该函数最多可计算幅值最小的前 1000 个极点。当 sys 是非稀疏模型时,该函数会忽略名称-值参量。 (自 R2025a 起)

示例

示例

全部折叠

计算以下离散时间传递函数的极点:

sys(z)=0.0478z-0.0464z2-1.81z+0.9048

sys = tf([0.04798 0.0464],[1 -1.81 0.9048],0.1);
P = pole(sys)
P = 2×1 complex

   0.9050 + 0.2929i
   0.9050 - 0.2929i

对于稳定的离散系统,其所有极点的幅值必须严格小于 1,即所有极点必须位于单位圆内部。此示例中的极点是一对共轭复根,且位于单位圆内部。因此,系统 sys 是稳定的。

计算以下传递函数的极点:

sys(s)=4.2s2+0.25s-0.004s2+9.6s+17

sys = tf([4.2,0.25,-0.004],[1,9.6,17]);
P = pole(sys)
P = 2×1

   -7.2576
   -2.3424

对于稳定的连续系统,其所有极点必须具有负实部。由于 sys 的极点均为负值(即位于复平面左半部分),因此该系统是稳定的。

对于此示例,请加载 invertedPendulumArray.mat,其包含一个由倒立摆模型组成的 3×3 数组。摆的质量随着您沿 sys 的单个列在模型间移动而变化,摆的长度随着您沿单个行移动而变化。所用的质量值分别为 100g、200g 和 300g,所用的摆长度分别为 3m、2m 和 1m。

Column1Column2Column3Row1100g,3m100g,2m100g,1mRow2200g,3m200g,2m200g,1mRow3300g,3m300g,2m300g,1m

load('invertedPendulumArray.mat','sys');
size(sys)
3x3 array of transfer functions.
Each model has 1 outputs and 1 inputs.

求模型数组的极点。

P = pole(sys);
P(:,:,2,1)
ans = 3×1

    2.1071
   -2.1642
   -0.1426

P(:,:,2,1) 对应摆重量为 200g、长度为 3m 的模型的极点。

自 R2025a 起

此示例说明如何计算稀疏梁模型的极点。对于稀疏状态空间模型,pole 基于关注的频率范围计算极点的子集。

加载该模型。

load linBeam.mat
size(sys)
Sparse second-order model with 1 outputs, 1 inputs, and 3303 degrees of freedom.

稀疏模型通常规模较大,计算所有极点可能不可行或计算成本较高。默认情况下,pole 函数最多计算幅值最小的前 1000 个极点。

p = pole(sys);
size(p)
ans = 1×2

        1000           1

为避免计算大量极点,您可以指定其他选项(例如感兴趣的频率范围)。通常指定一个低频带,函数仅会计算固有频率在该范围内的极点。

p2 = pole(sys,Focus=[0 1e4]);
size(p2)
ans = 1×2

     4     1

输入参数

全部折叠

动态系统,指定为 SISO 或 MIMO 动态系统模型或者 SISO 或 MIMO 动态系统模型数组。您可以使用的动态系统包括连续时间或离散时间数值 LTI 模型,如 tfzpkss 模型。

如果 sys 是广义状态空间模型 genss 或不确定状态空间模型 uss,则 pole 返回 sys 的当前值或标称值的极点。如果 sys 是模型数组,则 pole 返回与 sys 中的下标 J1,...,JN 对应的模型的极点。有关模型数组的详细信息,请参阅模型数组

如果 sys 是稀疏状态空间模型(sparssmechss),软件会在指定的关注频带内计算极点的子集。对于稀疏模型,请使用名称-值参量来指定计算选项。如果您不指定任何选项,软件最多可计算幅值最小的前 1000 个极点。对于带瑞利阻尼的 mechss 模型,软件根据 (K,M) 的特征值计算极点。否则,软件会根据等效的 sparss 模型计算极点。 (自 R2025a 起)

数组中要提取其极点的模型的索引,指定为正整数。您可以提供与 sys 中的数组维度数一样多的索引。例如,如果 sys 是一个由动态系统模型组成的 4×5 数组,以下命令将提取该数组中条目 (2,3) 的极点。

P = pole(sys,2,3);

名称-值参数

全部折叠

Name1=Value1,...,NameN=ValueN 的形式指定可选参量对组,其中 Name 是参量名称,Value 是对应的值。名称-值参量必须出现在其他参量之后,但对各个参量对组的顺序没有要求。

示例: B = pole(sparseSys,Focus=[0 10],Display="off")

自 R2025a 起

感兴趣的频率范围,指定为 [fmin,fmax] 形式的向量。当您指定关注的频率范围时,算法仅会计算固有频率在此范围内的极点。对于离散时间模型,软件通过突斯汀变换来逼近等效的固有频率。

对于对称半正定稀疏模型,您可以指定任意满足 0 ≤ fmin < fmax 的频率范围。对于非对称 sparss 模型,您必须指定频率范围为 [0,fmax][fmin,inf]

由于软件会计算指定频率范围内的所有极点,因此您通常会指定一个低频范围来限制计算大量极点。默认情况下,不指定关注的频率范围 ([0 Inf]),并且算法最多计算 MaxNumber 个极点。

自 R2025a 起

要计算的零极点的最大数目,指定为正整数。此值限制算法计算的极点的数目。

自 R2025a 起

频谱偏移,指定为有限标量。

软件通过对 A-sigma*E 使用逆幂迭代法,计算固有频率在指定范围 [0,fmax] 内的极点,从而获得最接近偏移量 sigma 的特征值。当 A 为奇异矩阵且 sigma 为零时,由于不存在逆矩阵,算法会失败。因此,对于具有积分作用的稀疏模型(s = 0,或对于离散时间模型,在 z = 1 时),您可以使用此选项将极点或零点隐式地偏移至最接近此偏移值的值。指定的偏移值需不等于原始模型的现有极点值。

自 R2025a 起

计算的极点的精度容差,指定为正有限标量。此值控制逆幂迭代中计算得到的特征值的收敛。

自 R2025a 起

显示或隐藏进度报告,指定为 "off""on"

输出参量

全部折叠

动态系统的极点,以标量或数组形式返回。如果 sys 为:

  • 单个模型,则 P 是由动态系统模型 sys 的极点组成的列向量

  • 模型数组,则 P 是由 sys 中每个模型的极点组成的数组

P 表示为在 sys.TimeUnit 中指定的时间单位的倒数。例如,如果 sys.TimeUnit = 'minutes',则极点以 1/分钟表示。

根据系统模型的类型,极点的计算方式如下:

  • 对于状态空间模型,极点是 A 矩阵的特征值;在描述符形式的状态空间模型情况下,是 AλE 的广义特征值。

    对于稀疏状态空间模型,极点是使用逆幂迭代法获得的部分特征值[1]。 (自 R2025a 起)

  • 对于 SISO 传递函数或零极点增益模型,极点是分母的根。有关详细信息,请参阅 roots

  • 对于 MIMO 传递函数(或零极点增益模型),极点作为每个 SISO 条目的极点的并集返回。如果部分 I/O 对组具有公共分母,此类 I/O 对组分母的根仅计计一次。

限制

  • 重极点在数值上较为敏感,无法以高精度计算。重数为 m 的极点 λ,计算结果通常表现为以 λ 为中心、半径量级如下的圆上分布的极点簇

    ρε1/m,

    其中 ε 为机器相对精度 (eps)。

    有关重极点的详细信息,请参阅Sensitivity of Multiple Roots

  • 如果 sys 有内部延迟,需先将所有内部延迟设置为零(即创建零阶帕德逼近),使系统具有有限个极点,再计算极点。对于某些系统,将延迟设置为零会创建奇异代数环,这会导致零延迟逼近不正确或未明确定义。对于这些系统,pole 会返回错误。

    要评估具有内部延迟的模型的稳定性,请使用 stepimpulse

算法

对于稀疏状态空间模型,pole 使用 Krylov-Schur 算法[1] 进行逆幂迭代,以计算指定频带内的极点。

参考

[1] Stewart, G. W. “A Krylov--Schur Algorithm for Large Eigenproblems.” SIAM Journal on Matrix Analysis and Applications 23, no. 3 (January 2002): 601–14. https://doi.org/10.1137/S0895479800371529.

版本历史记录

在 R2006a 之前推出

全部展开