为什么要规范化 - 相似性

构建状态空间方程的时候,我们知道,根据状态变量的选取的不同,状态空间方程的形式也会不同。
但是,不管状态变量怎么选取,系统的输入输出关系是不变的。暂时可以理解为,系统的传递函数是不变的。
因此,我们可以说,状态空间方程的形式是有冗余的。
为了消除这种冗余,我们需要对状态空间方程进行规范化。
规范化的目的有两个:

  1. 消除冗余,使得状态空间方程的形式唯一。
  2. 便于分析和设计控制系统。
    我们如何得知状态空间方程的形式是唯一的呢?我们可以通过相似变换来理解。

状态空间方程相似变换

假设我们有一个状态空间方程:

\dot{x}(t) = Ax(t) + Bu(t)
y(t) = Cx(t) + Du(t)

假设我们对状态变量进行一个线性变换:

z(t) = Tx(t)

其中,T是一个可逆矩阵。
那么,新的状态空间方程为:

\dot{z}(t) = T\dot{x}(t) = T(Ax(t) + Bu(t)) = TAT^{-1}z(t) + TBu(t)
y(t) = Cx(t) + Du(t) = CT^{-1}z(t) + Du(t)

新的状态空间方程为:

\dot{z}(t) = (TAT^{-1})z(t) + (TB)u(t)
y(t) = (CT^{-1})z(t) + Du(t)

我们可以看到,新的状态空间方程的形式与原来的状态空间方程的形式不同,但这是对同一个系统的描述,所以肯定有什么是一样的。
我们可以计算这两个系统的传递函数:
原系统的传递函数为:

G(s) = C(sI - A)^{-1}B + D

新系统的传递函数为:

G'(s) = (CT^{-1})(sI - (TAT^{-1}))^{-1}(TB) + D
= C(sI - A)^{-1}B + D = G(s)

我们可以看到,两个系统的传递函数是一样的。这就是相似变换中,状态空间方程形式不同,但描述的是同一个系统的原因。

相似性

设新的系统矩阵为A' = TAT^{-1},这里的A'A是相似矩阵。我们可以简单的看一下相似矩阵的定义:

AB是两个n阶方阵,如果存在一个可逆矩阵P,使得B = PAP^{-1},则称矩阵AB相似。
相似矩阵有以下性质:

  1. 相似矩阵有相同的特征值。
  2. 相似矩阵有相同的行列式。
  3. 相似矩阵有相同的迹。
  4. 相似矩阵有相同的秩。
  5. 相似矩阵有相同的特征多项式。

这里的相似矩阵AA',有相同的特征值,这说明系统的动态特性是不变的。因为系统的特征值决定了系统的动态特性,对应于传递函数的极点。
这也就意味着,对于任何一个状态空间方程,我们都可以通过相似变换,得到一个我们想要的状态空间方程形式,那我们么我们如何选择一个合适的状态空间方程形式呢?

规范化的状态空间方程形式

之前我们这状态空间的方程的解那一节中,我们提到过通过微分方程或者传递函数建立状态空间方程的一种标准形式,得到了可控标准型可观标准型。这实际上就是一种规范化的状态空间方程形式。

可控标准型

形如这样的状态空间方程被称为可控标准型

\begin{bmatrix} \dot{x}_1(t) \\ \dot{x}_2(t) \\ \vdots \\ \dot{x}_n(t) \end{bmatrix}= \begin{bmatrix} 0 & 1 & 0 & \ldots & 0 \\ 0 & 0 & 1 & \ldots & 0 \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ 0 & 0 & 0 & \ldots & 1 \\ -a_0 & -a_1 & -a_2 & \ldots & -a_{n-1} \end{bmatrix} \begin{bmatrix} x_1(t) \\ x_2(t) \\ \vdots \\ x_n(t) \end{bmatrix}+ \begin{bmatrix} 0 \\ 0 \\ \vdots \\ 0 \\ 1 \end{bmatrix}u(t)

y(t) = [\beta_0, \beta_1, \ldots, \beta_{n-1}] \begin{bmatrix} x_1(t) \\ x_2(t) \\ \vdots \\ x_n(t) \end{bmatrix} + [b_n]u(t)

可控标准型的最明显的特征就是,系统矩阵A是一个相伴矩阵,输入矩阵B的最后一个元素为1,其余元素为0。
输出矩阵C的形式可以有很多种,这里给出的是一种比较常见的形式。

可观标准型

形如这样的状态空间方程被称为可观标准型

\begin{bmatrix} \dot{x}_1(t) \\ \dot{x}_2(t) \\ \vdots \\ \dot{x}_n(t) \end{bmatrix}= \begin{bmatrix} 0 & 0 & 0 & \ldots & -a_0 \\ 1 & 0 & 0 & \ldots & -a_1 \\ 0 & 1 & 0 & \ldots & -a_2 \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ 0 & 0 & 0 & \ldots & -a_{n-1} \end{bmatrix} \begin{bmatrix} x_1(t) \\ x_2(t) \\ \vdots \\ x_n(t) \end{bmatrix}+ \begin{bmatrix} b_0 \\ b_1 \\ \vdots \\ b_{n-1} \end{bmatrix}u(t)

y(t) = [1, 0, 0, \ldots, 0] \begin{bmatrix} x_1(t) \\ x_2(t) \\ \vdots \\ x_n(t) \end{bmatrix} + [b_n]u(t)

可观标准型的最明显的特征就是,系统矩阵A是一个转置的相伴矩阵,输出矩阵C的第一个元素为1,其余元素为0。如果把可控标准型的系统矩阵、输入矩阵、输出矩阵等记为A_cB_cC_c,可观标准型的系统矩阵、输入矩阵、输出矩阵等记为A_oB_oC_o,那么有如下关系:

A_o = A_c^T
B_o = C_c^T
C_o = B_c^T

而我们知道转置并不改变矩阵的相似性,因此可控标准型和可观标准型是相似的。

对角标准型

说到相似性,怎么能不提到相似对角化呢?如果一个矩阵可以相似对角化,那么这个矩阵就可以表示为:

A = PDP^{-1}

其中,D是一个对角矩阵,P是一个可逆矩阵。
如果系统矩阵A可以相似对角化,那么我们就可以把状态空间方程表示为对角标准型:

\begin{bmatrix} \dot{x}_1(t) \\ \dot{x}_2(t) \\ \vdots \\ \dot{x}_n(t) \end{bmatrix}= \begin{bmatrix} \lambda_1 & 0 & 0 & \ldots & 0 \\ 0 & \lambda_2 & 0 & \ldots & 0 \\ 0 & 0 & \lambda_3 & \ldots & 0 \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ 0 & 0 & 0 & \ldots & \lambda_n \end{bmatrix} \begin{bmatrix} x_1(t) \\ x_2(t) \\ \vdots \\ x_n(t) \end{bmatrix}+ \begin{bmatrix} b_1 \\ b_2 \\ \vdots \\ b_n \end{bmatrix}u(t)

y(t) = [c_1, c_2, \ldots, c_n] \begin{bmatrix} x_1(t) \\ x_2(t) \\ \vdots \\ x_n(t) \end{bmatrix}

其中,\lambda_i为系统矩阵A的特征值。当然,我们知道相似对角化的变换矩阵P是不唯一的,因此对角标准型也不是唯一的。
对角标准型最大的好处,就是系统的动态特性一目了然,系统的每个状态变量都是一个独立的子系统,彼此之间没有耦合关系。我们就可以解耦为以下形式:

\dot{x}_i(t) = \lambda_i x_i(t) + b_i u(t)
y_i(t) = c_i x_i(t) + d u(t)

每个子系统的传递函数为:

G_i(s) = \frac{c_i}{s - \lambda_i}b_i

系统的传递函数为:

G(s) = \sum_{i=1}^{n} G_i(s) = \sum_{i=1}^{n} \left(\frac{c_i}{s - \lambda_i}b_i\right)

这就是系统的部分分式展开形式。

若尔当标准型

如果系统矩阵A不能相似对角化,这通常是因为矩阵A有重特征值且特征向量不够,即某个特征值的代数重数大于几何重数。这个时候我们虽然不能把矩阵A相似对角化,但我们可以把矩阵A化为若尔当标准型。
若尔当标准型是指矩阵A可以表示为:

A = PJP^{-1}

其中,J是一个若尔当矩阵,P是一个可逆矩阵。
若尔当矩阵J是一个块对角矩阵,每个块称为若尔当块。每个若尔当块对应一个特征值,若尔当块的形式为:

J_k(\lambda) = \begin{bmatrix} \lambda & 1 & 0 & \ldots & 0 \\ 0 & \lambda & 1 & \ldots & 0 \\ 0 & 0 & \lambda & \ldots & 0 \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ 0 & 0 & 0 & \ldots & \lambda \end{bmatrix}

其中,k为若尔当块的大小,\lambda为对应的特征值。
当然对角矩阵可以看作是若尔当块大小为1的若尔当矩阵,因此若尔当标准型是对角标准型的推广。
如果系统矩阵A可以化为若尔当标准型,那么我们就可以把状态空间方程表示为若尔当标准型:

\begin{bmatrix} \dot{x}_1(t) \\ \dot{x}_2(t) \\ \vdots \\ \dot{x}_n(t) \end{bmatrix}= \begin{bmatrix} J_{k_1}(\lambda_1) & 0 & 0 & \ldots & 0 \\ 0 & J_{k_2}(\lambda_2) & 0 & \ldots & 0 \\ 0 & 0 & J_{k_3}(\lambda_3) & \ldots & 0 \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ 0 & 0 & 0 & \ldots & J_{k_m}(\lambda_m) \end{bmatrix} \begin{bmatrix} x_1(t) \\ x_2(t) \\ \vdots \\ x_n(t) \end{bmatrix}+ \begin{bmatrix} b_1 \\ b_2 \\ \vdots \\ b_n \end{bmatrix}u(t)

y(t) = [c_1, c_2, \ldots, c_n] \begin{bmatrix} x_1(t) \\ x_2(t) \\ \vdots \\ x_n(t) \end{bmatrix} + Du(t)

其中,J_{k_i}(\lambda_i)为若尔当块,\lambda_i为对应的特征值,k_i为若尔当块的大小。
若尔当标准型的好处是,它可以处理有重特征值且特征向量不够的情况。通过若尔当标准型,我们仍然可以分析系统的动态特性。

状态空间形式的规范化建立

可控标准型和可观标准型是两种常见的规范化状态空间形式。我们可以通过系统的微分方程或者传递函数来建立这两种规范化的状态空间形式。当然,这个已经在上一篇文章说过了。这里我们就专注于对角标准型和若尔当标准型的建立。

根据系统微分方程建立状态空间表达式

假设系统的微分方程为:

a_n \frac{d^n y(t)}{dt^n} + a_{n-1} \frac{d^{n-1} y(t)}{dt^{n-1}} + \ldots + a_1 \frac{dy(t)}{dt} + a_0 y(t) = b_m \frac{d^m u(t)}{dt^m} + b_{m-1} \frac{d^{m-1} u(t)}{dt^{m-1}} + \ldots + b_1 \frac{du(t)}{dt} + b_0 u(t)

我们总可以把它通过拉普拉斯变换转化为传递函数的形式:

G(s) = \frac{Y(s)}{U(s)} = \frac{b_m s^m + b_{m-1} s^{m-1} + \ldots + b_1 s + b_0}{a_n s^n + a_{n-1} s^{n-1} + \ldots + a_1 s + a_0}

然后通过部分分式展开,得到系统的极点和零点,从而得到系统矩阵的特征值。这里为了简化,我们只讨论m \leq n的情况。
假设化成如下形式的传递函数:

G(s) = \frac{Y(s)}{U(s)} = \frac{b_m s^m + b_{m-1} s^{m-1} + \ldots + b_1 s + b_0}{s^n + a_{n-1} s^{n-1} + \ldots + a_1 s + a_0}

我们首先对这个传递函数进行部分分式展开,得到系统的极点和零点。假设系统的极点为\lambda_1, \lambda_2, \ldots, \lambda_n,零点为z_1, z_2, \ldots, z_m

对角标准型的建立

如果系统传递函数的极点都是不同的实数,那么系统矩阵A可以相似对角化,我们就可以建立对角标准型的状态空间方程。
我们可以选择状态变量为系统的模态坐标,即每个状态变量对应一个极点。假设状态变量为x_i(t),对应于极点\lambda_i。先对的传递函数进行部分分式展开,得到:

G(s) = \sum_{i=1}^{n} \frac{R_i}{s - \lambda_i}

其中,R_i为对应极点\lambda_i的残差。
选取状态变量为:

x_i(t) = \frac{1}{s - \lambda_i} U(s)

则状态方程为:

\dot{x}_i(t) = \lambda_i x_i(t) + u(t)

输出方程为:

y(t) = \sum_{i=1}^{n} R_i x_i(t)

写成矩阵形式为:

\begin{bmatrix} \dot{x}_1(t) \\ \dot{x}_2(t) \\ \vdots \\ \dot{x}_n(t) \end{bmatrix}= \begin{bmatrix} \lambda_1 & 0 & 0 & \ldots & 0 \\ 0 & \lambda_2 & 0 & \ldots & 0 \\ 0 & 0 & \lambda_3 & \ldots & 0 \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ 0 & 0 & 0 & \ldots & \lambda_n \end{bmatrix} \begin{bmatrix} x_1(t) \\ x_2(t) \\ \vdots \\ x_n(t) \end{bmatrix}+ \begin{bmatrix} 1 \\ 1 \\ \vdots \\ 1 \end{bmatrix}u(t)

y(t) = [R_1, R_2, \ldots, R_n] \begin{bmatrix} x_1(t) \\ x_2(t) \\ \vdots \\ x_n(t) \end{bmatrix}

这就是系统的对角标准型状态空间方程。
当然,状态变量的选取并不唯一,我们也可以选择其他的状态变量,只要保证状态变量之间是线性无关的即可。比如说我们可以选:

x_i(t) = \frac{R_i}{s - \lambda_i} U(s)

那么状态方程和输出方程为:

\begin{bmatrix} \dot{x}_1(t) \\ \dot{x}_2(t) \\ \vdots \\ \dot{x}_n(t) \end{bmatrix}= \begin{bmatrix} \lambda_1 & 0 & 0 & \ldots & 0 \\ 0 & \lambda_2 & 0 & \ldots & 0 \\ 0 & 0 & \lambda_3 & \ldots & 0 \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ 0 & 0 & 0 & \ldots & \lambda_n \end{bmatrix} \begin{bmatrix} x_1(t) \\ x_2(t) \\ \vdots \\ x_n(t) \end{bmatrix}+ \begin{bmatrix} R_1 \\ R_2 \\ \vdots \\ R_n \end{bmatrix}u(t)

y(t) = [1, 1, \ldots, 1] \begin{bmatrix} x_1(t) \\ x_2(t) \\ \vdots \\ x_n(t) \\ \end{bmatrix}

这也是一种对角标准型状态空间方程。
当然因为变换矩阵P的不唯一性,我们还可以通过其他的线性变换,得到更多的对角标准型状态空间方程。

若尔当标准型的建立

如果系统传递函数的极点有重数,那么系统矩阵A可能不能相似对角化,我们就需要建立若尔当标准型的状态空间方程。
我们可以选择状态变量为系统的模态坐标和广义模态坐标。假设状态变量为x_i(t),对应于极点\lambda_i
假设极点\lambda_i的代数重数为k_i,几何重数为g_i,则我们需要选择k_i个状态变量,其中g_i个状态变量对应于特征向量,k_i - g_i个状态变量对应于广义特征向量。
假设极点\lambda_i的特征向量为v_{i1}, v_{i2}, \ldots, v_{ig_i},广义特征向量为w_{i1}, w_{i2}, \ldots, w_{i(k_i - g_i)},则状态变量为:

x_{ij}(t) = \frac{1}{s - \lambda_i} U(s) v_{ij}
x_{i(g_i + l)}(t) = \frac{1}{(s - \lambda_i)^{l+1}} U(s) w_{il}

其中,j = 1, 2, \ldots, g_il = 1, 2, \ldots, k_i - g_i
则状态方程为:

\dot{x}_{ij}(t) = \lambda_i x_{ij}(t) + u(t) v_{ij}
\dot{x}_{i(g_i + l)}(t) = \lambda_i x_{i(g_i + l)}(t) + x_{i(g_i + l - 1)}(t) + u(t) w_{il}

输出方程为:

y(t) = \sum_{i=1}^{m} \sum_{j=1}^{g_i} R_{ij} x_{ij}(t) + \sum_{i=1}^{m} \sum_{l=1}^{k_i - g_i} S_{il} x_{i(g_i + l)}(t)

写成矩阵形式为:

\begin{bmatrix} \dot{x}_1(t) \\ \dot{x}_2(t) \\ \vdots \\ \dot{x}_n(t) \end{bmatrix}= \begin{bmatrix} J_{k_1}(\lambda_1) & 0 & 0 & \ldots & 0 \\ 0 & J_{k_2}(\lambda_2) & 0 & \ldots & 0 \\ 0 & 0 & J_{k_3}(\lambda_3) & \ldots & 0 \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ 0 & 0 & 0 & \ldots & J_{k_m}(\lambda_m) \end{bmatrix} \begin{bmatrix} x_1(t) \\ x_2(t) \\ \vdots \\ x_n(t) \end{bmatrix}+ \begin{bmatrix} b_1 \\ b_2 \\ \vdots \\ b_n \end{bmatrix}u(t)

y(t) = [c_1, c_2, \ldots, c_n] \begin{bmatrix} x_1(t) \\ x_2(t) \\ \vdots \\ x_n(t) \end{bmatrix} + Du(t)

这就是系统的若尔当标准型状态空间方程。
当然,我们可以选择一种可以理解的方式,比如说对原传递函数进行部分分式展开,这其中有重极点的部分,选择对应的状态变量为广义模态坐标,其他部分选择模态坐标。这样就可以比较容易地建立若尔当标准型状态空间方程。比如说展开为这样的形式:

G(s) = \sum_{i=1}^{p} \frac{R_i}{s - \lambda_i} + \sum_{j=1}^{q} \left(\frac{S_{j1}}{s - \mu_j} + \frac{S_{j2}}{(s - \mu_j)^2} + \ldots + \frac{S_{jk_j}}{(s - \mu_j)^{k_j}}\right)

其中,\lambda_i为单极点,\mu_j为重极点,k_j为重极点的重数。
则状态变量为:

x_i(t) = \frac{1}{s - \lambda_i} U(s)
x_{j1}(t) = \frac{1}{s - \mu_j} U(s)
x_{j2}(t) = \frac{1}{(s - \mu_j)^2} U(s) = \frac{1}{s - \mu_j} x_{j1}(t)
\ldots
x_{jk_j}(t) = \frac{1}{(s - \mu_j)^{k_j}} U(s) = \frac{1}{s - \mu_j} x_{j(k_j - 1)}(t)

其中,i = 1, 2, \ldots, pj = 1, 2, \ldots, q
则状态方程为:

\dot{x}_i(t) = \lambda_i x_i(t) + u(t)
\dot{x}_{j1}(t) = \mu_j x_{j1}(t) + u(t)
\dot{x}_{j2}(t) = \mu_j x_{j2}(t) + x_{j1}(t)
\ldots
\dot{x}_{jk_j}(t) = \mu_j x_{jk_j}(t) + x_{j(k_j - 1)}(t)

输出方程为:

y(t) = \sum_{i=1}^{p} R_i x_i(t) + \sum_{j=1}^{q} \sum_{l=1}^{k_j} S_{jl} x_{jl}(t)

写成矩阵形式为:

\begin{bmatrix} \dot{x}_1(t) \\ \dot{x}_2(t) \\ \vdots \\ \dot{x}_n(t) \end{bmatrix}= \begin{bmatrix} J_{k_1}(\mu_1) & 0 & 0 & \ldots & 0 \\ 0 & J_{k_2}(\mu_2) & 0 & \ldots & 0 \\ 0 & 0 & J_{k_3}(\mu_3) & \ldots & 0 \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ 0 & 0 & 0 & \ldots & J_{k_q}(\mu_q) \end{bmatrix} \begin{bmatrix} x_1(t) \\ x_2(t) \\ \vdots \\ x_n(t) \end{bmatrix}+ \begin{bmatrix} B_1 \\ B_2 \\ \vdots \\ B_n \end{bmatrix}u(t)

y(t) = [C_1, C_2, \ldots, C_n] \begin{bmatrix} x_1(t) \\ x_2(t) \\ \vdots \\ x_n(t) \end{bmatrix} + Du(t)

这也是一种若尔当标准型状态空间方程。其中,B_iC_i为对应的系数。每个Jordan块对应的输入系数和输出系数可以通过递推关系来求解。B_i是形如[0, 0, 0, \ldots, 1]^T的形式,C_i是形如[S_{j1}, S_{j2}, \ldots, S_{jk_j}]的形式。至于为什么每个Jordan块对应的B_i的最后一个元素为1,其余元素为0,可以通过递推关系来证明,而递推到底是因为输入变量u(t)在微分方程的最高阶导数项中出现了,所以在状态方程中,输入变量u(t)会影响到最高阶的状态变量,从而影响到其他状态变量。

上述给了一个通过部分分式展开来建立若尔当标准型状态空间方程的方法。当然,我们也可以通过直接求解特征向量和广义特征向量来建立若尔当标准型状态空间方程。这里实际上涉及到线性代数中的若尔当标准型的求解方法,不再赘述,后续会有专门的文章来介绍。

当然其实这里还没写当传递函数有共轭的复极点的时候的情况,这其实对应系统中有二阶环节的情况,推导好像和舒尔分解中出现的共轭虚特征值的2x2矩阵有关系,正好对应系统的自然频率和阻尼比,但是没学到就先不写了(QAQ)

总结

通过相似变换,我们可以看到状态空间方程的形式是有冗余的。为了消除这种冗余,我们可以通过规范化的状态空间方程形式来描述系统。常见的规范化状态空间方程形式有可控标准型、可观标准型、对角标准型和若尔当标准型。
可控标准型和可观标准型是通过系统的微分方程或者传递函数来建立的,而对角标准型和若尔当标准型则是通过系统的极点和特征向量来建立的。
规范化的状态空间方程形式可以帮助我们更好地理解系统的动态特性,从而更好地进行系统分析和设计控制系统。

循此苦旅,终抵群星