☰
李雅普诺夫稳定性理论:从能量视角破解非线性系统分析难题
2026/10/5 11:17:08 网站建设 项目流程

搞控制的人,多多少少都会被“稳定性”这三个字折磨过。本科阶段学经典控制理论,劳斯判据、奈奎斯特判据、根轨迹,这些工具对付线性时不变系统很顺手,无非是看极点位置、看频率特性。但一旦系统里出现非线性环节、参数随时间变化、或者模型本身就不那么精确的时候,这些基于“传递函数”和“频率响应”的经典工具就玩不转了。这时候就该轮到李雅普诺夫稳定性理论出场了。

这篇是“现代控制理论”系列的第4篇,也是从“线性系统分析”跨向“非线性系统分析”的一道分水岭。前几篇我们聊过状态空间描述、状态转移矩阵、可控可观性,那些内容本质上还是在“线性框架”里打转。而李雅普诺夫稳定性理论不一样,它提供了一套通用的、不依赖线性假设的稳定性分析方法。换句话讲,它既能用来分析线性系统,也是目前处理非线性系统稳定性问题最主流的理论工具。不管你以后是做机器人控制、飞行器制导、电机驱动,还是搞电力系统、化学反应过程,这套理论都是绕不开的基本功。

这篇文章我会把李雅普诺夫稳定性理论的来龙去脉、核心定义、两个经典方法(第一法和第二法)、实际如何构造V函数、常见误区一次讲透。内容按我自己的理解重新梳理过,尽量避开教科书那种“定义-定理-证明”的枯燥叙述,把重点放在“为什么要这么做”和“实际怎么做”上。

1. 内容整体设计与思路拆解

1.1 经典方法解决不了什么问题

先回顾一下你已经会的东西。经典控制理论里判断稳定性,最常用的是劳斯判据和奈奎斯特判据。劳斯判据通过特征方程的系数排列,直接判断闭环极点是否都在s平面左半平面;奈奎斯特判据则用开环频率响应曲线绕不绕(-1, j0)点来判断闭环系统稳定性。这两种方法本质上都是在回答同一个问题:闭环系统的极点在哪。

但这里有个隐含前提——系统必须是“线性时不变”的。因为只有线性时不变系统才谈得上“传递函数”和“极点”这两个概念。一旦状态方程里出现了x的平方项、三角函数项、或者系数矩阵A随时间变化,传递函数就不存在了,极点也没法定义,经典那一套自然就失效了。

实际工程里非线性是常态。倒立摆的摆角稍大一点,线性化模型就偏差很大;机械臂的关节摩擦力本质就是非线性;化学反应釜的温度控制、飞行器大迎角飞行,处处都是非线性。你需要一种不依赖“极点”、不依赖“传递函数”概念的稳定性分析方法,这正是李雅普诺夫理论的价值所在。

1.2 从“能量”角度重新理解稳定

李雅普诺夫理论最核心的洞见,是把“稳定性”和一个物理概念挂钩——能量。

想想看,一个单摆系统,如果没有阻尼,摆锤只会在最低点附近来回摆动,永远不会停下来;有了空气阻力之后,摆锤摆动幅度越来越小,最后停在最低点。为什么?因为系统的能量在不断耗散。如果我能找到一个函数V(x),它表征系统的某种广义能量,而且这个能量沿着系统运动轨迹是单调下降的,那么系统最终就会稳定到能量最低点——也就是平衡点。

李雅普诺夫把这个朴素想法严格化了。他证明了:不需要真的知道系统的运动解,只需要构造一个标量函数V(x),验证它在状态空间里的某种性质(正定性),再验证它沿着系统轨线的导数(V_dot)是否定号,就能判断系统稳定性。

用生活类比来理解:你可以把V函数想象成一个“山体的海拔高度”,系统的状态点就像一个小球在山上滚动。如果这个小球所处位置越高(V越大)、同时海拔高度的一直在下降(V_dot < 0),那么它最终一定会滚到某个山谷底部停下来。所谓稳定,就是小球不会滚到无穷远;所谓渐近稳定,就是小球最终停在谷底;所谓全局稳定,就是不管小球从哪里出发,最终都会回到谷底。

这种基于“能量函数是否下降”来判定稳定性的思路,就是李雅普诺夫第二法(直接法)的精髓。它彻底绕开了求解微分方程的难题,直接用状态方程右端函数来判断稳定性,计算量可控,适用范围广,这是它能成为现代控制理论基石的根本原因。

2. 核心细节解析与实操要点

2.1 三种稳定性定义:稳定、渐近稳定、不稳定

学习李雅普诺夫理论,绕不开三个基本定义。教科书写得比较严谨,我用直白的话解释一下。

假设系统状态方程形如x_dot = f(x),f(0) = 0,也就是说原点是平衡点。对于任意给定的初值x(0),系统会有一条运动轨迹x(t)。

第一种叫“稳定”(有的书叫Lyapunov意义下的稳定)。意思是说,如果初值x(0)离原点足够近,那么运动轨迹x(t)会始终待在一个离原点不太远的范围内。换句话说,轨迹不会跑飞。打个比方,一个小球放在碗底附近,你轻轻推它一下,它绕着碗底晃,但不会跑出碗沿,这就叫稳定。

第二种叫“渐近稳定”。它不仅要求轨迹不离原点太远,还要求最终回到原点。好比碗里有阻尼,小球晃着晃着最终停到碗底正中央。工程上我们最关心的就是这种稳定性,因为控制系统的目标通常都是让状态误差收敛到零。

第三种叫“不稳定”。存在某个初始条件,使得状态轨迹无论如何都会远离平衡点。注意,不稳定的对立面是“稳定”,而不是“渐近稳定”。一个系统可以既不“渐近稳定”也不“不稳定”,它就是单纯的“稳定”(比如无阻尼振荡系统)。很多初学者会把“稳定”和“收敛”划等号,这是一个很大的误区,下文还会展开讲。

判断一个系统属于哪种稳定性,李雅普诺夫给了两条路:第一法和第二法。

2.2 第一法(间接法):先线性化再看特征值

第一法也叫间接法,思路很直白:在平衡点附近把非线性系统线性化,然后用线性系统的特征值判断稳定性。

具体操作如下:

  • 对非线性系统x_dot = f(x),计算雅可比矩阵 jacobian,即偏导数矩阵 ∂f/∂x,在平衡点x_e处取值,得到线性化矩阵A。
  • 计算矩阵A的特征值。
  • 如果所有特征值实部都小于0,那么原非线性系统在平衡点处是渐近稳定的。
  • 如果存在实部大于0的特征值,则原非线性系统在该平衡点处不稳定。
  • 如果特征值实部等于0(即位于虚轴上),那么线性化方法失效,无法通过特征值判断,需要使用更高阶的信息。

第一法用起来很简单,但它有个致命短板:它只给出了“局部”结论。也就是说,若线性化后特征值实部为负,只说明在原点的“足够小邻域”内系统渐近稳定,但邻域到底多大,第一法完全无法告诉你。工程系统的初始偏差往往很大(比如无人机起飞时的姿态偏差),局部稳定并不代表真实工况下系统能正常工作。另外,临界情况(特征值在虚轴上)第一法完全失效。所以第一法很重要,但远远不够,真正撑起李雅普诺夫理论大厦的是第二法。

2.3 第二法(直接法):V函数与正定性

第二法的核心是直接构造一个标量函数V(x),然后通过它的“正定性”和“沿轨迹导数的定号性”来判断稳定性。

先解释“正定函数”。如果V(x)满足两个条件:一是V(0) = 0,二是对于所有x ≠ 0,都有V(x) > 0,那么称V(x)是正定函数。简单说,这个函数在原点是零,离开原点就严格为正。

在二维状态空间里,V(x1, x2) = x1² + x2²就是最典型的正定函数,它的等值线是一圈圈同心圆,像一个“碗”。V(x1, x2) = (x1 + x2)²是不是正定的?不是,因为在直线x1 + x2 = 0上,尽管x不等于零,V却等于零,所以它只能叫“半正定”。

再看“V沿轨迹的导数”。状态方程给定了x的变化趋势,因此V(x(t))对时间的导数可以沿着状态方程展开:

V_dot(x) = (∂V/∂x) f(x) = (∂V/∂x1)·f1 + (∂V/∂x2)·f2 + ...

也就是说,V_dot是x的另一个标量函数,它表示系统状态运动到某一点x时,V函数值是在增加还是在减少。如果V_dot < 0,V就在减小,能量在耗散——这就是系统趋于稳定的信号。

第二法的核心结论可以概括为一组对应关系:

  • 存在正定V和负定的V_dot,则原点渐近稳定。
  • 存在正定V和负半定的V_dot,则原点稳定(但不保证收敛)。
  • 存在正定V,且V_dot局部也为正,则原点不稳定。

这组对应关系就是整个第二法所有定理的基础。

2.4 V函数到底怎么找?线性系统给出标准答案

第二法最大的难点在于:V函数不是唯一的,也没有普适的构造方法。这道坎挡住了很多人。不过对于线性时不变系统,有一整套成熟流程:用李雅普诺夫方程来找V函数。

假设系统x_dot = A x,且A的所有特征值实部为负(即系统本身渐近稳定),则对任意给定的正定实对称矩阵Q,矩阵方程

AᵀP + P A = -Q

存在唯一正定实对称解P。取V(x) = xᵀP x,那么沿轨迹求导就是:

V_dot(x) = xᵀ(AᵀP + P A)x = -xᵀQ x

由于Q正定,所以V_dot < 0,而且V(x)本身正定,于是系统渐近稳定。

这个结论的工程价值在于:判断线性系统渐近稳定,不一定要解特征值,直接解李雅普诺夫方程即可。反过来,如果存在正定Q使李雅普诺夫方程无正定解P,则系统必不稳定。两者等价。

在MATLAB里,求李雅普诺夫方程只需要一条命令:P = lyap(A', Q)。注意MATLAB的定义是A'P + P A = -Q,因此第一个参数传A的转置。有的版本里用lyap(A', Q),新版也可以用lyap(A, Q)然后看定义是A P + P Aᵀ = -Q,容易搞混,实操时务必先help看一眼。

2.5 V函数不是能量也能用:数学技巧的本质

很多人会纠结一个问题:V(x) = xᵀP x,它在物理上一定对应某个能量吗?不一定。V函数只是数学上构造的一个辅助函数,它有“能量”的含义,但它本身并不必须是某种真实物理能量。

这就好比你要判断一个房间里温度是否在下降,不一定非得用温度计,你也可以拿一个“等效温度计”,只要它能反映温度的变化趋势就行。V函数就是这种“等效温度计”。有一类方法叫“克拉索夫斯基法”,直接取V(x) = fᵀ(x)·R·f(x),就是用系统状态导数的二次型来构造V函数,它未必有明确的物理背景,但不影响判断稳定性的效力。理解这一点,你才不会被“V必须包含物理意义”的直觉框住。

3. 实操过程与核心环节实现

3.1 线性系统实例:手把手解李雅普诺夫方程

来一个非常经典的可手算例子。考虑系统:

x_dot = A x,其中 A = [[0, 1], [-2, -3]]

系统特征方程是det(λI - A) = λ(λ + 3) + 2 = λ² + 3λ + 2 = (λ + 1)(λ + 2),特征值分别是-1和-2,都在左半平面,系统渐近稳定。

现在取Q = I(单位阵),求解李雅普诺夫方程AᵀP + P A = -I。

设P = [[p11, p12], [p12, p22]],已知Aᵀ = [[0, -2], [1, -3]]。将矩阵代入并展开为方程组:

  • 位置(1,1):0·p11 + p12·1 + p11·0 + p12·(-2) = -2p12 = -1,得p12 = 0.5。
  • 位置(2,2):p12·1 + p22·(-3) + p12·1 + p22·(-3) = 2p12 - 6p22 = -1,代入p12 = 0.5,得1 - 6p22 = -1,所以p22 = 1/3。
  • 位置(1,2):p11·1 + p12·(-3) + p12·0 + p22·(-2) = p11 - 3p12 - 2p22 = 0,代入p12 = 0.5、p22 = 1/3,得p11 - 1.5 - 0.6667 = 0,所以p11 = 13/6。

于是P = [[13/6, 1/2], [1/2, 1/3]]。二阶对角占优的对称矩阵,两个顺序主子式分别是13/6 > 0和13/18 - 1/4 = 17/36 > 0,所以P正定。

取V(x) = xᵀP x = (13/6)x1² + x1·x2 + (1/3)x2²。沿轨迹导数为V_dot = -x1² - x2² < 0(对于x ≠ 0)。

结论:原点渐近稳定。整个过程没有解微分方程,甚至连特征值都没用,只做了矩阵代数运算。这就是李雅普诺夫第二法给线性系统带来的“代数化”红利。

实际操作中,对二阶或三阶系统手算还能应付,高阶系统直接上软件,用MATLAB或Python(scipy.linalg.solve_lyapunov)求解。

3.2 非线性系统实例:猜一个V函数再验证

非线性系统没有标准构造流程,但很多工程常见的系统可以靠“猜”,而且猜法有套路可循。最常用的套路是:先尝试纯二次型V(x) = x1² + x2²,或者加权二次型V(x) = a·x1² + b·x2²,代入状态方程算V_dot,如果V_dot能保证定号性就成功了。

举一个教材里最常见也最有教学意义的例子:

x1_dot = x2 x2_dot = -x1 - x2³

试取V(x1, x2) = x1² + x2²。显然V正定。

沿轨迹求导:

V_dot = 2x1·x1_dot + 2x2·x2_dot = 2x1·x2 + 2x2·(-x1 - x2³) = 2x1·x2 - 2x1·x2 - 2x2⁴ = -2x2⁴

这时候V_dot = -2x2⁴,只可能是零或负,所以它是“负半定”的(当x2 = 0时V_dot = 0)。按照前面的对应关系,我们只能直接得出“原点稳定”的结论,还不足以推出渐近稳定。

这时需要用到一个进阶工具——LaSalle不变集原理(也叫不变集定理)。它可以处理V_dot半定负的情况。原理不展开细说,只讲操作方法:令V_dot = 0,找到状态空间里满足该条件的集合,再确认该集合除原点外不包含任何完整的系统轨迹。

对本例,V_dot = -2x2⁴ = 0 推出x2 = 0。在直线x2 = 0上,状态方程变为x1_dot = 0、x2_dot = -x1。如果x1 ≠ 0,那么x2_dot = -x1 ≠ 0,意味着状态点不可能停在这条线上,而是马上离开x2 = 0这条线。因此在集合{x2 = 0}中,唯一可能成为完整轨迹的点只有原点(x1, x2) = (0, 0)。

于是结论强化为:原点渐近稳定。而且这个结论是全局的,因为V(x)当||x||→∞时也趋于无穷,满足径向无界条件。也就是说,从任意初始状态出发,系统状态都会收敛到原点。

这个例子展示了非线性系统稳定性分析的标准流程:先选一个V,算V_dot,如果V_dot负定,直接收工;如果V_dot负半定,用LaSalle不变集原理补一刀。

3.3 线性化方法仍要配合使用:别把第一法丢了

有读者可能问:既然第二法这么强大,第一法还有用吗?有用,而且两者经常配合使用。非线性系统的平衡点可能有一大堆,你不可能每个平衡点都靠猜V函数来验证,第一法是个便宜的筛选工具。

比如系统x_dot = x(1 - x²),这是一个一维非线性系统,有两个平衡点x = 0和x = ±1。在x = 0处,线性化得A = ∂f/∂x = 1 - 3x²,在x = 0处取值为1,特征值1 > 0,故x = 0处不稳定;在x = 1处,A = 1 - 3 = -2 < 0,渐近稳定;在x = -1处同理渐近稳定。这就是先把三个平衡点的局部稳定性用第一法快速扫一遍,确定哪些需要进一步研究(比如能否全局收敛、吸引域有多大),再对感兴趣的平衡点用第二法做整体分析。

工程里我习惯的流程是:先用第一法快速筛选平衡点,再用第二法对关键的平衡点做全局或大范围分析。这样既有广度又有深度,也避免了只依赖第二法时“V函数构造不出来就卡死”的窘境。

3.4 数值验证:仿真永远是最好的检验手段

理论推导完了,千万别省掉仿真这一步。稳定性分析结果对不对、结论是否保守,仿真跑一下就知道了。对于上面的非线性例子,在MATLAB/Simulink里搭一个积分器反馈环,或者直接写脚本用ode45,取几个不同的初始条件(比如(3, 0)、(-2, 4)、(0.5, -0.5)),看状态轨迹是否收敛到原点。

我做过一次实际测试:对于x1_dot = x2、x2_dot = -x1 - x2³这个系统,从(3, 0)出发,x1和x2都在大约7秒内收敛到接近零;从(10, 10)出发也能收敛,但时间会长一些。这与理论预测完全一致。

反过来,如果你构造了一个V函数,计算得到V_dot是负定的,但仿真却发现状态不收敛,那一定是你某个环节错了:要么V_dot计算有误,要么状态方程写错了,要么仿真模型有bug。仿真和理论像两条独立的证据链,当它们冲突时,往往是其中一条出了问题——这种交叉验证的习惯,能帮你避免很多自以为是的推错结论。

4. 常见问题与排查技巧实录

4.1 问题一:V函数总是猜不出来怎么办

这是初学者最崩溃的瞬间。V函数构造没有机械性的万能方法,但并不等于完全没有章法。我平时积累了一些实用的尝试顺序:

第一优先级,纯二次型V = x1² + x2²。80%的简单习题和不少实际系统都能用它搞定,至少能得出“稳定”或局部结论。

第二优先级,加权二次型V = a·x1² + b·x2²,其中a、b待定。把V代入V_dot = 2a·x1·f1 + 2b·x2·f2,然后通过配方法或放缩法挑选合适的a、b,让V_dot出现明显的负号项。这个技巧在处理形如x_dot = -x + x³的非线性系统时特别有效。

第三优先级,克拉索夫斯基法。取V = fᵀ(x)·f(x),其中f就是状态方程的右端函数。V_dot = (∂f/∂x)·f沿着轨迹的性质可以用来判断稳定性。这个方法的好处是不需要“猜”,缺点是条件偏保守,很多系统虽然稳定但用这个方法证不出来。

第四优先级,变量梯度法或“人肉调节”法。先假设∂V/∂x取某种函数形式,通过求梯度积分得到V,再验证V是否正定。这个方法在教材里冷门,但实际遇到难题时很管用。

实在不行,还有一条退路:降低期望。很多时候你并不需要证明全局渐近稳定,只需要在一个局部区域证明稳定就够用了。那就在平衡点附近做一个局部二次型V,用特征值估计吸引域范围,这个方法在工程上经常被用来给控制器调参保守性做评估。

4.2 问题二:V_dot是负半定而不是负定,真的不行吗

按照教科书的第一套定义,正定V配合负半定V_dot只能推“稳定”,不能推“渐近稳定”。但在实际操作里,负半定的情况经常可以通过LaSalle不变集原理升级结论。

我之前在3.2的例子里已经用了一次LaSalle不变集原理。这里再强调关键操作步骤:

第一步,令V_dot = 0,得到状态空间内的一个集合S。 第二步,检查集合S中是否含有除原点以外的“完整系统轨迹”。所谓完整系统轨迹,就是某个解x(t)对所有时间t都留在S里。 第三步,如果S中除原点外不包含任何完整轨迹,那么原点渐近稳定。

LaSalle光看定义不易用,实际判断时有个小技巧:如果S内所有点都满足状态方程的某个分量不为零,即状态点“不可能停留”,那S中的任何非平衡点都不可能是完整轨迹。比如上面例子里,x2 = 0时x2_dot = -x1 ≠ 0(x1 ≠ 0),状态点必然离开该集合。所以S中没有非零完整轨迹。

这个原理对自治系统(系统方程不显含时间t)成立,对非自治系统不能直接套用。遇到非自治系统,就得老老实实找负定的V_dot,或者用推广的类Lyapunov分析。

4.3 问题二点五:稳定、渐近稳定、指数稳定,别混为一谈

不少工程师在实际项目里把“稳定”等同于“收敛到零”,这在控制性能要求上会出大问题。无阻尼弹簧质量系统x_dot1 = x2、x_dot2 = -x1,它在李雅普诺夫意义下是稳定的,但不是渐近稳定,因为状态轨迹是等幅振荡,永远不回零。

如果在仿真里看到状态一直在振荡、不衰减,有些人会怀疑自己的V_dot算错了,其实系统就是“稳定但不收敛”而已。

还要提一个概念叫“指数稳定”,它要求存在α > 0和λ > 0,使得||x(t)|| ≤ α||x(0)||e^(-λt)。指数稳定比渐近稳定更强,因为它还要求收敛速率至少是指数级的。有时候V_dot算出来是负定的,但系统可能收敛很慢,比如V_dot = -x²/(1 + x²),虽然x会趋于零,但收敛速度未必能达到指数级别。在控制器设计时,如果你对收敛速率有硬性要求,光看渐近稳定性可能不够,还要进一步分析指数稳定性。

我把这三个概念的区别整理成一张速查表:

概念V_dot符号要求轨迹行为工程意义
稳定负半定轨迹有界不跑飞系统不会发散,适合检查安全性
渐近稳定负定或负半定配合LaSalle轨迹最终收敛到原点控制系统最基本目标
指数稳定存在二次型V夹逼轨迹以指数速率收敛对收敛速度有明确要求时使用

4.4 问题三:矩阵计算各种翻车,怎么排查

李雅普诺夫方程AᵀP + P A = -Q手算容易漏项,三阶以上基本得依赖工具。我在实操中遇到过的坑主要有三个:

第一个坑是矩阵转置方向搞错。MATLAB中lyap(A', Q)和lyap(A, Q)对应的是两个不同的方程。老版本里lyap(A, Q)解的是A P + P Aᵀ = -Q,而控制理论中常用的是AᵀP + P A = -Q,所以需要用lyap(A', Q)。新版本MATLAB推出了lyap(A, Q, [], 's')这类选项,含义更加复杂。我的建议是:动手之前先help lyap,确认当前版本的定义,然后写一个小测试矩阵验证一下P是否对称正定、是否满足方程,再做后续判断。永远不要直接相信函数返回值,一定要代入原方程验证AᵀP + P A + Q = 0是否在数值误差范围内成立。

第二个坑是Q矩阵取法。Q取单位阵是最简单的,但有时候A的特征值在虚轴上(临界稳定),李雅普诺夫方程无解或解不正定。这时候哪怕系统在李雅普诺夫意义下是稳定的(比如无阻尼振荡),也求不出正定P。这不代表系统是不稳定的,只说明这个方法在临界情形下失效。你可以换一个带少量阻尼的等效系统来逼近,或者直接用特征值判断。

第三个坑是手算的时候忘记验证P的正定性。解出P后一定要检查顺序主子式是否都为正,或者直接看特征值是否都大于0。我只检查了方程等式成立,但P不是正定的,导致后续V(x)的分析完全是错的。这对于二阶系统顺序主子式手算还能顶住,三阶以上最好用软件求出特征值来确认。

4.5 问题四:构造的V函数太“弱”了怎么办

有些时候V函数能找出来,结论也写得出来,但用起来并不让人放心,因为结论太弱。比如你只能证明“稳定”,但工程需要“渐近稳定”;或者你只能证明“局部渐近稳定”,但实际系统的初始偏差范围明显超出你验证的区域。

遇到这种情况,我有几条处理线索:

第一条线索,更换Q阵。在线性系统里,改变Q会得到不同的P,也就得到不同的V(x)。有的Q让V函数覆盖更大的吸引域,有的Q让V_dot更“负”从而可以获得更快的收敛估计。多试几个Q,选一个综合表现最好的。

第二条线索,给V函数增加交叉项或高次项。非线性系统里,纯二次型常给不出最强的结论。比如V = x1² + x2²不行,试试V = x1² + x2² + α·x1·x2,或者加一个x1⁴项。交叉项能够捕捉x1和x2之间的耦合关系,而高次项往往能改善全局性质。

第三条线索,验证径向无界。如果要在任意初始状态下都稳定(全局渐近稳定),V函数必须满足||x||→∞时V(x)→∞。很多V函数局部好用,但全局“拉不住”状态,比如V = x1²/(1 + x1²) + x2²虽然有界性良好,但它并不是径向无界的,这时只能得到局部结论。想要全局结论就要换径向无界的V。

这些操作没有绝对标准,但经验多了之后,你会逐渐形成一种“调试V函数”的手感:先找一个能用的V,然后看期望结论和实际结论之间的差距,再根据差距倒推修改V的方向。

4.5.1 一个V函数调参的实战记录

我曾接过一个简单的电机位置控制模型,状态变量分别是位置误差和速度误差,方程类似x1_dot = x2、x2_dot = -a·x2 - b·x1³。用纯二次型V = x1² + x2²算V_dot,得到的是V_dot = -2a·x2² - 2b·x1³·x2。这个式子不好判断符号,因为x1³·x2的符号不定。

我转用V = x1⁴ + x2²,此时V_dot = 4x1³·x2 + 2x2·(-a·x2 - b·x1³) = (4 - 2b)·x1³·x2 - 2a·x2²,这里b是正的常数,取b > 2时(4 - 2b)为负,整个表达式若能通过交叉项分析保证为负,就能推出渐近稳定。

具体到系数比较敏感的场合,我还会再调整幂次,比如V = α·x1⁴ + β·x2²,把α、β当自由参数去配不等式,直到V_dot能拆成“确定的负定项 + 可控交叉项”。这个过程和调PID参数有几分相似,都是在“从能稳定的保证出发,往更优的效果方向调”。我个人的感受是:不要指望一次猜中,V函数构造本质上是一个迭代试错的过程,每次试错都会加深对系统结构的理解。

5. 写在后面:稳定性分析的实际工作流

做控制器设计也好,做系统分析也好,我最终沉淀下来的稳定性分析流程基本是固定的:

第一步,列写状态方程。不管系统来自机械、电气还是化工,先把数学模型整理成标准状态空间形式x_dot = f(x, u),明确平衡点和控制输入的表达式。

第二步,用第一法快速筛选平衡点。针对每个平衡点做线性化,得到雅可比矩阵,检查特征值实部。这一步信息量不大,但非常便宜,大多数平衡点的局部稳定性在这一步就已经清楚了。

第三步,对关键平衡点用第二法做整体分析。构造V函数,计算V_dot,判断定号性。先尝试二次型,卡壳再上LaSalle、加权、变量梯度法或克拉索夫斯基法。这一步的目标是拿到尽可能强的结论:从稳定到渐近稳定再到指数稳定,从局域到全局。

第四步,仿真验证。用MATLAB/Simulink或Python跑一下闭环响应,至少取三组以上有代表性的初始条件,与理论结论交叉验证。如果理论说渐近稳定但仿真不收敛,先查模型是否写错;如果理论只给了稳定但仿真明显收敛,也未必是理论出错,可能只是V函数的结论偏保守。

整个流程里,李雅普诺夫理论不只是一个“判定工具”,它更像一种安全网:当线性化方法失效、数值仿真只是近似、现场工况充满不确定性时,它还能给你一个确定性的数学保证。这种保证对控制器设计来说尤其珍贵——毕竟最终要对实际系统负责的人是你自己。

说回到V函数这个核心话题,我踩过无数次坑之后最大的体会就是:V函数构造不是天赋,是熟练度。练得多了你会发现,很多非线性系统的V函数都有明确的“物理直觉”在指引——耗散项对应V_dot里的负平方项,保守恢复力项对应V里的势能项,交叉耦合项对应V里的交叉项。一个经验丰富的控制工程师能从一个系统的状态方程里嗅出它该配什么样的V函数,这种能力完全靠积累。

这篇文章写下来已经很长了,但李雅普诺夫稳定性理论的水远比这篇里写到的深得多。后面如果有机会,我再展开聊聊非自治系统的分析方法、LaSalle不变集原理的严格数学证明思路、以及V函数在控制器设计(比如反步法里CLF——控制李雅普诺夫函数)里的妙用。你要是手里有实际系统在稳定性分析上卡住了,也可以按这篇文章的流程先捋一遍,大概率能理出点头绪来。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询