稳定性

假设有一个「黑盒」,如果值 uu 进入这个箱子,就会变成值 ξ\xi。如果这个「黑盒」每时每刻都在输入 uu 和输出 ξ\xi。但需要强调时间变化时,我们就会写成 u(t)u(t)ξ(t)\xi(t)。但在这里,「黑箱」输出的 ξ(t)\xi(t) 不仅仅与当前输入 u(t)u(t) 有关,还与过去输入的 uu 有关系。

  • 控制系统模型
    • uu 为踩油门的力度,ξ\xi 为汽车的速度
    • 放开油门的状态,u=0u = 0,但是这一个瞬间,汽车的速度 ξ\xi 并不是 0,而是在慢慢减少
  • 信号传输模型
    • uu 为无线通信中发出的信号,ξ\xi 为接收到的信号
    • 理想状态下,ξ(t)=u(t)\xi(t) = u(t),但在实际传输过程中会发生衰减、延迟、扭曲甚至反射,最终都会影响信号

我们在这里感兴趣的是模型会不会失控,换句话说,无论从什么状态出发,ξ(t)\xi(t) 都不会超出有限的范围(不会失控);还是某些情况下,ξ(t)|\xi(t)| 会趋近于无穷大(失控)。

对角矩阵

考虑下面这个模型:

x(t)=(500030000.8)x(t1)x(t) = \left( \begin{matrix} 5 & 0 & 0 \\ 0 & -3 & 0 \\ 0 & 0 & 0.8 \end{matrix} \right) x(t-1)

一计算就变成:

(x1(t)x2(t)x3(t))=(5x1(t1)3x2(t1)0.8x3(t1))\left( \begin{matrix} x_1(t) \\ x_2(t) \\ x_3(t) \end{matrix} \right) = \left( \begin{matrix} 5 x_1(t-1) \\ -3 x_2(t-1)\\ 0.8 x_3(t-1) \end{matrix} \right)

解出每个式子的答案(递推连乘),就是

x1(t)=5tx1(0)x2(t)=(3)tx2(0)x3(t)=0.8tx3(0)\begin{align*} x_1(t) &= 5^{t}x_1(0)\\ x_2(t) &= (-3)^{t}x_2(0)\\ x_3(t) &= 0.8^{t}x_3(0) \end{align*}

还可以写成

x(t)=(5t000(3)t0000.8t)x(0)=(500030000.8)tx(0)x(t) = \left( \begin{matrix} 5^t & 0 & 0 \\ 0 & (-3)^t & 0 \\ 0 & 0 & 0.8^t \end{matrix} \right) x(0) = \left( \begin{matrix} 5 & 0 & 0 \\ 0 & -3 & 0 \\ 0 & 0 & 0.8 \end{matrix} \right)^t x(0)

只要初始值 x(0)x(0) 不满足 x1(0)=x2(0)=0x_1(0)=x_2(0)=0,当 xx\to \inftyx1(t)x_1(t)x2(t)x_2(t) 都会越走越远,这个系统是会失控的。

能简单判断是否失控的关键在于系数矩阵是 对角矩阵 。只要有一个绝对值大于 1,系统就会失控。

x(t)=(a1tant)x(0)=(a1an)tx(0)x(t)=\left( \begin{matrix} a_1^t & & \\ & \ddots & \\ & & a_n^t \end{matrix} \right) x(0) = \left( \begin{matrix} a_1 & & \\ & \ddots & \\ & & a_n \end{matrix} \right)^t x(0)

可对角化

如果 AA 是对角矩阵,问题就可以迎刃而解。那么,对于一般的 AA,是否可以想办法归结为对角矩阵。大部分情况下,这是可行的。

考虑下面这个系统:

(x1(t)x2(t))=(5115)(x1(t1)x2(t1))\left( \begin{matrix} x_1(t) \\ x_2(t) \end{matrix} \right) = \left( \begin{matrix} 5 & 1 \\ 1 & 5 \end{matrix} \right) \left( \begin{matrix} x_1(t-1) \\ x_2(t-1) \end{matrix} \right)

展开成方程:

x1(t)=5x1(t1)+x2(t1)x2(t)=x1(t1)+5x2(t1)\begin{align*} x_1(t) &= 5x_1(t-1) + x_2(t-1)\\ x_2(t) &= x_1(t-1) + 5x_2(t-1) \end{align*}

这种形式没有办法处理,那么可以考虑这个方程:

y1(t)=x1(t)+x2(t)y2(t)=x1(t)x2(t)\begin{align*} y_1(t) &= x_1(t) + x_2(t) \\ y_2(t) &= x_1(t) - x_2(t) \end{align*}

于是,我们就有一个漂亮的结果:

y1(t)=x1(t)+x2(t)=(5x1(t1)+x2(t1))+(x1(t1)+5x2(t1))=6x1(t1)+6x2(t1)=6y1(t1)y2(t)=x1(t)x2(t)=(5x1(t1)+x2(t1))(x1(t1)+5x2(t1))=4x1(t1)4x2(t1)=4y2(t1)\begin{align*} y_1(t) &= x_1(t) + x_2(t) \\ &= (5x_1(t-1) + x_2(t-1)) + (x_1(t-1) + 5x_2(t-1)) \\ &= 6x_1(t - 1) + 6x_2(t - 1) \\ &=6y_1(t - 1)\\ \\ y_2(t) &= x_1(t) - x_2(t)\\ &= (5x_1(t-1) + x_2(t-1))-(x_1(t-1) + 5x_2(t-1))\\ &= 4x_1(t - 1) - 4x_2(t - 1)\\ &= 4y_2(t-1) \end{align*}

这样就变成一个简单的问题了:

y1(t)=6ty1(0)y2(t)=4ty2(0)\begin{align*} y_1(t) &= 6^t y_1(0)\\ y_2(t) &= 4^t y_2(0) \end{align*}

很容易知道 y1,y2y1,y2 都会失控。

接下去,只需要把 y1,y2y1,y_2 还原成 x1,x2x_1,x_2,就可以了。只需要:

x1(t)=y1(t)+y2(t)2x2(t)=y1(t)y2(t)2\begin{align*} x_1(t) &= \frac{y_1(t) + y_2(t)}{2} \\ x_2(t) &= \frac{y_1(t) - y_2(t)}{2} \end{align*}

代入上面的式子,

x1(t)=6ty1(0)+4ty2(0)2=(6t+4t2)x1(0)+(6t4t2)x2(0)x2(t)=6ty1(0)4ty2(0)2=(6t4t2)x1(0)+(6t+4t2)x2(0)\begin{align*} x_1(t) &= \frac{6^t y_1(0) + 4^t y_2(0)}{2} \\ &=(\frac{6^t+4^t}{2})x_1(0) + (\frac{6^t-4^t}{2})x_2(0) \\ \\ x_2(t) &= \frac{6^t y_1(0) - 4^t y_2(0)}{2} \\ &= (\frac{6^t - 4^t}{2})x_1(0) + (\frac{6^t+4^t}{2})x_2(0) \end{align*}

tt\to \infty 时,(6t±4t)/2(6^t \pm 4^t)/2 \to \infty,所以,x1,x2x1,x2 的系统一样会失控。

用矩阵的语言表达

y(t)=Cx(t),C=(1111)y(t) = Cx(t), C=\left( \begin{matrix} 1 & 1 \\ 1 & -1 \end{matrix}\right)

原来的问题 x(t)=Ax(t1)x(t) = Ax(t - 1) 就变成:

y(t)=Λy(t1),Λ=(6004)y(t) = \Lambda y(t-1), \Lambda=\left(\begin{matrix} 6 & 0 \\ 0 & 4 \end{matrix}\right)

这里的 Λ\Lambda 是对角矩阵,所以很容易的得出

y(t)=Λty(0)=(6t004t)(y1(0)y2(0))y(t)=\Lambda^t y(0)=\left(\begin{matrix} 6^t & 0 \\ 0 & 4^t \end{matrix}\right)\left(\begin{matrix}y_1(0) \\ y_2(0) \end{matrix}\right)

接下来,把 yy 还原成 xx 即可。还原时使用变换:

(x1(t)x2(t))=(y1(t)+y2(t)2y1(t)y2(t)2)\left( \begin{matrix} x_1(t) \\ x_2(t) \end{matrix} \right) =\left( \begin{matrix} \frac{y_1(t) + y_2(t)}{2} \\ \frac{y_1(t) - y_2(t)}{2} \end{matrix} \right)

本质上其实是,

x(t)=C1y(t)=(1/21/21/21/2)(y1(t)y2(t))x(t)=C^{-1}y(t)=\left(\begin{matrix} 1/2 & 1/2 \\ 1/2 & -1/2\end{matrix}\right)\left(\begin{matrix}y_1(t) \\ y_2(t) \end{matrix}\right)

使用上面的矩阵还原 xx,可得

(x1(t)x2(t))=(1/21/21/21/2)(y1(t)y2(t))=(1/21/21/21/2)(6t004t)(y1(0)y2(0))=(6t/24t/26t/24t/2)(y1(0)y2(0))\begin{align*} \left( \begin{matrix} x_1(t) \\ x_2(t) \end{matrix} \right) &=\left(\begin{matrix} 1/2 & 1/2 \\ 1/2 & -1/2\end{matrix}\right)\left(\begin{matrix}y_1(t) \\ y_2(t) \end{matrix}\right) \\ &=\left(\begin{matrix} 1/2 & 1/2 \\ 1/2 & -1/2\end{matrix}\right)\left(\begin{matrix} 6^t & 0 \\ 0 & 4^t \end{matrix}\right)\left(\begin{matrix}y_1(0) \\ y_2(0) \end{matrix}\right)\\ &=\left(\begin{matrix} 6^t/2 & 4^t/2 \\ 6^t/2 & -4^t/2\end{matrix}\right)\left(\begin{matrix}y_1(0) \\ y_2(0) \end{matrix}\right) \end{align*}

其中,初始值也满足 y(0)=Cx(0)y(0)=Cx(0),于是:

(x1(t)x2(t))=(6t/24t/26t/24t/2)(1111)(x1(0)x2(0))=(6t+4t26t4t26t4t26t+4t2)(x1(0)x2(0))\begin{align*} \left( \begin{matrix} x_1(t) \\ x_2(t) \end{matrix} \right) &=\left(\begin{matrix} 6^t/2 & 4^t/2 \\ 6^t/2 & -4^t/2\end{matrix}\right)\left(\begin{matrix}1 & 1 \\ 1 & -1 \end{matrix}\right)\left(\begin{matrix}x_1(0) \\ x_2(0) \end{matrix}\right)\\ &=\left(\begin{matrix} \frac{6^t+4^t}{2} & \frac{6^t-4^t}{2} \\ \frac{6^t-4^t}{2} & \frac{6^t + 4^t}{2}\end{matrix}\right)\left(\begin{matrix}x_1(0) \\ x_2(0) \end{matrix}\right) \end{align*}

综上,用矩阵运算得出了相同的结果。

一般化

总结一下这些流程:

  1. 选定某矩阵 CC,用其将 x(t)x(t) 变成另一组变量 y(t)=Cx(t)y(t) = Cx(t)
  2. 把关于 x(t)x(t) 的差分方程改写成关于 y(t)y(t) 的方程;
  3. 新的方程的系数矩阵如果是对角矩阵,那么就很容易求解;
  4. 把解出来的 y(t)y(t) 还原为 x(t)x(t)

整个过程的关键在于,变换后的 y(t)y(t) 的方程要具有对角矩阵的形式 。

并不是任意的 CC 都可以,它一定要在 xxyy 之间建立一一对应(双射)。

我们考虑的问题是:

y(t)=Cx(t)x(t)=C1y(t)\begin{align*} y(t) &= Cx(t)\\ x(t) &= C^{-1}y(t) \end{align*}

也就是 xyx\to y 为顺,yxy\to x 为逆。现在反过来,改写成:

x(t)=Py(t)y(t)=P1x(t)\begin{align*} x(t) &= Py(t)\\ y(t) &= P^{-1}x(t) \end{align*}

这样 yxy\to x 为顺,xyx \to y 为逆。

很显然,

C=P1P=C1\begin{align*} C &= P^{-1}\\ P & = C^{-1} \end{align*}

于是有:

y(t)=P1x(t)=P1Ax(t1)=P1A(Py(t1))=(P1AP)y(t1)\begin{align*} y(t) &= P^{-1}x(t)=P^{-1}Ax(t-1) \\ &=P^{-1}A(Py(t-1))=(P^{-1}AP)y(t-1) \end{align*}

yy 的角度,x(t)=Ax(t1)x(t)=Ax(t-1) 呈现出以下形态:

y(t)=Λy(t1)Λ=P1AP\begin{align*} y(t) &= \Lambda y(t-1)\\ \Lambda &= P^{-1}AP \end{align*}

如果 Λ\Lambda 是对角矩阵,则可以用 y(t)=Λty(0)y(t)=\Lambda^t y(0) 求出 y(t)y(t)

接下来,根据 x(t)=Py(t)x(t)=Py(t)y(0)=P1x(0)y(0)=P^{-1}x(0),可以得到最终的 xx

x(t)=Py(t)=PΛty(0)=PΛtP1x(0)x(t)=Py(t)=P\Lambda^t y(0)=P\Lambda^t P^{-1}x(0)

问题的重点就在于 如何选择合适的可逆矩阵 PP ,使得 P1APP^{-1}AP 是对角矩阵。

特征值、特征向量

我们的任务就是要找到对角化所需要的 PP

P1APΛ=diag(λ1,,λn)P^{-1}AP\equiv \Lambda=diag(\lambda_1,\cdots,\lambda_n)

两边左乘 PP,就变成 AP=PΛAP=P\Lambda,也就是:

A(p1,,pn)=(p1,,pn)(λ1λn)A(p_1,\cdots,p_n)=(p_1,\cdots,p_n) \begin{align*} \left( \begin{matrix} \lambda_1 \\ &\ddots \\ & & \lambda_n \end{matrix} \right) \end{align*}

按照分块矩阵乘法,分别计算左右两边,可以得到:

(Ap1,,Apn)=(λ1p1,,λnpn)(Ap_1,\cdots,Ap_n)=(\lambda_1 p_1,\cdots,\lambda_n p_n)

λ\lambda 和向量 pp 分别称为「特征值」和「特征向量」。

所以,求合适的 PP 分为两步:

  1. AA 的特征值 λ1,,λn\lambda_1,\cdots,\lambda_n 及其对应的特征向量 p1,,pnp_1,\cdots,p_n
  2. 将求得的特征向量排列起来,即 P=(p1,,pn)P=(p_1,\cdots,p_n)

严格来讲,上面并不严谨,得确认 PP 不是奇异,才可以求 P1P^{-1}

MATLAB:

1
2
3
A = [ 5 3 -4;6 8 -8; 6 9 -9]
eig(A)
X \ A*X % 特征值

Mathematica:

1
2
3
4
5
Eigenvalues[({
{5, 3, -4},
{6, 8, -8},
{6, 9, -9}
})]

从几何学角度,特征向量乘上 AA,除了长度会有伸缩变化,方向不发生改变。这里的长度变化率,就是特征值。

所以判断是否是特征向量就可以通过这个特性:

例:设 A=[1652]A=\left[\begin{matrix} 1 & 6 \\ 5 & 2\end{matrix}\right]u=[65]\textbf{u}=\left[\begin{matrix} 6 \\ -5\end{matrix}\right]v=[32]\textbf{v}=\left[\begin{matrix} 3 \\ -2\end{matrix}\right]u\textbf{u}v\textbf{v} 是否是 AA 的特征向量?

Au=[1652][65]=[2420]=4[65]=4uAv=[1652][32]=[911]λ[32]\begin{align*} A\textbf{u}&=\left[\begin{matrix} 1 & 6 \\ 5 & 2\end{matrix}\right]\left[\begin{matrix} 6 \\ -5\end{matrix}\right]=\left[\begin{matrix} -24 \\ 20\end{matrix}\right]=-4\left[\begin{matrix} 6 \\ -5\end{matrix}\right]=-4\textbf{u} \\ A\textbf{v}&=\left[\begin{matrix} 1 & 6 \\ 5 & 2\end{matrix}\right]\left[\begin{matrix} 3 \\ -2\end{matrix}\right] =\left[\begin{matrix} -9 \\ 11\end{matrix}\right] \ne\lambda\left[\begin{matrix}3 \\ -2\end{matrix}\right] \end{align*}

因此,u\textbf{u} 是特征值 -4 对应的特征向量,但 AvA\textbf{v} 不是 v\textbf{v} 的倍数,所以 v\textbf{v} 不是 AA 的特征向量。

特征方程

特征方程是一个数量方程,包含了有关特征值的信息。

假设 λ\lambda 是特征值,那么我们知道 Ax=λxAx=\lambda x。那么可以得到一个方程,即

(AλI)x=0(A-\lambda I)x=0

如果 A=[1652]A=\left[\begin{matrix} 1 & 6 \\ 5 & 2\end{matrix}\right],可以得到:

(AλI)=[1652][λ00λ]=[1λ652λ](A-\lambda I)=\left[\begin{matrix} 1 & 6 \\ 5 & 2\end{matrix}\right] - \left[\begin{matrix} \lambda & 0 \\ 0 & \lambda \end{matrix}\right] = \left[\begin{matrix} 1 - \lambda & 6 \\ 5 & 2 - \lambda \end{matrix}\right]

由逆矩阵定理,这个问题等价于求出所有的 λ\lambda,使得矩阵 AλIA-\lambda I 为不可逆矩阵。那么,可以通过行列式为 0 求解。

所以,

det(AλI)=(1λ)(2λ)30=λ23λ28=(λ7)(λ+4)\begin{align*} det(A-\lambda I) &= (1-\lambda)(2-\lambda)-30 \\ &=\lambda^2-3\lambda-28\\ &=(\lambda- 7)(\lambda+4) \end{align*}

det(AλI)=0det(A-\lambda I)=0,则 λ=4\lambda=-4 或者 λ=7\lambda=7,所以 AA 的特征值是 -4 和 7。

Jordan 标准型

就算不能对角化,也可以通过变换得到与对角矩阵很接近的形式——Jordan 标准型。

参考资料

  1. 平冈和幸,堀玄.程序员的数学.3,线性代数[M].人民邮电出版社,2016.
  2. [美] 戴维 C.雷,[美] 史蒂文 R.雷,[美] 朱迪 J.麦克唐纳. 线性代数及其应用(原书第5版),机械工业出版社,2018.10