一阶线性系统与矩阵方法
上一章里,我们把一个未知函数拆成幂级数,让微分方程逐项决定它的系数。这个办法扩展了“解一个方程”的范围。不过,现实模型还有另一种复杂:需要追踪的量本来就不止一个。
想象两个水箱通过管道互相输送盐水。只知道第一个水箱现在有多少盐,能预测它下一分钟的盐量吗?还不能。第二个水箱会把盐送过来,送来的浓度取决于第二个水箱当时的盐量。两个未知函数互相牵着,必须一起求。
弹簧振子也有同样的问题。看到小球经过平衡位置,并不能知道它接下来向哪边走,还要知道速度。前面用二阶方程保存的两份信息,现在可以并排放进一个向量。
这一章先从两只水箱写出方程,再解释特征值为什么能拆开耦合,接着处理复根和重根。最后,我们会把这些解组织成基本矩阵,并让上一章的幂级数再次出场,得到矩阵指数。外界持续加入的输入,也能放进同一套方法。
先把两只水箱的账记清楚
设两只充分搅拌的水箱各有 100 L 水。第一只水箱以 10 L/min 向第二只输水,第二只也以相同流量向第一只输水。每只水箱另外各接收 10 L/min 的清水,同时向外排出 10 L/min 的混合液。
每只水箱的总流入和总流出都是 20 L/min,所以体积确实保持不变。这里假设管道运输时间可以忽略,流量恒定,盐不会沉淀,也不会发生化学反应。
用 x1(t),x2(t) 表示两只水箱里的盐量,单位是千克,时间 t 用分钟计。第一只水箱的浓度是 x 千克每升,第二只则是 。第一只水箱收到的盐只来自第二只水箱,清水不带盐,因此
x1′=10100x2
同样,第二只水箱满足
x2′=10100x1
每一项都是千克每分钟。系数 1/10 和 1/5 的单位都是每分钟,来自“流量除以体积”。如果直接凭印象给矩阵填几个正负数,就容易漏掉一条排水管;先写守恒账,矩阵自然会出现。
把两份盐量放在同一个列向量里:
x(t)=[x
两条方程便合成
x′=Ax.
这个写法没有省掉任何物理关系。第一行仍然是第一只水箱的账,第二行仍然是第二只水箱的账。对角线上的负数记录自身流出造成的减少,非对角线上的正数记录另一只水箱带来的输入。
先不解方程,也可以做一个有用的检查。把两行相加,箱间交换的盐应该抵消,只剩向外排出的盐:
(x1+x2)′=−
总盐量确实按照指数规律减少。但这还不能告诉我们每个箱子里分别有多少盐。系统求解要补上的,正是这种分配信息。
如果 x1=0 而 x2≥0,第一行给出 x;另一条边界也一样。因此非负初始盐量不会被模型推成负值。数学公式可以延伸到负时间,水箱故事讨论的范围则是实验开始后的 。
一个矩阵方程究竟承诺了什么
一般的一阶线性系统可以写成
x′(t)=A(t)x(t)+b(t).
这里 x 有 n 个分量,A(t) 是 n×n 系数矩阵,b(t) 是已知的外部输入。所谓线性,是未知分量只以一次项相加,彼此不相乘,也不进入平方、正弦等非线性函数。系数依赖时间不妨碍线性;出现 才会改变这一点。
当 b=0 时,系统叫齐次系统;有外部输入时叫非齐次系统。水箱接收清水虽然有外部水流,但盐量方程没有额外加盐项,所以仍是齐次的。如果入口换成已知浓度的盐水,盐的输入率就会进入 b。
初始条件现在也是一个向量:
x(t0)=x0.
只要 A(t) 和 b(t) 的各个分量在某个区间内连续,且 t0 在这个区间内,那么每一个初始向量都决定该区间上的唯一解。常数矩阵配上处处连续的输入时,解对所有有限实数时间都有定义。指数可能越长越大,但不会在某个有限时刻突然出现分母为零的爆破。
对齐次系统,叠加原理依然成立。如果 u,v 都是解,常数倍之和满足
(c1u+c2v)′=
我们需要找到足够多的独立解,再用初始条件决定怎样组合。这与二阶线性方程的主线一致,只是“两个标量解”变成了“n 个向量解”。
对于常数矩阵,Ax 还有一个直接的几何意思:它给出状态点 x 当下的速度。例如
A=[201
于是状态经过 (1,2) 时,第一分量增加,第二分量减少。要注意,这是状态空间里的速度;水箱模型的两个坐标是盐量,并不是水箱在房间里的位置。
高阶方程为什么也能搬进来
现在回头看弹簧。位置相同的小球,可能正在向左,也可能正在向右,所以位置不足以构成完整状态。把位置和速度一起记录,就能把二阶方程改写成一阶系统。
例如,给定适当的单位,考虑
y′′+4y′+3y=f(t).
令 x1=y、x2=y′。第一条关系直接给出 ;原方程则告诉我们速度怎样改变:
x2′=y′′=−3x1
因此
x′=[0−3
这一步是等价改写。原方程的任意解 y 都给出系统解 (y,y′)T;反过来,系统第一行保证第二分量就是第一分量的导数,再代入第二行便恢复原方程。
初始条件也完整搬过来。例如 y(0)=2,y′(0)=−1 就对应 x(0)=(2,。这里位移与速度的单位不同,所以矩阵各个位置的系数可以有不同单位;不要把所有系统的矩阵元素都机械理解成每秒。
更一般地,若最高阶导数的系数在讨论区间内不为零,先把 n 阶线性方程化成
y(n)+an−1(t)y
再依次取 x1=y,x2=y′,…,便有
x1′=x2,x
xn′=−a0(t)x
前 n−1 行负责传递导数关系,最后一行负责原方程的动力学。若最高阶系数在某点为零,就不能在那里直接除过去;上一章对奇点的警惕在这里仍然需要保留。
“降阶”没有减少问题所需的信息。一个 n 阶方程的 n 个初值,变成了状态向量的 n 个分量。它的好处是让高阶模型、多变量模型以及我们前面学过的数值方法,能够使用统一的一阶形式。
把位置与速度同时装进状态向量,原方程就变成两个一阶方程:第一行传递导数关系,第二行记录加速度如何受位置、速度和外部输入影响。
特征向量把耦合拆成独立模式
两只水箱彼此影响,为什么线性代数里的特征向量能帮助我们?先找一种最简单的变化方式:两个分量始终保持固定比例,只让整体大小随时间改变。
设这个固定比例由非零向量 v 表示,尝试
x(t)=u(t)v.
代入常系数齐次系统,得到
u′(t)v=u(t)Av.
要让右边仍沿着 v,自然要求 Av=λv。这正是特征值和特征向量的关系。于是整个向量问题缩成
u′=λu,x(t)=Ceλtv.
沿这个方向出发,解不用不断调整两个分量的比例,只按同一个指数因子伸缩。这样的独立变化方式叫一个特征模态。这里 λ 决定时间上的倍率,v 决定分量之间的配比,两者缺一不可。
把两只水箱真正算完
回到水箱矩阵,特征方程为
det(A−λI)=(λ+51)
对应的两组特征数据可以直接核验:
λ1=−10
第一组表示两只箱子盐量相等时共同变淡;第二组描述两只箱子之间的差异消失得有多快。第二个特征向量有负分量,并不意味着真实水箱必须出现负盐量。模态是用来分解解的数学构件,真正满足物理条件的是它们组合后的盐量。
若开始时 x1(0)=6、x2(0)=2 千克,写成
[62]=c1
相加相减得到 c1=4,c2=2,所以
x1(t)=4e−t/10+2
检验第一行,导数为 −0.4e−t/10−0.6e−3t/10;把公式代入 −x1,得到完全相同的两项。第二行两边也同为 ,初值则分别回到 和 。
结果还告诉我们一件公式表面看不出的事:第二只箱子一开始会增盐,因为 x2′(0)=0.2 kg/min。系统的两个指数都衰减,并不保证每一个坐标从第一刻起都单调下降。第一只箱子带来的盐,暂时超过了第二只箱子的流失。
令 x2′=0,得到 e−t/5=2/3,即它在 分钟时达到最大值,之后才开始减少。而总盐量始终是 ,与先前的总账一致。差量是 ,比总量消失得更快,因此长期看两箱盐量越来越接近。
换坐标以后为什么就不耦合了
若 A 有 n 个线性无关的特征向量,把它们作为列排成矩阵 P,并按同样顺序把特征值放入对角矩阵 D,就有
AP=PD,A=PDP−1.
令 x=Pz。因为 P 是常数矩阵,求导并左乘 P−1 得到
Pz′=APz=PDz,z′=Dz.
于是每个新坐标独自满足 zi′=λizi。所谓对角化,在这里就是换一套坐标,让原来互相牵连的方程分开。
水箱里这套新坐标尤其具体:z1=(x1+x2)/2 是平均盐量, 是半差量。我们找到的两个指数,正是平均量和差量各自的变化率。
不同特征值对应的特征向量线性无关,因此 n 个不同实特征值足以完成这种分解。重根也可能有足够多的特征向量;真正需要检查的是向量是否够用,而不是只数特征值有几种。
复特征值怎样变成实数解
有些运动会反复改变方向。前面二阶振动方程出现复根时,我们把复指数拆成正弦和余弦;线性系统里仍然这样做,但必须连同复特征向量一起拆。
假设实矩阵 A 有特征值 λ=α+iβ,其中 β=0,对应特征向量为 v。先写出一个复数解:
e(α+iβ)t(p+iq)=eα
展开后,实部与虚部分别是
u1(t)=eαt(pcosβt−qsinβt
u2(t)=eαt(psinβt+qcosβt
为什么各取一部分仍是解?因为 A 的元素都为实数,代入系统后实部与虚部分别满足同一条实系数方程。这两个实向量解线性无关。若 p 与 q 共线,复特征向量便会是某个实向量的复数倍,意味着实矩阵把一个非零实向量乘成非实数倍,这不可能;因此在 t=0 时它们已经独立。
看一个算得清楚的例子:
x′=[−12
特征方程是 (λ+1)2+4=0,根为 −1±2i。对 −1+,可取 ,于是实部解是 。把虚部解乘以 ,可选另一解 。它们在零时刻刚好是标准基向量,初值系数直接就是 和 :
x(t)=e−t[2cos2t+sin2t
记 C=cos2t,S=sin2t,第一分量的导数是 −5e−tS,而 − 也等于它;第二分量的导数是 ,与 相同。初值也正确。
这个例子的两个分量带着共同的包络 e−t,同时发生角频率为 2 的转动。在一般坐标下,复根对应的运动未必画出标准圆,因此不要仅凭“有正弦余弦”就把轨线画圆。完整的相图形状和稳定性分类留到下一章;这里先掌握如何把复数计算变成两个独立实解。
重根缺少特征向量时,另一个解从哪里来
若 A=−2I,虽然唯一的特征值 −2 出现两次,但两个标准基向量都是特征向量。系统的解就是 e−2t(c1,,没有任何困难。
现在只增加一项耦合:
A=[−201−2].
特征方程仍是 (λ+2)2=0,但 (A+2I)v=0 要求第二分量为零,因此只找到一个独立特征方向。若只写 ,就永远无法满足第二分量非零的初值。
先用我们熟悉的积分因子把它解出来。第二行给出 x2=c2e−2t,第一行成为
x1′+2x1=c2e
两边乘 e2t,得到 (e2tx1)′=,因此
x1=(c1+c2t
通解可以整理成两个向量解:
x(t)=c1e−2t[
这里确实出现了 te−2t,但它必须和第二分量中的 e−2t 配套。直接把第一个向量解整体乘 t,会得到 (te,它不满足第一行,因为求导会多出一个无法抵消的 。
这也解释了广义特征向量为什么这样定义。若已知 Av=λv,寻找另一个解
u(t)=eλt(tv+w).
分别计算导数和 Au,两者的差是
u′−Au=eλt[v−(A−λ
所以只要找到满足 (A−λI)w=v 的向量 w,缺少的解就补上了。上例可取 v=(1,0)、。这是二维亏损重根的标准处理;更高维时可能需要更长的向量链,出现 等项。
给上例初值 x(0)=(1,3)T,便得
x(t)=e−2t[1+3t3].
第一分量导数是 (1−6t)e−2t,代入 −2x1+x 同样得到它;第二分量两边都是 。尽管多了 ,两个分量最终仍趋于零,因为指数衰减压过固定次数的多项式增长。
基本矩阵:把初值接到所有解上
实根、复根、重根的计算方式各有差别,但得到独立向量解之后,后面的组织方式完全一样。
设 u1(t),…,un(t) 是齐次系统的 n 个独立解,把它们排成列:
Φ(t)=[u1(t)
这样的矩阵叫基本矩阵。每一列都满足原系统,所以
Φ′(t)=A(t)Φ(t).
独立性可以用 detΦ(t0)=0 检查,只需在一个时刻检查一次。为什么不会过一会儿又变得相关?假如某时刻有非零常数向量 c 使 Φ(t)c=,这个组合解与零解具有相同的当时初值。唯一性迫使它始终为零,就与最初的独立性矛盾。
因此通解是 x(t)=Φ(t)c。初值要求 Φ(t0)c=x0,于是
x(t)=Φ(t)Φ(t0)−1x0.
这一步特别容易少写一个逆矩阵。基本矩阵在初始时刻未必等于单位矩阵,它的列可以从任意一组独立向量出发。只有先把初值换算成这组列向量的组合系数,才可以乘 Φ(t)。
水箱的一个基本矩阵是
Φ(t)=[
它的行列式是 −2e−2t/5,始终非零。右乘 Φ(0)−1,得到在零时刻等于 I 的归一化基本矩阵:
Ψ(t)=2
它现在可以直接乘初始盐量向量。第一列对应“第一只箱子开始有一千克盐,第二只没有”,第二列对应相反的初态。任何其他初值由这两种响应相加而来。
行列式还有一个整体核验公式:
detΦ(t)=detΦ(t0)exp(∫t
trA 是对角线元素之和。水箱里它等于 −2/5,因此公式给出 −2e−2t/5,正好与直接计算一致。这里的行列式就是系统版本的 Wronskian;它检查独立性,不需要把向量分量再逐行求导排一次。
矩阵指数把幂级数接回系统
对标量方程 x′=ax,从初值到解的推进因子是 eat。我们希望给常数矩阵系统找到类似的推进矩阵,初始值为 I,导数为 A 乘自身。
上一章提供了一个直接的构造办法。设它可以展开成 M(t)=∑k=0∞Bktk,代入 并比较系数,便有
(k+1)Bk+1=ABk,B
因此 B1=A,B2=A2/2,…。我们据此定义矩阵指数:
eAt=I+At+2!A
它对每个有限 t 都收敛。用任意相容矩阵范数估计,第 k 项的大小不超过 ∥A∥k∣t∣k/k!,总和被普通指数级数 控制。因此这不是只写得好看的形式展开。
逐项求导可得
dtdeAt=AeAt,e
由初值问题的唯一性,它就是零时刻归一化的基本矩阵;对任意初始时刻,
x(t)=eA(t−t0)x0.
可对角化时,Ak=PDkP−1,把这一关系代入级数就得到
eAt=PeDtP−1,
水箱的 eAt 正是上一节算出的 Ψ(t)。特征值解法与矩阵指数解法并没有给出两套不同的答案,只是把同一件事写成了不同形式。
不可对角化时,级数定义照样有效。对先前的重根矩阵,写成 A=−2I+N,其中
N=[0010],N
由于 −2I 与 N 可交换,而且 N 的二次及更高次幂都为零,
eAt=e−2t(I+tN)=
乘 (1,3)T,又回到刚才的重根初值解。矩阵指数把广义特征向量中出现的多项式项也容纳进来了。
矩阵指数使用矩阵幂,绝不是把每个元素分别取指数。即使矩阵为零,正确结果也是单位矩阵,而逐元素取指数会得到全为一的矩阵。对角矩阵的非对角元素在取矩阵指数后仍为零,只有对角线上分别出现标量指数。
同一个常数矩阵的推进可以分段:eA(t+s)=eAteAs,所以逆矩阵是 e。但不同矩阵相加时要小心。比较 与 的二次项,前者有 ,后者有 ,两者会因乘法顺序不同而分开。 是可以放心拆开的充分条件。
同样,当 A 随时间改变时,通常不能照搬标量积分因子,把推进矩阵写成 e∫A(t)dt。不同时刻的矩阵未必可交换;一般仍应使用满足 Φ′=A( 的基本矩阵。若所有时刻的 彼此可交换,才可以用相应的积分指数表达推进。
外部输入怎样进入系统的解
水箱持续加入盐、电路持续受到电源驱动,都会出现非齐次项。前面我们把二阶方程通解中的常数换成函数;现在对矩阵系统也做同样的事。
假设已经找到齐次系统 x′=A(t)x 的基本矩阵 Φ(t)。为求
x′=A(t)x+b(t),
尝试 x=Φ(t)c(t)。求导并使用 Φ′=AΦ,得到
x′=AΦc+Φc′.
与原式对比,只剩 Φc′=b,因此
c′=Φ−1b.
按初值积分,完整答案就是
x(t)=Φ(t)Φ(t0)−1
这就是系统的变参数公式。注意各个矩阵和向量的相乘顺序:先用 Φ(s)−1 处理输入,再在积分外乘 Φ(t)。矩阵不是可以任意调换位置的数字。
若 A 是常数矩阵,公式变成
x(t)=eA(t−t0)x
第一项是初始状态自己的演化。第二项可以这样读:时刻 s 加入的微小输入 b(s)ds,还要经历 t−s 这么长时间,才能贡献到时刻 t 的状态。把所有输入时刻的贡献积起来,就是我们在卷积里见过的“过去输入累积成现在响应”。
算完一个有持续输入的系统
考虑两个量依次传递的简化模型:第二个量持续得到强度为 4 的输入,并以速率 2 衰减;它又以系数 1 影响第一个量,第一个量同样以速率 2 衰减。这里取无量纲变量和时间,只讨论方程本身,不把这组系数冒充具体设备参数。
x′=[−20
齐次推进矩阵已经算过,因此
x(t)=∫
令 u=t−s,把积分方向一并调整,第二分量为
x2(t)=4∫0te
第一分量多了一个 u,分部积分得到
x1(t)=4∫0tue
两个初值都是零。求导给出 x1′=4te−2t、x2;代入右端,,,逐行通过。
长期状态是 (1,2)T,也可以直接由 Ax∗+b=0 算出。初始输入先改变第二个量,再传到第一个量,所以 ,而 。这份先后关系就藏在积分核的 里。
对于常输入,若 A 可逆,平衡状态可以写成 x∗=−A−1b,并通过 z=x 化成齐次系统。若 不可逆,就必须检查线性方程是否有解,不能强写不存在的逆矩阵。变参数积分本身不要求 可逆,要求可逆的是基本矩阵。
练习:让公式与每一行方程对得上
把三阶初值问题放进状态向量
把 y′′′+2y′′−y′+4y= 改写成一阶系统,并写出 对应的初值。
取 x1=y,x2=y′,x,则前两行是 。原方程提供最后一行 ,所以
用不同实根解一个初值问题
求 x′=Ax、x(0)=(5,−4)T,其中
A=[−101−3].
特征值为 −1,−3。前者的特征向量可取 (1,0)T;后者要求 2v1+,可取 。初值分解为 ,所以
只换水箱初值,不重新求特征值
本章的两只水箱开始分别含 0 和 10 千克盐。求两只箱子的盐量,解释第一只箱子会不会立刻出现负盐量。
平均量与半差量的初值是 5 和 −5,因此
x1=5(e
从复根写出实数解
求
x′=[03
特征值是 ±3i。对 3i,取特征向量 (1,−i)T,得到实解 (cos3t,sin,以及将虚部取负后的 。按初值组合:
重根系统中的多项式因子
求 A=[−102−1] 的矩阵指数,以及初值 的解。
写成 A=−I+N,其中 N=[00,直接相乘可知 。 与 可交换,因此
基本矩阵不能直接乘初值
已知某系统的基本矩阵为
Φ(t)=[2et00
求满足 x(0)=(4,9)T 的解,并判断 Φ(t)x(0) 是否正确。
因为 Φ(0)=diag(2,3),组合系数应是 c=Φ(0)−1x(0)。所以
系数矩阵不可逆时仍能处理输入
求
x′=[0
这里 A2=0,所以 eA(t−s)=[。变参数公式给出
现在,我们已经能从一个初始向量出发,写出它怎样随时间演化。接下来的问题是:如果把许多不同初值放在同一张平面上,所有这些解会组成什么图案?它们会向一个点靠近,绕着它转动,还是沿某个方向离开?下一章将把这里算出的指数模态,翻译成相图上的方向、轨线和稳定性。